frame-binding-ref frame-binding-set!
frame-source frame-call-representation
frame-environment
- frame-object-binding frame-object-name))
+ frame-object-binding frame-object-name
+ frame-return-values))
(define (frame-bindings frame)
(program-bindings-for-ip (frame-procedure frame)
(define (frame-object-name frame obj)
(cond ((frame-object-binding frame obj) => binding:name)
(else #f)))
+
+;; Nota bene, only if frame is in a return context (i.e. in a
+;; pop-continuation hook dispatch).
+(define (frame-return-values frame)
+ (let* ((len (frame-num-locals frame))
+ (nvalues (frame-local-ref frame (1- len))))
+ (map (lambda (i)
+ (frame-local-ref frame (+ (- len nvalues) i)))
+ (iota nvalues))))
;; FIXME: this constant needs to go in system vm objcode
(define *objcode-header-len* 8)
-(define (frame-return-values frame)
- (let* ((len (frame-num-locals frame))
- (nvalues (frame-local-ref frame (1- len))))
- (map (lambda (i)
- (frame-local-ref frame (+ (- len nvalues) i)))
- (iota nvalues))))
-
(define (print-application frame depth width prefix)
(format (current-error-port) "~a~a~v:@y\n"
prefix (make-string depth #\|)