From 1e1fab23b5dc46f22b704cb42f36f7147a58003b Mon Sep 17 00:00:00 2001 From: James Cash Date: Mon, 21 Jul 2008 02:27:08 -0400 Subject: [PATCH] More changes to lisp, trying to handle multiple body statements. CURRENTLY BROKEN --- extra/lisp/lisp.factor | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/extra/lisp/lisp.factor b/extra/lisp/lisp.factor index a3f207ec85..8e5322b0be 100644 --- a/extra/lisp/lisp.factor +++ b/extra/lisp/lisp.factor @@ -28,27 +28,28 @@ DEFER: define-lisp-macro ! words for convert-lambda > , at ] [ ] bi or ] traverse ] } - { [ dup lisp-symbol? ] [ name>> over at ] } - [ ] + { [ dup list? ] [ [ lisp-symbol? ] rot '[ [ name>> , at ] [ ] bi or ] traverse ] } + { [ dup lisp-symbol? ] [ name>> swap at ] } + [ nip ] } cond ; : localize-lambda ( body vars -- newvars newbody ) - make-locals dup push-locals swap - [ swap localize-body convert-form swap pop-locals ] dip swap ; + swap [ make-locals dup push-locals ] dip + dupd [ localize-body convert-form ] with lmap>array + >quotation swap pop-locals ; : split-lambda ( cons -- body-cons vars-seq ) - cdr uncons [ car ] [ [ name>> ] lmap>array ] bi* ; inline + cdr uncons [ name>> ] lmap>array ; inline : rest-lambda ( body vars -- quot ) - "&rest" swap [ index ] [ remove ] 2bi - swapd localize-lambda lambda-rewrite call - '[ , cut '[ @ , seq>list ] call , call ] ; + "&rest" swap [ remove ] [ index ] 2bi + [ localize-lambda lambda-rewrite call ] dip + swap '[ , cut '[ @ , seq>list ] call , call ] ; : normal-lambda ( body vars -- quot ) - localize-lambda lambda-rewrite [ compose call ] compose 1quotation ; + localize-lambda lambda-rewrite [ compose call ] compose ; PRIVATE> : convert-lambda ( cons -- quot ) @@ -89,7 +90,7 @@ PRIVATE> : lisp-string>factor ( str -- quot ) lisp-expr convert-form ; - + : lisp-eval ( str -- * ) lisp-string>factor call ;