diff --git a/compiler/ir2tran.lisp b/compiler/ir2tran.lisp index bcafc93d146b712008a5a4aee0fafb084159390e..861b38c8fd7222fa1474503fa47391b7c6ed8f71 100644 --- a/compiler/ir2tran.lisp +++ b/compiler/ir2tran.lisp @@ -7,7 +7,7 @@ ;;; Scott Fahlman (FAHLMAN@CMUC). ;;; ********************************************************************** ;;; -;;; $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/ir2tran.lisp,v 1.10 1990/04/21 17:36:53 ram Exp $ +;;; $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/ir2tran.lisp,v 1.11 1990/04/27 11:39:42 ram Exp $ ;;; ;;; This file contains the virtual machine independent parts of the code ;;; which does the actual translation of nodes to VOPs. @@ -195,17 +195,18 @@ (defun ir2-convert-closure (node block leaf res) (declare (type ref node) (type ir2-block block) (type clambda leaf) (type tn res)) - (let ((entry (make-load-time-constant-tn :entry leaf)) - (this-env (node-environment node)) - (leaf-closure (environment-closure (lambda-environment leaf)))) - (cond (leaf-closure - (vop make-closure node block (emit-constant (length leaf-closure)) - entry res) - (let ((n (1- system:%function-closure-variables-offset))) - (dolist (what leaf-closure) - (vop closure-init node block - res (find-in-environment what this-env) - (incf n))))) + (let ((entry (make-load-time-constant-tn :entry leaf))) + (cond ((and (lambda-p leaf) + (environment-closure (lambda-environment leaf))) + (let ((this-env (node-environment node)) + (closure (environment-closure (lambda-environment leaf)))) + (vop make-closure node block (emit-constant (length closure)) + entry res) + (let ((n (1- system:%function-closure-variables-offset))) + (dolist (what closure) + (vop closure-init node block + res (find-in-environment what this-env) + (incf n)))))) (t (emit-move node block entry res)))) (undefined-value))