help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Emacs Lisp: Problem with nested condition-case and catch in byte co


From: Greg Hill
Subject: Re: Emacs Lisp: Problem with nested condition-case and catch in byte compiled code
Date: Fri, 15 Nov 2002 10:22:58 -0800

A bit more experimentation shows that nesting a catch inside a catch or a condition-case inside a condition-case causes the same problem.

I'm beginning to think I must have stumbled across a bug in either the byte compiler or the byte-code interpreter.

--Greg

At 6:54 PM -0800 11/14/02, Greg Hill wrote:
This one has me stumped.

Here is my source code:

-----------------------------------------------------------------------------
(defun cctest ()
  (interactive)
  (catch 'cctest
    (message "before condition-case in catch, (interactive-p) = %s"
           (interactive-p))
    (condition-case nil
    (message "inside condition-case in catch, (interactive-p) = %s"
        (interactive-p))
      (error nil))
    (message "after condition-case in catch, (interactive-p) = %s"
         (interactive-p)))

  (message "before condition-case after catch, (interactive-p) = %s"
         (interactive-p))
  (condition-case nil
      (message "inside condition-case after catch, (interactive-p) = %s"
               (interactive-p))
    (error nil))
  (message "after condition-case after catch, (interactive-p) = %s"
         (interactive-p))

  (condition-case nil
      (progn
    (message "before catch in condition-case, (interactive-p) = %s"
        (interactive-p))
        (catch 'cctest
    (message "inside catch in condition-case, (interactive-p) = %s"
                  (interactive-p)))
    (message "after catch in condition-case, (interactive-p) = %s"
          (interactive-p)))
    (error nil)))
----------------------------------------------------------------------------


If I load the .el source file and execute cctest interactively, I get:

-------------------------------------------------------
before condition-case in catch, (interactive-p) = t
inside condition-case in catch, (interactive-p) = t
after condition-case in catch, (interactive-p) = t
before condition-case after catch, (interactive-p) = t
inside condition-case after catch, (interactive-p) = t
after condition-case after catch, (interactive-p) = t
before catch in condition-case, (interactive-p) = t
inside catch in condition-case, (interactive-p) = t
after catch in condition-case, (interactive-p) = t
-------------------------------------------------------


If I byte compile, load the .elc, and execute cctest interactively, I get:

-------------------------------------------------------
before condition-case in catch, (interactive-p) = t
inside condition-case in catch, (interactive-p) = nil
after condition-case in catch, (interactive-p) = t
before condition-case after catch, (interactive-p) = t
inside condition-case after catch, (interactive-p) = t
after condition-case after catch, (interactive-p) = t
before catch in condition-case, (interactive-p) = t
inside catch in condition-case, (interactive-p) = nil
after catch in condition-case, (interactive-p) = t
-------------------------------------------------------


There seems to be something special about a call to (interactive-p) inside a condition-case inside a catch, or inside a catch inside a condition-case, in byte-compiled code.  But for the life of me I can't imagine what that could be.  Anybody have any ideas?

--Greg


reply via email to

[Prev in Thread] Current Thread [Next in Thread]