(DEFINE-FILE-INFO PACKAGE "XCLC" READTABLE "XCL" BASE 10) (il:filecreated "19-Feb-88 10:48:00" il:|{EG:PARC:XEROX}<LANNING>LISP>USERS>XCLC-CALL-LAMBDA-SUBST-PATCH.;5| 3855 il:|changes| il:|to:| (il:functions meta-call-lambda-substitute) il:|previous| il:|date:| "18-Feb-88 07:37:32" il:|{EG:PARC:XEROX}<LANNING>LISP>USERS>XCLC-CALL-LAMBDA-SUBST-PATCH.;4|) ; Copyright (c) 1988 by Xerox Corporation. All rights reserved. (il:prettycomprint il:xclc-call-lambda-subst-patchcoms) (il:rpaqq il:xclc-call-lambda-subst-patchcoms ( (il:* il:|;;;| "Fix a bug with lambda-substitution") (il:functions meta-call-lambda-substitute) (il:declare\: il:dontcopy (il:props ( il:xclc-call-lambda-subst-patch il:makefile-environment ) ( il:xclc-call-lambda-subst-patch il:filetype))))) (il:* il:|;;;| "Fix a bug with lambda-substitution") (defun meta-call-lambda-substitute (node) (let* ((fn (call-fn node)) (var-list (lambda-required fn)) (spec-effects (il:for var il:in var-list il:unless (eq (variable-scope var) :lexical) il:collect ( effects-representation var))) (*subst-occurred* nil)) (il:* il:\; "Bind *SUBST-OCCURRED* just so that META-SUBST-VAR-REF has a binding to set even when nobody cares.") (il:for var il:in var-list il:as tail il:on (call-args node) il:when (and (eq (variable-scope var) :lexical) (substitutable-p (car tail) var) (dolist (spec-effect spec-effects t) (when (not (null-effects-intersection spec-effect (node-affected (car tail)))) (return nil))) (dolist (later-arg (cdr tail) t) (when (not (passable (car tail) later-arg)) (return nil)))) il:do (setf (lambda-body fn) (meta-substitute (car tail) var (lambda-body fn)))) (when (null (node-meta-p (lambda-body fn))) (setf (node-meta-p fn) nil) (setq *made-changes* t)))) (il:declare\: il:dontcopy (il:putprops il:xclc-call-lambda-subst-patch il:makefile-environment (:package "XCLC" :readtable "XCL" :base 10)) (il:putprops il:xclc-call-lambda-subst-patch il:filetype :compile-file) ) (il:putprops il:xclc-call-lambda-subst-patch il:copyright ("Xerox Corporation" 1988)) (il:declare\: il:dontcopy (il:filemap (nil))) il:stop