[Openmcl-cvs-notifications] r15282 - /trunk/source/compiler/nx1.lisp

gb at clozure.com gb at clozure.com
Wed Mar 28 15:56:54 CDT 2012


Author: gb
Date: Wed Mar 28 15:56:53 2012
New Revision: 15282

Log:
Check for undefined functions while processing (FUNCTION <symbol>),
not while processing calls to a function used to implement that
(those calls may be effectively NOTINLINE.)

Fixes ticket:929.

Modified:
    trunk/source/compiler/nx1.lisp

Modified: trunk/source/compiler/nx1.lisp
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/source/compiler/nx1.lisp (original)
+++ trunk/source/compiler/nx1.lisp Wed Mar 28 15:56:53 2012
@@ -1426,6 +1426,11 @@
 	   (progn
 	     (while (setq fn (assq arg *nx-synonyms*))
 	       (setq arg (%cdr fn)))
+             (let* ((env *nx-lexical-environment*))
+               	(unless (or (nx1-find-call-def arg env)
+		    (find-ftype-decl arg env)
+		    (eq arg *nx-global-function-name*))
+                  (nx1-whine :undefined-function arg)))
 	     (nx1-form context `(%function ',arg)))))
 	((setf-function-name-p arg)
 	 (nx1-form context `(function ,(nx-need-function-name arg))))
@@ -1474,12 +1479,7 @@
     (if (and (eq (car sym) (%nx1-operator immediate))
              (setq symbol (cadr sym))
              (symbolp symbol))
-      (let ((env *nx-lexical-environment*))
-	(unless (or (nx1-find-call-def symbol env)
-		    (find-ftype-decl symbol env)
-		    (eq symbol *nx-global-function-name*))
-	  (nx1-whine :undefined-function symbol))
-        (make-acode (%nx1-default-operator) symbol))
+      (make-acode (%nx1-default-operator) symbol)
       (make-acode (%nx1-operator call) (nx1-immediate context '%function) =
(list nil (list sym))))))
 =

 (defnx1 nx1-tagbody tagbody context (&rest args)



More information about the Openmcl-cvs-notifications mailing list