commit ccf304f19a485fc0da977160e84a79918e4b5866
parent 77c2905d53b48dc5e8dc1a6b4ef40797c592c457
Author: Bertrand BRUN <bertrand.brun@me.com>
Date: Sun, 14 Nov 2010 20:58:55 +0100
Continuation du cas de defvar
Diffstat:
2 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/lisp2li.lisp b/lisp2li.lisp
@@ -27,7 +27,7 @@
. ,(make-stat-env-optional (cdr params) env (+ 1 position) num-env)))))
(defun env-depth (env)
- (+ (or (second (first env)) -1) 1))
+ (or (cadar (last env)) 0))
(defun recalculation (env)
(cond ((endp env)
@@ -231,6 +231,15 @@ par le compilateur et par l’interpréteur"
;; setq
((eq 'setq (car expr))
(lisp2li `(setf ,@(cdr expr)) env))
+ ;; defvar
+ ((eq 'defvar (car expr))
+ (let ((var `(,(cadr expr)
+ ,(if (eq nil env) 0 (cadar (last env)))
+ ,(if (eq nil env) 1 (+ (caddar (last env)) 1)))))
+ (setf env (append env `(,var)))
+ (print env)
+ `(:set-var (,(second var) ,(third var))
+ ,(third expr))))
;; progn
((eq 'progn (car expr))
(cons :progn (map-lisp2li (cdr expr) env)))
diff --git a/main.lisp b/main.lisp
@@ -1,4 +1,4 @@
-(setq *print-circle* t)
+;(setq *print-circle* t)
(load "environnement")
(load "instructions")
(load "lisp2li")