X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Ffull-eval.lisp;h=08f8cb667b3955eac4f982857ee757ee78015045;hb=5eb98a1de601302b0e3eb0c385262fca9093fcc0;hp=343b138be167f30a5b900b5927654d7cbf9dc8af;hpb=1c0ce8a24b12334a9eb7908ad72d329394d537c7;p=sbcl.git diff --git a/src/code/full-eval.lisp b/src/code/full-eval.lisp index 343b138..08f8cb6 100644 --- a/src/code/full-eval.lisp +++ b/src/code/full-eval.lisp @@ -371,28 +371,23 @@ ;; due to function calls. (see PARSE-ARGUMENTS) (if (and (consp exp) (eq (car exp) 'quote)) (second exp) - (%eval exp env))) - (maybe-new-env (env exp) - (if (and (consp exp) (eq (car exp) 'quote)) - env - (make-env :parent env)))) + (%eval exp env)))) (if bindings (let* ((binding-name (car (car bindings))) - (binding-value (cdr (car bindings)))) + (binding-value (cdr (car bindings))) + (new-env (make-env :parent env))) (if (specialp binding-name specials) (progv (list binding-name) (list (maybe-eval binding-value)) ;; Mark the variable as special in this environment - (push-var binding-name *special* env) + (push-var binding-name *special* new-env) (eval-next-let*-binding - (cdr bindings) specials - (maybe-new-env env binding-value) end-action)) + (cdr bindings) specials new-env end-action)) (progn - (push-var binding-name (maybe-eval binding-value) env) + (push-var binding-name (maybe-eval binding-value) new-env) (eval-next-let*-binding - (cdr bindings) specials - (maybe-new-env env binding-value) end-action)))) + (cdr bindings) specials new-env end-action)))) (funcall end-action env)))) ;;; Create a new environment based on OLD-ENV by adding the variable