Hello,
byte-compiling an upward funarg situation within a lexical-let is
problematic:
(funcall (lexical-let ((a 42)) (lambda () a))) => 42
(funcall (lexical-let ((a 42)) (byte-compile (lambda () a)))) => 42
Okay, modulo a compile-log warning:
** Passing a quoted lambda (arg 1) to #'apply, forcing function quoting
After that, there are more contrived situations where it completely
stops working, as in cases where you need to partially evaluate the
lambda-form:
(funcall (lexical-let ((a 42)) (byte-compile (eval '(lambda () a)))))
=> [bad lexical ref]
This is simplified, but think `(lambda () ,foo stuff a).
In general, the problem occurs when you can't control the time at which
cl-macroexpand-all performs. In such situations, the lexically let
symbols translation may miss some cases occuring in already
byte-compiled forms.
I can't quite figure out a way around this right now. Any ideas ?
--
Resistance is futile. You will be jazzimilated.
Scientific site:
http://www.lrde.epita.fr/~didier
Music (Jazz) site:
http://www.didierverna.com
_______________________________________________
XEmacs-Beta mailing list
XEmacs-Beta(a)xemacs.org
http://lists.xemacs.org/mailman/listinfo/xemacs-beta