From 97e9f0a5e9bf51edb23356eea9952e9ce236d736 Mon Sep 17 00:00:00 2001 From: Chris Hanson Date: Tue, 10 Oct 1989 11:38:30 +0000 Subject: [PATCH] `stack-frame/ref' needs to be able to address elements in subsequent stack frames as well as the given one. --- v7/src/runtime/conpar.scm | 12 +++++++----- v8/src/runtime/conpar.scm | 12 +++++++----- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/v7/src/runtime/conpar.scm b/v7/src/runtime/conpar.scm index e5297d535..653c0a763 100644 --- a/v7/src/runtime/conpar.scm +++ b/v7/src/runtime/conpar.scm @@ -1,6 +1,6 @@ #| -*-Scheme-*- -$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/runtime/conpar.scm,v 14.8 1989/08/08 01:26:05 cph Exp $ +$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/runtime/conpar.scm,v 14.9 1989/10/10 11:38:30 cph Exp $ Copyright (c) 1988, 1989 Massachusetts Institute of Technology @@ -99,10 +99,12 @@ MIT in each case. |# (vector-length (stack-frame/elements stack-frame))) (define (stack-frame/ref stack-frame index) - (map-reference-trap - (let ((elements (stack-frame/elements stack-frame))) - (lambda () - (vector-ref elements index))))) + (let ((elements (stack-frame/elements stack-frame))) + (let ((length (vector-length elements))) + (if (< index length) + (map-reference-trap (lambda () (vector-ref elements index))) + (stack-frame/ref (stack-frame/next stack-frame) (- index length)))))) + (define-integrable (stack-frame/return-address stack-frame) (stack-frame/ref stack-frame 0)) diff --git a/v8/src/runtime/conpar.scm b/v8/src/runtime/conpar.scm index 497feeb52..6680b3f02 100644 --- a/v8/src/runtime/conpar.scm +++ b/v8/src/runtime/conpar.scm @@ -1,6 +1,6 @@ #| -*-Scheme-*- -$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v8/src/runtime/conpar.scm,v 14.8 1989/08/08 01:26:05 cph Exp $ +$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v8/src/runtime/conpar.scm,v 14.9 1989/10/10 11:38:30 cph Exp $ Copyright (c) 1988, 1989 Massachusetts Institute of Technology @@ -99,10 +99,12 @@ MIT in each case. |# (vector-length (stack-frame/elements stack-frame))) (define (stack-frame/ref stack-frame index) - (map-reference-trap - (let ((elements (stack-frame/elements stack-frame))) - (lambda () - (vector-ref elements index))))) + (let ((elements (stack-frame/elements stack-frame))) + (let ((length (vector-length elements))) + (if (< index length) + (map-reference-trap (lambda () (vector-ref elements index))) + (stack-frame/ref (stack-frame/next stack-frame) (- index length)))))) + (define-integrable (stack-frame/return-address stack-frame) (stack-frame/ref stack-frame 0)) -- 2.25.1