X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fdebug-dump.lisp;h=6633b3fa9ce6d690ec7c034d8ce215ea9ffc44b7;hb=e8011f7c83587a9dc1b13281d0cc974bb0b054be;hp=93dc01643a316f856914ad043632cff5db269e0e;hpb=f22ad70037030c07074327cf239bd84dc17b44b6;p=sbcl.git diff --git a/src/compiler/debug-dump.lisp b/src/compiler/debug-dump.lisp index 93dc016..6633b3f 100644 --- a/src/compiler/debug-dump.lisp +++ b/src/compiler/debug-dump.lisp @@ -256,18 +256,22 @@ (make-debug-source :compiled (source-info-start-time info) - :namestring (make-file-info-namestring - (if (pathnamep (file-info-name file-info)) - (file-info-name file-info)) - file-info) + :namestring (or *source-namestring* + (make-file-info-namestring + (if (pathnamep (file-info-name file-info)) + (file-info-name file-info)) + file-info)) :created (file-info-write-date file-info) :source-root (file-info-source-root file-info) :start-positions (coerce-to-smallest-eltype (file-info-positions file-info)) :form (let ((direct-file-info (source-info-file-info info))) - (if (eq :lisp (file-info-name direct-file-info)) - (elt (file-info-forms direct-file-info) 0))) + (when (eq :lisp (file-info-name direct-file-info)) + (let ((form (elt (file-info-forms direct-file-info) 0))) + ;; The form COMPILE saves may include gunk + ;; from %SIMPLE-EVAL -- this gets rid of that. + (sb!impl::eval-lambda-source-lambda form)))) :function function))) ;;; Given an arbitrary sequence, coerce it to an unsigned vector if @@ -460,27 +464,36 @@ (if (and od (eq (optional-dispatch-main-entry od) fun)) (let ((actual-vars (lambda-vars fun)) (saw-optional nil)) - (dolist (arg (optional-dispatch-arglist od)) - (let ((info (lambda-var-arg-info arg)) - (actual (pop actual-vars))) - (cond (info - (case (arg-info-kind info) - (:keyword - (res (arg-info-key info))) - (:rest - (res 'rest-arg)) - (:more-context - (res 'more-arg)) - (:optional - (unless saw-optional - (res 'optional-args) - (setq saw-optional t)))) - (res (debug-location-for actual var-locs)) - (when (arg-info-supplied-p info) - (res 'supplied-p) - (res (debug-location-for (pop actual-vars) var-locs)))) - (t - (res (debug-location-for actual var-locs))))))) + (labels ((one-arg (arg) + (let ((info (lambda-var-arg-info arg)) + (actual (pop actual-vars))) + (cond (info + (case (arg-info-kind info) + (:keyword + (res (arg-info-key info))) + (:rest + (let ((more (arg-info-default info))) + (cond ((and (consp more) (third more)) + (one-arg (first (arg-info-default info))) + (one-arg (second (arg-info-default info))) + (return-from one-arg)) + (more + (setf (arg-info-default info) t))) + (res 'rest-arg))) + (:more-context + (res 'more-arg)) + (:optional + (unless saw-optional + (res 'optional-args) + (setq saw-optional t)))) + (res (debug-location-for actual var-locs)) + (when (arg-info-supplied-p info) + (res 'supplied-p) + (res (debug-location-for (pop actual-vars) var-locs)))) + (t + (res (debug-location-for actual var-locs))))))) + (dolist (arg (optional-dispatch-arglist od)) + (one-arg arg)))) (dolist (var (lambda-vars fun)) (res (debug-location-for var var-locs)))))