projects
/
sbcl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
1.0.29.13: relax CAST-EXTERNALLY-CHECKABLE-P a bit
[sbcl.git]
/
src
/
code
/
full-eval.lisp
diff --git
a/src/code/full-eval.lisp
b/src/code/full-eval.lisp
index
0f04a0f
..
00e4e33
100644
(file)
--- a/
src/code/full-eval.lisp
+++ b/
src/code/full-eval.lisp
@@
-185,13
+185,13
@@
;;; Augment ENV with a local function binding
(declaim (inline push-fun))
;;; Augment ENV with a local function binding
(declaim (inline push-fun))
-(defun push-fun (name value env)
+(defun push-fun (name value calling-env body-env)
(when (fboundp name)
(when (fboundp name)
- (let ((sb!c:*lexenv* (env-native-lexenv env)))
+ (let ((sb!c:*lexenv* (env-native-lexenv calling-env)))
(program-assert-symbol-home-package-unlocked
:eval name "binding ~A as a local function")))
(program-assert-symbol-home-package-unlocked
:eval name "binding ~A as a local function")))
- (push (cons name value) (env-funs env))
- (push (cons name :bogus) (sb!c::lexenv-funs (env-native-lexenv env))))
+ (push (cons name value) (env-funs body-env))
+ (push (cons name :bogus) (sb!c::lexenv-funs (env-native-lexenv body-env))))
(sb!int:def!method print-object ((env env) stream)
(print-unreadable-object (env stream :type t :identity t)))
(sb!int:def!method print-object ((env env) stream)
(print-unreadable-object (env stream :type t :identity t)))
@@
-236,7
+236,10
@@
(cond
((eq type :constant)
;; Horrible place for this, but it works.
(cond
((eq type :constant)
;; Horrible place for this, but it works.
- (ip-error "Can't bind constant symbol ~S" symbol))
+ (ip-error "Can't bind constant symbol: ~S" symbol))
+ ((eq type :global)
+ ;; Ditto...
+ (ip-error "Can't bind a global variable: ~S" symbol))
((eq type :special) t)
((member symbol declared-specials :test #'eq)
t)
((eq type :special) t)
((member symbol declared-specials :test #'eq)
t)
@@
-682,6
+685,8
@@
(push-fun (car function-def)
;; Evaluate the function definitions in ENV.
(eval-local-function-def function-def env)
(push-fun (car function-def)
;; Evaluate the function definitions in ENV.
(eval-local-function-def function-def env)
+ ;; Do package-lock checks in ENV.
+ env
;; But add the bindings to the child environment.
new-env))
(eval-progn body new-env)))))
;; But add the bindings to the child environment.
new-env))
(eval-progn body new-env)))))
@@
-698,6
+703,7
@@
(dolist (function-def local-functions)
(push-fun (car function-def)
(eval-local-function-def function-def env)
(dolist (function-def local-functions)
(push-fun (car function-def)
(eval-local-function-def function-def env)
+ old-env
env))
;; And then add an environment for the body of the LABELS. A
;; separate environment from the one where we added the
env))
;; And then add an environment for the body of the LABELS. A
;; separate environment from the one where we added the