[movitz-cvs] CVS update: movitz/losp/muerte/functions.lisp
Frode Vatvedt Fjeld
ffjeld at common-lisp.net
Fri Apr 23 15:05:35 UTC 2004
Update of /project/movitz/cvsroot/movitz/losp/muerte
In directory common-lisp.net:/tmp/cvs-serv14221
Modified Files:
functions.lisp
Log Message:
Added special-cased compilation of (constantly t) and (constantly nil).
Date: Fri Apr 23 11:05:35 2004
Author: ffjeld
Index: movitz/losp/muerte/functions.lisp
diff -u movitz/losp/muerte/functions.lisp:1.10 movitz/losp/muerte/functions.lisp:1.11
--- movitz/losp/muerte/functions.lisp:1.10 Sun Apr 18 19:18:31 2004
+++ movitz/losp/muerte/functions.lisp Fri Apr 23 11:05:35 2004
@@ -10,7 +10,7 @@
;;;; Author: Frode Vatvedt Fjeld <frodef at acm.org>
;;;; Created at: Tue Mar 12 22:58:54 2002
;;;;
-;;;; $Id: functions.lisp,v 1.10 2004/04/18 23:18:31 ffjeld Exp $
+;;;; $Id: functions.lisp,v 1.11 2004/04/23 15:05:35 ffjeld Exp $
;;;;
;;;;------------------------------------------------------------------
@@ -26,13 +26,24 @@
(declare (ignore ignore))
'value)
-(define-compiler-macro constantly (&whole form value-form)
+(defun constantly-true (&rest ignore)
+ (declare (ignore ignore))
+ t)
+
+(defun constantly-false (&rest ignore)
+ (declare (ignore ignore))
+ nil)
+
+(define-compiler-macro constantly (&whole form value-form &environment env)
(cond
- ((movitz:movitz-constantp value-form)
- (let ((value (movitz:movitz-eval value-form)))
- `(make-prototyped-function (constantly ,value)
- constantly-prototype
- (value ,value))))
+ ((movitz:movitz-constantp value-form env)
+ (let ((value (movitz:movitz-eval value-form env)))
+ (case (translate-program value :muerte.cl :cl)
+ ((t) `(function constantly-true))
+ ((nil) `(function constantly-false))
+ (t `(make-prototyped-function (constantly ,value)
+ constantly-prototype
+ (value ,value))))))
(t (error "Non-constant constantly forms not yet supported: ~S" form)
form)))
@@ -64,7 +75,7 @@
(not (apply function args))))
(defun unbound-function (&edx edx &rest args)
- (declare (dynamic-extent args) (ignore args))
+ (declare (ignore args))
(let ((function-name (typecase edx
(symbol
edx)
More information about the Movitz-cvs
mailing list