X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fdebug-dump.lisp;h=19f6a0f74bfd8e4a8c5252ee8900890bd3629654;hb=f294da03824843f07d781e655d5a5e70c2c4851e;hp=fdfdd67b97ab39f2e94577de02aaa2faae5c6f5a;hpb=8b89077f2d8c3aec140ded650d95d7869f6a7f28;p=sbcl.git diff --git a/src/compiler/debug-dump.lisp b/src/compiler/debug-dump.lisp index fdfdd67..19f6a0f 100644 --- a/src/compiler/debug-dump.lisp +++ b/src/compiler/debug-dump.lisp @@ -71,7 +71,7 @@ (when (and (lambda-var-p leaf) (or (not (member (tn-kind tn) '(:environment :debug-environment))) - (rassoc leaf (lexenv-variables (node-lexenv node)))) + (rassoc leaf (lexenv-vars (node-lexenv node)))) (or (null spilled) (not (member tn spilled)))) (let ((num (gethash leaf var-locs))) @@ -240,7 +240,7 @@ ;;; Return a list of DEBUG-SOURCE structures containing information ;;; derived from INFO. Unless :BYTE-COMPILE T was specified, we always -;;; dump the Start-Positions, since it is too hard figure out whether +;;; dump the START-POSITIONS, since it is too hard figure out whether ;;; we need them or not. (defun debug-source-for-info (info) (declare (type source-info info)) @@ -277,7 +277,8 @@ ;;; a vector whose element size is an integer multiple of output byte ;;; size. (defun coerce-to-smallest-eltype (seq) - (let ((maxoid #-sb-xc-host 0 + (let ((maxoid ;; It's probably better to avoid (UNSIGNED-BYTE 0). + #-sb-xc-host 1 ;; An initial value of 255 prevents us from ;; specializing the array to anything smaller than ;; (UNSIGNED-BYTE 8), which keeps the cross-compiler's @@ -294,7 +295,17 @@ (frob i)) (dovector (i seq) (frob i))) - (coerce seq `(simple-array (integer 0 ,maxoid) (*)))))) + (let ((specializer `(unsigned-byte ,(integer-length maxoid)))) + ;; cross-compilers beware! It would be possible for the + ;; upgraded-array-element-type of (UNSIGNED-BYTE 15) to be + ;; (SIGNED-BYTE 16), and this is completely valid by + ;; ANSI. However, the cross-compiler doesn't know how to dump + ;; SIGNED-BYTE arrays, so better make it break now if it ever + ;; will: + #+sb-xc-host + (aver (subtypep (upgraded-array-element-type specializer) + 'unsigned-byte)) + (coerce seq `(simple-array ,specializer (*))))))) ;;;; variables @@ -313,7 +324,7 @@ ;;; environment live and is an argument. If a :DEBUG-ENVIRONMENT TN, ;;; then we also exclude set variables, since the variable is not ;;; guaranteed to be live everywhere in that case. -(defun dump-1-variable (fun var tn id minimal buffer) +(defun dump-1-var (fun var tn id minimal buffer) (declare (type lambda-var var) (type (or tn null) tn) (type index id) (type clambda fun)) (let* ((name (leaf-debug-name var)) @@ -348,12 +359,12 @@ (vector-push-extend (tn-sc-offset save-tn) buffer))) (values)) -;;; Return a vector suitable for use as the DEBUG-FUN-VARIABLES +;;; Return a vector suitable for use as the DEBUG-FUN-VARS ;;; of FUN. LEVEL is the current DEBUG-INFO quality. VAR-LOCS is a ;;; hash table in which we enter the translation from LAMBDA-VARS to ;;; the relative position of that variable's location in the resulting ;;; vector. -(defun compute-variables (fun level var-locs) +(defun compute-vars (fun level var-locs) (declare (type clambda fun) (type hash-table var-locs)) (collect ((vars)) (labels ((frob-leaf (leaf tn gensym-p) @@ -375,8 +386,8 @@ (frob-lambda let (= level 3))))) (let ((sorted (sort (vars) #'string< - :key #'(lambda (x) - (symbol-name (leaf-debug-name (car x)))))) + :key (lambda (x) + (symbol-name (leaf-debug-name (car x)))))) (prev-name nil) (id 0) (i 0) @@ -390,18 +401,18 @@ (incf id)) (t (setq id 0 prev-name name))) - (dump-1-variable fun var (cdr x) id nil buffer) + (dump-1-var fun var (cdr x) id nil buffer) (setf (gethash var var-locs) i)) (incf i)) (coerce buffer 'simple-vector)))) -;;; Return a vector suitable for use as the DEBUG-FUN-VARIABLES of +;;; Return a vector suitable for use as the DEBUG-FUN-VARS of ;;; FUN, representing the arguments to FUN in minimal variable format. -(defun compute-minimal-variables (fun) +(defun compute-minimal-vars (fun) (declare (type clambda fun)) (let ((buffer (make-array 0 :fill-pointer 0 :adjustable t))) (dolist (var (lambda-vars fun)) - (dump-1-variable fun var (leaf-info var) 0 t buffer)) + (dump-1-var fun var (leaf-info var) 0 t buffer)) (coerce buffer 'simple-vector))) ;;; Return VAR's relative position in the function's variables (determined @@ -417,14 +428,14 @@ ;;;; arguments/returns -;;; Return a vector to be used as the -;;; COMPILED-DEBUG-FUN-ARGUMENTS for Fun. If fun is the -;;; MAIN-ENTRY for an optional dispatch, then look at the ARGLIST to -;;; determine the syntax, otherwise pretend all arguments are fixed. +;;; Return a vector to be used as the COMPILED-DEBUG-FUN-ARGS for FUN. +;;; If FUN is the MAIN-ENTRY for an optional dispatch, then look at +;;; the ARGLIST to determine the syntax, otherwise pretend all +;;; arguments are fixed. ;;; ;;; ### This assumption breaks down in EPs other than the main-entry, ;;; since they may or may not have supplied-p vars, etc. -(defun compute-arguments (fun var-locs) +(defun compute-args (fun var-locs) (declare (type clambda fun) (type hash-table var-locs)) (collect ((res)) (let ((od (lambda-optional-dispatch fun))) @@ -461,8 +472,8 @@ ;;; (Must be known values return...) (defun compute-debug-returns (fun) (coerce-to-smallest-eltype - (mapcar #'(lambda (loc) - (tn-sc-offset loc)) + (mapcar (lambda (loc) + (tn-sc-offset loc)) (return-info-locations (tail-set-info (lambda-tail-set fun)))))) ;;;; debug functions @@ -498,21 +509,21 @@ (let ((od (lambda-optional-dispatch fun))) (or (not od) (not (eq (optional-dispatch-main-entry od) fun))))) - (setf (compiled-debug-fun-variables dfun) - (compute-minimal-variables fun)) + (setf (compiled-debug-fun-vars dfun) + (compute-minimal-vars fun)) (setf (compiled-debug-fun-arguments dfun) :minimal)) (t - (setf (compiled-debug-fun-variables dfun) - (compute-variables fun level var-locs)) + (setf (compiled-debug-fun-vars dfun) + (compute-vars fun level var-locs)) (setf (compiled-debug-fun-arguments dfun) - (compute-arguments fun var-locs)))) + (compute-args fun var-locs)))) (when (>= level 2) (multiple-value-bind (blocks tlf-num) (compute-debug-blocks fun var-locs) (setf (compiled-debug-fun-tlf-number dfun) tlf-num) (setf (compiled-debug-fun-blocks dfun) blocks))) - (if (external-entry-point-p fun) + (if (xep-p fun) (setf (compiled-debug-fun-returns dfun) :standard) (let ((info (tail-set-info (lambda-tail-set fun)))) (when info