(eval-in-lexenv (first i) lexenv)
(return (eval-in-lexenv (first i) lexenv)))))
-(defun eval-locally (exp lexenv &optional vars)
+(defun eval-locally (exp lexenv &key vars)
(multiple-value-bind (body decls)
(parse-body (rest exp) :doc-string-allowed nil)
(let ((lexenv
;; 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
((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))