(eval-in-lexenv (first i) lexenv)
(return (eval-in-lexenv (first i) lexenv)))))
-(defun eval-locally (exp lexenv &optional vars)
- (multiple-value-bind (body decls) (parse-body (rest exp) nil)
+(defun eval-locally (exp lexenv &key vars)
+ (multiple-value-bind (body decls)
+ (parse-body (rest exp) :doc-string-allowed nil)
(let ((lexenv
;; KLUDGE: Uh, yeah. I'm not anticipating
;; winning any prizes for this code, which was
;; undefined things can be accumulated [and
;; then thrown away, as it happens]). -- CSR,
;; 2002-10-24
- (let ((sb!c:*lexenv* lexenv)
- (sb!c::*free-funs* (make-hash-table :test 'equal))
- (sb!c::*free-vars* (make-hash-table :test 'eq))
- (sb!c::*undefined-warnings* nil))
+ (let* ((sb!c:*lexenv* lexenv)
+ (sb!c::*free-funs* (make-hash-table :test 'equal))
+ (sb!c::*free-vars* (make-hash-table :test 'eq))
+ (sb!c::*undefined-warnings* nil))
+ ;; FIXME: VALUES declaration
(sb!c::process-decls decls
vars
nil
- (sb!c::make-continuation)
lexenv))))
(eval-progn-body body lexenv))))
(progn
(signal c)
nil)
- ;; ... if we're not in the compiler, better signal a
- ;; program error straight away.
- (invoke-restart 'sb!c::signal-program-error)))))
+ ;; ... if we're not in the compiler, better signal the
+ ;; error straight away.
+ (invoke-restart 'sb!c::signal-error)))))
(let ((exp (macroexpand original-exp lexenv)))
(typecase exp
(symbol
(if (and (legal-fun-name-p name)
(not (consp (let ((sb!c:*lexenv* lexenv))
(sb!c:lexenv-find name funs)))))
- (fdefinition name)
+ (%coerce-name-to-fun name)
(%eval original-exp lexenv))))
((quote)
(unless (= n-args 1)
((null (cddr args))
;; We duplicate the call to SET so that the
;; correct value gets returned.
- (set (first args) (eval (second args))))
- (set (first args) (eval (second args)))))
+ (set (first args) (eval-in-lexenv (second args) lexenv)))
+ (set (first args) (eval-in-lexenv (second args) lexenv))))
(let ((symbol (first name)))
(case (info :variable :kind symbol)
(:special)
((macrolet)
(destructuring-bind (definitions &rest body)
(rest exp)
- (let ((lexenv
+ (let ((lexenv
(let ((sb!c:*lexenv* lexenv))
(sb!c::funcall-in-macrolet-lexenv
definitions
:eval))))
(eval-locally `(locally ,@body) lexenv))))
((symbol-macrolet)
- (destructuring-bind (definitions &rest body)
- (rest exp)
+ (destructuring-bind (definitions &rest body) (rest exp)
(multiple-value-bind (lexenv vars)
(let ((sb!c:*lexenv* lexenv))
(sb!c::funcall-in-symbol-macrolet-lexenv
(lambda (&key vars)
(values sb!c:*lexenv* vars))
:eval))
- (eval-locally `(locally ,@body) lexenv vars))))
+ (eval-locally `(locally ,@body) lexenv :vars vars))))
(t
(if (and (symbolp name)
(eq (info :function :kind name) :function))
(defun values (&rest values)
#!+sb-doc
"Return all arguments, in order, as values."
+ (declare (dynamic-extent values))
(values-list values))
(defun values-list (list)