[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