;; to be careful about not muffling warnings arising from inner
;; evaluations/compilations, though [e.g. the ignored variable in
;; (DEFUN FOO (X) 1)]. -- CSR, 2003-05-13
- (let ((fun (sb!c:compile-in-lexenv nil
- `(lambda () ,expr)
- lexenv)))
+ (let* (;; why PROGN? So that attempts to eval free declarations
+ ;; signal errors rather than return NIL. -- CSR, 2007-05-01
+ (lambda `(lambda () (progn ,expr)))
+ (fun (sb!c:compile-in-lexenv nil lambda lexenv)))
(funcall fun)))
;;; Handle PROGN and implicit PROGN.
(not (consp (let ((sb!c:*lexenv* lexenv))
(sb!c:lexenv-find name funs)))))
(%coerce-name-to-fun name)
- (%simple-eval original-exp lexenv))))
+ (%simple-eval original-exp lexenv))))
((quote)
(unless (= n-args 1)
(error "wrong number of args to QUOTE:~% ~S" exp))
;; PROGN; otherwise, the EVAL-WHEN form returns NIL.
(declare (ignore ct lt))
(when e
- (simple-eval-progn-body body lexenv)))))
+ (simple-eval-progn-body body lexenv)))))
((locally)
- (simple-eval-locally exp lexenv))
+ (simple-eval-locally exp lexenv))
((macrolet)
(destructuring-bind (definitions &rest body)
(rest exp)
(declare (ignore funs))
sb!c:*lexenv*)
:eval))))
- (simple-eval-locally `(locally ,@body) lexenv))))
+ (simple-eval-locally `(locally ,@body) lexenv))))
((symbol-macrolet)
(destructuring-bind (definitions &rest body) (rest exp)
(multiple-value-bind (lexenv vars)