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

Frode Vatvedt Fjeld ffjeld at common-lisp.net
Fri Aug 6 14:45:30 UTC 2004


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

Modified Files:
	special-operators.lisp 
Log Message:
Don't barf when compiling + forms whose value is ignored, i.e. like

  (progn (+ a b) nil)

Date: Fri Aug  6 07:45:30 2004
Author: ffjeld

Index: movitz/special-operators.lisp
diff -u movitz/special-operators.lisp:1.33 movitz/special-operators.lisp:1.34
--- movitz/special-operators.lisp:1.33	Wed Jul 28 03:00:45 2004
+++ movitz/special-operators.lisp	Fri Aug  6 07:45:30 2004
@@ -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.33 2004/07/28 10:00:45 ffjeld Exp $
+;;;; $Id: special-operators.lisp,v 1.34 2004/08/06 14:45:30 ffjeld Exp $
 ;;;;                
 ;;;;------------------------------------------------------------------
 
@@ -1029,13 +1029,17 @@
 (define-special-operator muerte::++%2op (&all all &form form &env env &result-mode result-mode)
   (destructuring-bind (term1 term2)
       (cdr form)
-    (let ((returns (ecase (result-mode-type result-mode)
-		     ((:function :multiple-values :eax :push) :eax)
-		     ((:ebx :ecx :edx) result-mode)
-		     ((:lexical-binding) result-mode))))
-      (compiler-values ()
-	:returns returns
-	:code `((:add ,(movitz-binding term1 env) ,(movitz-binding term2 env) ,returns))))))
+    (if (eq :ignore result-mode)
+	(compiler-call #'compile-form-unprotected
+	  :forward all
+	  :form `(muerte.cl:progn term1 term2))
+      (let ((returns (ecase (result-mode-type result-mode)
+		       ((:function :multiple-values :eax :push) :eax)
+		       ((:ebx :ecx :edx) result-mode)
+		       ((:lexical-binding) result-mode))))
+	(compiler-values ()
+	  :returns returns
+	  :code `((:add ,(movitz-binding term1 env) ,(movitz-binding term2 env) ,returns)))))))
 
 (define-special-operator muerte::include (&form form)
   (let ((*require-dependency-chain*





More information about the Movitz-cvs mailing list