Mercurial > hg > xemacs-beta
comparison lisp/byte-optimize.el @ 5663:0df4d95bd98a
Fetch its bytecode before unfolding a compiled function, byte-optimize.el
lisp/ChangeLog addition:
2012-05-12 Aidan Kehoe <kehoea@parhasard.net>
* byte-optimize.el (byte-compile-unfold-lambda):
Fetch the bytecode before unfolding a compiled function, its body
may have been compiled lazily thanks to
byte-compile-dynamic. Thank you Mats Lidell and the package
smoketest!
author | Aidan Kehoe <kehoea@parhasard.net> |
---|---|
date | Sat, 12 May 2012 15:03:24 +0100 |
parents | 2a870a7b86bd |
children | b4715fcbe001 |
comparison
equal
deleted
inserted
replaced
5662:bed39edf91ba | 5663:0df4d95bd98a |
---|---|
294 (defun byte-compile-unfold-lambda (form &optional name) | 294 (defun byte-compile-unfold-lambda (form &optional name) |
295 (or name (setq name "anonymous lambda")) | 295 (or name (setq name "anonymous lambda")) |
296 (let ((lambda (car form)) | 296 (let ((lambda (car form)) |
297 (values (cdr form))) | 297 (values (cdr form))) |
298 (if (compiled-function-p lambda) | 298 (if (compiled-function-p lambda) |
299 (setq lambda (list 'lambda (compiled-function-arglist lambda) | 299 (setq lambda (fetch-bytecode lambda) |
300 (list 'byte-code | 300 lambda (list 'lambda (compiled-function-arglist lambda) |
301 (compiled-function-instructions lambda) | 301 (list 'byte-code |
302 (compiled-function-constants lambda) | 302 (compiled-function-instructions lambda) |
303 (compiled-function-stack-depth lambda))))) | 303 (compiled-function-constants lambda) |
304 (compiled-function-stack-depth lambda))))) | |
304 (let ((arglist (nth 1 lambda)) | 305 (let ((arglist (nth 1 lambda)) |
305 (body (cdr (cdr lambda))) | 306 (body (cdr (cdr lambda))) |
306 optionalp restp | 307 optionalp restp |
307 bindings) | 308 bindings) |
308 (if (and (stringp (car body)) (cdr body)) | 309 (if (and (stringp (car body)) (cdr body)) |