"%ASSOC-TEST"
"%ASSOC-TEST-NOT"
"%ASIN" "%ASINH"
- "%ATAN" "%ATAN2" "%ATANH" "%CALLER-FRAME-AND-PC"
+ "%ATAN" "%ATAN2" "%ATANH"
+ "%CALLER-FRAME"
+ "%CALLER-PC"
"%CHECK-BOUND"
"%CHECK-GENERIC-SEQUENCE-BOUNDS"
"%CHECK-VECTOR-SEQUENCE-BOUNDS"
;;; this function.
(defun top-frame ()
(/noshow0 "entering TOP-FRAME")
- (multiple-value-bind (fp pc) (%caller-frame-and-pc)
- (compute-calling-frame (descriptor-sap fp) pc nil)))
+ (compute-calling-frame (descriptor-sap (%caller-frame))
+ (descriptor-sap (%caller-pc))
+ nil))
;;; Flush all of the frames above FRAME, and renumber all the frames
;;; below FRAME.
(defun find-saved-frame-down (fp up-frame)
(multiple-value-bind (saved-fp saved-pc) (sb!c:find-saved-fp-and-pc fp)
(when saved-fp
- (compute-calling-frame (descriptor-sap saved-fp) saved-pc up-frame))))
+ (compute-calling-frame (descriptor-sap saved-fp)
+ (descriptor-sap saved-pc)
+ up-frame))))
;;; Return the frame immediately below FRAME on the stack; or when
;;; FRAME is the bottom of the stack, return NIL.
(macrolet ((def (name &optional (args '(x)))
`(defun ,name ,args (,name ,@args))))
- (def %caller-frame-and-pc ())
+ (def %caller-frame ())
+ (def %caller-pc ())
(def %code-code-size)
(def %code-debug-info)
(def %code-entry-points)
(declaim (inline invoke-with-saved-fp-and-pc))
#!+:c-stack-is-control-stack
(defun invoke-with-saved-fp-and-pc (fn)
- (let* ((fp-and-pc (multiple-value-bind (fp pc)
- (%caller-frame-and-pc)
- (cons fp pc)))
- (*saved-fp-and-pcs* (if (boundp '*saved-fp-and-pcs*)
- (cons fp-and-pc *saved-fp-and-pcs*)
- (list fp-and-pc))))
- (declare (truly-dynamic-extent fp-and-pc *saved-fp-and-pcs*))
- (funcall fn)))
+ (declare #-sb-xc-host (muffle-conditions compiler-note)
+ (optimize (speed 3)))
+ (let* ((fp-and-pc (cons (%caller-frame)
+ (sap-int (%caller-pc)))))
+ (declare (truly-dynamic-extent fp-and-pc))
+ (let ((*saved-fp-and-pcs* (if (boundp '*saved-fp-and-pcs*)
+ (cons fp-and-pc *saved-fp-and-pcs*)
+ (list fp-and-pc))))
+ (declare (truly-dynamic-extent *saved-fp-and-pcs*))
+ (funcall fn))))
(defun find-saved-fp-and-pc (fp)
(when (boundp '*saved-fp-and-pcs*)
(int-sap (get-lisp-obj-address (car x))) fp)
(return (values (car x) (cdr x)))))))
-(deftransform alien-funcall ((function &rest args) * * :important t)
+(deftransform alien-funcall ((function &rest args) * * :node node :important t)
(let ((type (lvar-type function)))
(unless (alien-type-type-p type)
(give-up-ir1-transform "can't tell function type at compile time"))
;; to it later regardless of how the foreign stack looks
;; like.
#!+:c-stack-is-control-stack
- (setf body `(invoke-with-saved-fp-and-pc (lambda () ,body)))
+ (when (policy node (<= speed debug))
+ (setf body `(invoke-with-saved-fp-and-pc (lambda () ,body))))
(/noshow "returning from DEFTRANSFORM ALIEN-FUNCALL" (params) body)
`(lambda (function ,@(params))
,body)))))))
(defknown hairy-data-vector-set/check-bounds (array index t)
t
(unsafe explicit-check))
-(defknown %caller-frame-and-pc () (values t t) (flushable))
+(defknown %caller-frame () t (flushable))
+(defknown %caller-pc () system-area-pointer (flushable))
(defknown %with-array-data (array index (or index null))
(values (simple-array * (*)) index index index)
(foldable flushable))
(values))
\f
;;;; debugger hooks
+;;;;
+;;;; These are used by the debugger to find the top function on the
+;;;; stack. They return the OLD-FP and RETURN-PC for the current
+;;;; function as multiple values.
+
+(defoptimizer (%caller-frame ir2-convert) (() node block)
+ (let ((ir2-physenv (physenv-info (node-physenv node))))
+ (move-lvar-result node block
+ (list (ir2-physenv-old-fp ir2-physenv))
+ (node-lvar node))))
-;;; This is used by the debugger to find the top function on the
-;;; stack. It returns the OLD-FP and RETURN-PC for the current
-;;; function as multiple values.
-(defoptimizer (sb!kernel:%caller-frame-and-pc ir2-convert) (() node block)
+(defoptimizer (%caller-pc ir2-convert) (() node block)
(let ((ir2-physenv (physenv-info (node-physenv node))))
(move-lvar-result node block
- (list (ir2-physenv-old-fp ir2-physenv)
- (ir2-physenv-return-pc ir2-physenv))
+ (list (ir2-physenv-return-pc ir2-physenv))
(node-lvar node))))
\f
;;;; multiple values
;;; checkins which aren't released. (And occasionally for internal
;;; versions, especially for internal versions off the main CVS
;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"1.0.25.8"
+"1.0.25.9"