commit 5652d4deba6496fefdd7495bc076416119db9223
parent b14701f20a0877a36294231f895787fdd5f4392b
Author: Bertrand BRUN <bertrand.brun@me.com>
Date: Sun, 31 Oct 2010 23:25:58 +0100
La gestion des LET est en place. Mais pour le traitement c'est pas encore ca :D
Diffstat:
1 file changed, 7 insertions(+), 0 deletions(-)
diff --git a/lisp2li.lisp b/lisp2li.lisp
@@ -1,4 +1,5 @@
(load "environnement")
+
(defun lisp2li (expr env)
"Convertit le code LISP en un code intermédiaire reconnu
par le compilateur et par l’interpréteur"
@@ -44,6 +45,9 @@ par le compilateur et par l’interpréteur"
(cons :call (cons 'set-binding (list `(:lit . ,env)
(cons :lit (second expr))
(cons :lit (third expr))))))
+ ((eq 'let (car expr))
+ (push-new-env env "LET")
+ (map-lisp2li-let expr env))
((macro-function (car expr))
(lisp2li (macroexpand-1 expr) env)) ; macros
((not (special-operator-p (car expr))) ; fonctions normales.
@@ -55,6 +59,9 @@ par le compilateur et par l’interpréteur"
(defun map-lisp2li (expr env)
(mapcar (lambda (x) (lisp2li x env)) expr))
+(defun map-lisp2li-let (expr env)
+ (mapcar (lambda (x) (add-binding env (car x) (lisp2li (cadr x) env))) (cadr expr)))
+
(defun make-stat-env (env params)
(mapcar (lambda (x) (add-binding env x nil)) params)
env)