Changeset 12505


Ignore:
Timestamp:
02/23/10 23:35:17 (14 years ago)
Author:
astalla
Message:

Added missing copy-tree for the function body in one case of lambda inlining,
which didn't play well with compiler macros (self-modifying code).
Should fix the bug found by Alan Ruttenberg on 2010-02-16.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/abcl/src/org/armedbear/lisp/compiler-pass1.lisp

    r12428 r12505  
    204204               temp-bindings rest-binding)
    205205    (setf bindings (append bindings rest-binding)))))
    206 
    207206  ;;Aux parameters.
    208207  (when aux
     
    212211           :for var-info :in aux
    213212           :collect `(,(var var-info) ,(initform var-info))))))
    214  
    215213  (values (append req-bindings temp-bindings bindings)
    216214    ignorables)))))
     
    319317           args)
    320318  `(let* ,bindings
    321      (declare (ignorable ,@ignorables))
     319     ,@(when ignorables
     320       `((declare (ignorable ,@ignorables))))
    322321     ,@body))
    323322    (lambda-list-mismatch (x)
     
    12491248    (if (and (listp op)
    12501249       (eq (car op) 'lambda))
    1251   (expand-function-call-inline form (cadr op) (cddr op) args)
     1250  (expand-function-call-inline form (cadr op) (copy-tree (cddr op)) args)
    12521251  (if (unsafe-p args)
    12531252      (let ((arg1 (car args)))
     
    12761275  (let ((new-form (rewrite-function-call form)))
    12771276    (when (neq new-form form)
    1278 ;;       (let ((*print-structure* nil))
    1279 ;;         (format t "old form = ~S~%" form)
    1280 ;;         (format t "new form = ~S~%" new-form))
    12811277      (return-from p1-function-call (p1 new-form))))
    12821278  (let* ((op (car form))
Note: See TracChangeset for help on using the changeset viewer.