Changeset 12550 for trunk/source/level-1


Ignore:
Timestamp:
Aug 6, 2009, 11:24:59 PM (10 years ago)
Author:
rme
Message:

macroexpand-all and labels/flet patch, from Stas Boukarev.

http://clozure.com/pipermail/openmcl-devel/2009-August/010110.html

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/level-1/l1-readloop.lisp

    r12463 r12550  
    333333              ((flet labels)
    334334               (destructuring-bind-body (bindings &body) (rest form)
    335                 `(,(first form)
    336                    ,(mapcar (lambda (binding)
    337                               (list* (first binding) (cdr (macroexpand-all `(lambda ,@(rest binding)) env))))
    338                             bindings)
    339                    ,@decls
    340                    ,@(mexpand body env))))
     335                 (let ((augmented-env
     336                        (augment-environment env :function (mapcar #'car bindings))))
     337                  `(,(first form)
     338                     ,(mapcar (lambda (binding)
     339                                (list* (first binding)
     340                                       (cdr (macroexpand-all `(lambda ,@(rest binding))
     341                                                             (if (eq (first form) 'labels)
     342                                                                 augmented-env
     343                                                                 env)))))
     344                              bindings)
     345                     ,@decls
     346                     ,@(mexpand body augmented-env)))))
    341347              (nfunction (list* 'nfunction (second form) (macroexpand-all (third form) env)))
    342348              (function
Note: See TracChangeset for help on using the changeset viewer.