[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#13023: 24.3.50; lexical binding does not work within defadvice
From: |
Stefan Monnier |
Subject: |
bug#13023: 24.3.50; lexical binding does not work within defadvice |
Date: |
Wed, 28 Nov 2012 23:32:36 -0500 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.3.50 (gnu/linux) |
> ;; -*- lexical-binding: t -*-
> (funcall (let ((rms "works"))
> (lambda ()
> (message "lex-bind %s" rms))))
> (defun asdf (b) (funcall b))
> (defadvice asdf (before rms (b) activate)
> (setf b (let ((abc 1) (b b)) (lambda () (print abc) (funcall b)))))
> (asdf 'ding)
> I think this code should work fine. It doesn't work with trunk and
> emacs-24, though:
Indeed, it doesn't work. And because of the way advice.el works
(building a new function by combining the code chunks from all the
pieces of advice applied to that function) it's not easy to fix.
This is partly related to the issue mentioned recently that macro calls
in pieces of advice are expanded late (typically when the advised
function is defined).
BTW, this does not affect the new `advice-add' feature in Emacs trunk.
Stefan