X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fir1tran-lambda.lisp;h=ee321c0f78e532146b002224e96b4abf84224df3;hb=9b1fade83db8453b75b8c7380eb12ce41b5b889c;hp=5c5138970888267f61e021c569abafc74313829d;hpb=7a0f4c68d94ff6c9a54c7605b6fd3cd8125c1c8c;p=sbcl.git diff --git a/src/compiler/ir1tran-lambda.lisp b/src/compiler/ir1tran-lambda.lisp index 5c51389..ee321c0 100644 --- a/src/compiler/ir1tran-lambda.lisp +++ b/src/compiler/ir1tran-lambda.lisp @@ -773,6 +773,7 @@ (declare (type optional-dispatch res) (list default-vars default-vals entry-vars entry-vals vars body aux-vars aux-vals)) + (aver (or debug-name (neq '.anonymous. source-name))) (cond ((not vars) (if (optional-dispatch-keyp res) ;; Handle &KEY with no keys... @@ -858,17 +859,17 @@ ;;; call IR1-CONVERT-HAIRY-ARGS to do the work. When it is done, we ;;; figure out the MIN-ARGS and MAX-ARGS. (defun ir1-convert-hairy-lambda (body vars keyp allowp aux-vars aux-vals - &key - post-binding-lexenv - (source-name '.anonymous.) - (debug-name - (debug-name '&optional-dispatch vars))) + &key post-binding-lexenv + (source-name '.anonymous.) + debug-name) (declare (list body vars aux-vars aux-vals)) + (aver (or debug-name (neq '.anonymous. source-name))) (let ((res (make-optional-dispatch :arglist vars :allowp allowp :keyp keyp :%source-name source-name - :%debug-name debug-name + :%debug-name (debug-name '&optional-dispatch + (or debug-name source-name)) :plist `(:ir1-environment (,*lexenv* ,*current-path*)))) @@ -899,7 +900,8 @@ (compiler-error "The lambda expression has a missing or non-list lambda list:~% ~S" form)) - + (unless (or debug-name (neq '.anonymous. source-name)) + (setf debug-name (name-lambdalike form))) (multiple-value-bind (vars keyp allow-other-keys aux-vars aux-vals) (make-lambda-vars (cadr form)) (multiple-value-bind (forms decls) (parse-body (cddr form)) @@ -931,6 +933,12 @@ :debug-name debug-name)))) (setf (functional-inline-expansion res) form) (setf (functional-arg-documentation res) (cadr form)) + (when (boundp '*lambda-conversions*) + ;; KLUDGE: Not counting TL-XEPs is a lie, of course, but + ;; keeps things less confusing to users of TIME, where this + ;; count gets used. + (unless (and (consp debug-name) (eq 'tl-xep (car debug-name))) + (incf *lambda-conversions*))) res)))) (defun wrap-forms-in-debug-catch (forms) @@ -970,6 +978,8 @@ &key (source-name '.anonymous.) debug-name) + (when (and (not debug-name) (eq '.anonymous. source-name)) + (setf debug-name (name-lambdalike thing))) (ecase (car thing) ((lambda) (ir1-convert-lambda thing @@ -984,7 +994,7 @@ ((named-lambda) (let ((name (cadr thing)) (lambda-expression `(lambda ,@(cddr thing)))) - (if (legal-fun-name-p name) + (if (and name (legal-fun-name-p name)) (let ((defined-fun-res (get-defined-fun name)) (res (ir1-convert-lambda lambda-expression :maybe-add-debug-catch t @@ -999,7 +1009,8 @@ res) (ir1-convert-lambda lambda-expression :maybe-add-debug-catch t - :debug-name name)))) + :debug-name + (or name (name-lambdalike thing)))))) ((lambda-with-lexenv) (ir1-convert-inline-lambda thing :source-name source-name @@ -1016,6 +1027,8 @@ (source-name '.anonymous.) debug-name system-lambda) + (when (and (not debug-name) (eq '.anonymous. source-name)) + (setf debug-name (name-lambdalike fun))) (destructuring-bind (decls macros symbol-macros &rest body) (if (eq (car fun) 'lambda-with-lexenv) (cdr fun)