[movitz-cvs] CVS update: movitz/special-operators.lisp

Frode Vatvedt Fjeld ffjeld at common-lisp.net
Sun Aug 28 21:04:06 UTC 2005


Update of /project/movitz/cvsroot/movitz
In directory common-lisp.net:/tmp/cvs-serv6274

Modified Files:
	special-operators.lisp 
Log Message:
Many fixes to the compiler. Basic change is that LET init-forms are
compiled with compile-form-unprotected, and that
compile-lexical-variable and compile-self-evaluating return binding
only as "returns", not in the form of "code".

Date: Sun Aug 28 23:03:55 2005
Author: ffjeld

Index: movitz/special-operators.lisp
diff -u movitz/special-operators.lisp:1.53 movitz/special-operators.lisp:1.54
--- movitz/special-operators.lisp:1.53	Sat Aug 20 22:31:25 2005
+++ movitz/special-operators.lisp	Sun Aug 28 23:03:53 2005
@@ -8,7 +8,7 @@
 ;;;; Author:        Frode Vatvedt Fjeld <frodef at acm.org>
 ;;;; Created at:    Fri Nov 24 16:22:59 2000
 ;;;;                
-;;;; $Id: special-operators.lisp,v 1.53 2005/08/20 20:31:25 ffjeld Exp $
+;;;; $Id: special-operators.lisp,v 1.54 2005/08/28 21:03:53 ffjeld Exp $
 ;;;;                
 ;;;;------------------------------------------------------------------
 
@@ -82,21 +82,19 @@
      ((not (null then-forms))
       (let ((skip-label (gensym (format nil "cond-skip-~D-" clause-num))))
 	(compiler-values-bind (&code test-code)
-	    (multiple-value-bind (test-result-mode)
-		(cond
-		 ((and last-clause-p
-		       (eq (operator result-mode)
-			   :boolean-branch-on-false))
-		  (cons :boolean-branch-on-false
-			(cdr result-mode)))
-		 (t (cons :boolean-branch-on-false
-			  skip-label)))
-	      (compiler-call #'compile-form
-		:result-mode test-result-mode
-		:modify-accumulate clause-modifies
-		:form test-form
-		:funobj funobj
-		:env env))
+	    (compiler-call #'compile-form
+	      :result-mode (cond
+			    ((and last-clause-p
+				  (eq (operator result-mode)
+				      :boolean-branch-on-false))
+			     (cons :boolean-branch-on-false
+				   (cdr result-mode)))
+			    (t (cons :boolean-branch-on-false
+				     skip-label)))
+	      :modify-accumulate clause-modifies
+	      :form test-form
+	      :funobj funobj
+	      :env env)
 	  (compiler-values-bind (&code then-code &returns then-returns)
 	      (compiler-call #'compile-form
 		:form (cons 'muerte.cl::progn then-forms)
@@ -134,8 +132,7 @@
 (define-special-operator compiled-cond
     (&form form &funobj funobj &env env &result-mode result-mode)
   (let ((clauses (cdr form)))
-    (let* ((cond-modifies nil)
-	   (cond-exit-label (gensym "cond-exit-"))
+    (let* ((cond-exit-label (gensym "cond-exit-"))
 	   (cond-result-mode (case (operator result-mode)
 			       (:values :multiple-values)
 			       ((:ignore :function :multiple-values :eax :ebx :ecx :edx
@@ -152,32 +149,28 @@
 				   '(:ignore
 				     :boolean-branch-on-true
 				     :boolean-branch-on-false))))
-      (loop for clause in clauses
+      (loop with last-clause-num = (1- (length clauses))
+	  for clause in clauses
 	  for clause-num upfrom 0
-	  with last-clause-num = (1- (length clauses))
-	  as (clause-code constantly-true-p clause-modifies) =
-	    (multiple-value-list (make-compiled-cond-clause clause
-							    clause-num
-							    (and only-control-p
-								 (= clause-num last-clause-num))
-							    cond-exit-label funobj env cond-result-mode))
+	  as (clause-code constantly-true-p) =
+	    (multiple-value-list
+	     (make-compiled-cond-clause clause
+					clause-num
+					(and only-control-p
+					     (= clause-num last-clause-num))
+					cond-exit-label funobj env cond-result-mode))
 	  append clause-code into cond-code
-	  do (setf cond-modifies
-	       (modifies-union cond-modifies clause-modifies))
 	  when constantly-true-p
 	  do (return (compiler-values ()
 		       :returns cond-returns
-		       :modifies cond-modifies
 		       :code (append cond-code
 				     (list cond-exit-label))))
 	  finally
 	    (return (compiler-values ()
 		      :returns cond-returns
-		      :modifies cond-modifies
 		      :code (append cond-code
 				    ;; no test succeeded => nil
 				    (unless only-control-p
-;;;				      (warn "doing default nil..")
 				      (compiler-call #'compile-form
 					:form nil
 					:funobj funobj




More information about the Movitz-cvs mailing list