Lisp2li gere maintenant les progn. Et correction d'une erreur dans la gestion du defun

This commit is contained in:
Bertrand BRUN 2010-11-02 13:07:47 +01:00
parent 5809570f57
commit ac8f7a1953
2 changed files with 7 additions and 3 deletions

View File

@ -38,8 +38,8 @@ par le compilateur et par linterpréteur"
(add-top-level-binding env
(second expr)
(cons :lclosure (cons env-bis
(lisp2li (fourth expr)
env-bis)))))
(map-lisp2li (cdddr expr)
env-bis)))))
(cons :lit (second expr)))
((eq 'setq (car expr))
(cons :call (cons 'set-binding (list `(:lit . ,env)
@ -62,12 +62,14 @@ par le compilateur et par linterpréteur"
`(let (,(car bindings))
(let* ,(cdr bindings)
,body))) env)))
((eq 'progn (car expr)) ; PROGN
(cons :progn (map-lisp2li (cdr expr) env)))
((macro-function (car expr))
(lisp2li (macroexpand-1 expr) env)) ; macros
((not (special-operator-p (car expr))) ; fonctions normales.
(cons :call (cons (first expr) (map-lisp2li (cdr expr) env))))
(T
(error "special forme NYI ~S" (car expr)))
(error "special form not yet implemented ~S" (car expr)))
))
(defun map-lisp2li (expr env)

View File

@ -18,6 +18,8 @@
(defun map-meval (list env)
(mapcar (lambda (x) (meval x env)) list))
(defun foo (x) x)
;; Test unitaire
(load "test-unitaire")
(erase-tests meval)