diff --git a/src/runtime/conpar.scm b/src/runtime/conpar.scm index e37438f..731f637 100644 --- a/src/runtime/conpar.scm +++ b/src/runtime/conpar.scm @@ -200,14 +200,7 @@ USA. (define (parse-one-frame state) (let ((handle-ordinary (lambda (stream) - (let ((type - (return-address->stack-frame-type - (stream-car stream) - (let ((type (parser-state/previous-type state))) - (and type - (1d-table/get (stack-frame-type/properties type) - allow-extended?-tag - #f)))))) + (let ((type (return-address->stack-frame-type (stream-car stream)))) (let ((length (let ((length (stack-frame-type/length type))) (if (exact-nonnegative-integer? length) @@ -314,7 +307,7 @@ USA. type elements state (let ((stream (parser-state/element-stream state))) (and (stream-pair? stream) - (eq? (return-address->stack-frame-type (stream-car stream) #t) + (eq? (return-address->stack-frame-type (stream-car stream)) stack-frame-type/return-to-interpreter))) #f)) @@ -542,6 +535,24 @@ USA. (loop (stream-cdr s))))) offset))))) +(define (length/interrupt-compiled-procedure stream offset) + offset ; ignored + (fix:+ (compiled-procedure-frame-size (stream-car stream)) 1)) + +(define (length/compiler-interrupt-restart stream offset) + (or (let ((entry (stream-ref stream 3))) + (and (compiled-internal-procedure? entry) + (let ((dynamic-link (stream-ref stream 2))) + (and (stack-address? dynamic-link) + (stack-address->index dynamic-link offset))))) + 3)) + +(define (compiled-internal-procedure? object) + (and (object-type? (ucode-type compiled-entry) object) + (fix:= 3 + (system-hunk3-cxr0 + ((ucode-primitive compiled-entry-kind 1) object))))) + (define (length/special-compiled stream offset) ;; return address is reflect-to-interface offset @@ -587,10 +598,6 @@ USA. (fix:- 10 1)) (else (lose))))) - -(define (length/interrupt-compiled-procedure stream offset) - offset ; ignored - (fix:+ (compiled-procedure-frame-size (stream-car stream)) 1)) (define (compiled-code-address/frame-size cc-address) (let ((lose (lambda () (error "Unexpected object:" cc-address)))) @@ -609,7 +616,7 @@ USA. (define (verify paranoia-index stream offset) (if (or (= paranoia-index 0) (stream-null? stream)) #t - (let* ((type (return-address->stack-frame-type (stream-car stream) #f)) + (let* ((type (return-address->stack-frame-type (stream-car stream))) (length (let ((length (stack-frame-type/length type))) (if (exact-nonnegative-integer? length) @@ -644,9 +651,6 @@ USA. (parser #f read-only #t) (properties (make-1d-table) read-only #t)) -(define allow-extended?-tag - (list 'ALLOW-EXTENDED?)) - (define (microcode-return/code->type code) (if (not (fix:< code (vector-length stack-frame-types))) (error:bad-range-argument code 'MICROCODE-RETURN/CODE->TYPE)) @@ -655,8 +659,7 @@ USA. (define (microcode-return/name->type name) (microcode-return/code->type (microcode-return name))) -(define (return-address->stack-frame-type return-address allow-extended?) - allow-extended? ; ignored +(define (return-address->stack-frame-type return-address) (cond ((interpreter-return-address? return-address) (let ((code (return-address/code return-address))) (let ((type (microcode-return/code->type code))) @@ -793,10 +796,8 @@ USA. (compiler-subproblem 'COMPILER-LOOKUP-APPLY-TRAP-RESTART length) (compiler-subproblem 'COMPILER-OPERATOR-LOOKUP-TRAP-RESTART length)) - (let ((type (compiler-frame 'COMPILER-INTERRUPT-RESTART 3))) - (1d-table/put! (stack-frame-type/properties type) - allow-extended?-tag - #t)) + (compiler-frame 'COMPILER-INTERRUPT-RESTART + length/compiler-interrupt-restart) (compiler-frame 'COMPILER-LINK-CACHES-RESTART 8) (compiler-frame 'REENTER-COMPILED-CODE 2)