[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#5662: flet not undone on lisp nesting error
From: |
Stefan Monnier |
Subject: |
bug#5662: flet not undone on lisp nesting error |
Date: |
Fri, 05 Mar 2010 15:30:45 -0500 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/23.1.91 (gnu/linux) |
> If I trigger a lisp nesting error with an infinite recursion inside a
> let and an flet binding, then the effects of the flet are not undone,
> resulting in a change of binding at the top-level.
> (defun g () 'g-orig)
> (setq a 'a-orig)
> (defun h ()
> (let ((a 'a-new))
> (flet ((g () 'g-new))
> (h))))
> (h) ;; <-- Lisp nesting exceeds `max-lisp-eval-depth'
> (g) ;; g-new !
> a ;; a-orig
I can indeed reproduce it. I'm not sure yet what's going on, but it
might be due to the "Lisp nesting exceeds `max-lisp-eval-depth'" error
happening in the unwind-protect code (i.e. while undoing the `g'
binding). The explanation can't be quite so simple, but my gut feeling
tells me it's got to do with it.
Stefan