- `(named-lambda
- ;; This name is used to communicate the original context
- ;; for the compiler, and identifies the lambda for use of
- ;; EVAL-LAMBDA-SOURCE-LAMBDA below.
- (eval ,(sb!c::source-form-context *eval-source-context*)) ()
- (declare (muffle-conditions compiler-note))
- ;; why PROGN? So that attempts to eval free declarations
- ;; signal errors rather than return NIL. -- CSR, 2007-05-01
- (progn ,expr)))
-
-(defun eval-lambda-p (form)
- (when (and (consp form) (eq 'named-lambda (first form)))
- (let ((name (second form)))
- (when (and (consp name) (eq 'eval (first name)))
- t))))
-
-(defun eval-lambda-source-lambda (eval-lambda)
- (if (eval-lambda-p eval-lambda)
- (destructuring-bind (named-lambda name lambda-list decl (progn expr))
- eval-lambda
- (declare (ignore named-lambda name lambda-list decl progn))
- (when (and (consp expr) (member (car expr) '(lambda named-lambda)))
- expr))
- eval-lambda))
+ (if (typep expr `(cons (member lambda named-lambda lambda-with-lexenv)))
+ (values expr nil)
+ (values `(lambda ()
+ ;; why PROGN? So that attempts to eval free declarations
+ ;; signal errors rather than return NIL. -- CSR, 2007-05-01
+ (progn ,expr))
+ t)))