www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

commit 6f743125bed48c70d76e4b165dfc167fd0f06ec2
parent 6d3071d9e8ee1f0035fa15130e17846b8dca2483
Author: Bertrand BRUN <bertrand.brun@me.com>
Date:   Tue, 26 Oct 2010 23:03:55 +0200

Ajout du cas du defun. Attention a verifier si tous marche selon la spec !

Diffstat:
Minstructions.lisp | 1-
Mlisp2li.lisp | 10++++++++++
2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/instructions.lisp b/instructions.lisp @@ -273,4 +273,3 @@ et termine par la liste APPEND." 42) -(dump-vm vm) diff --git a/lisp2li.lisp b/lisp2li.lisp @@ -14,6 +14,12 @@ (lisp2li (fourth expr) env))) ((eq 'quote (car expr)) ;;cas des quotes (cons :lit (second expr))) + ((eq 'defun (car expr)) ;; TODO : a verifier que le cas de defun est bien gerer comme on le veux + (cons :call (cons 'add-binding (list (list :call 'push-new-env `(:lit . ,env) '(:lit . "DEFUN")) + (cons :lit (second expr)) + (cons :lit (cons (length (third expr)) + (lisp2li (fourth expr) + (make-stat-env (push-new-env env "INTER") (third expr))))))))) ((and (fboundp (car expr)) (eq (macroexpand-1 expr) expr)) ;;cas des fonctions (cons :call (cons (first expr) (map-lisp2li (cdr expr) env)))) ((and (fboundp (car expr)) (not (eq (macroexpand-1 expr) expr))) ;;cas des macros @@ -24,6 +30,10 @@ (defun map-lisp2li (expr env) (mapcar (lambda (x) (lisp2li x env)) expr)) +(defun make-stat-env (env params) ;; TODO : Verifier si on ne doit pas plutot chercher s'il existe pas deja un environnement avec la valeur et le mettre plutot que nil. + (mapcar (lambda (x) (add-binding env x nil)) params) + env) + ;; Test unitaire (load "test-unitaire") ;(erase-tests)