`stack-frame/ref' needs to be able to address elements in subsequent
authorChris Hanson <org/chris-hanson/cph>
Tue, 10 Oct 1989 11:38:30 +0000 (11:38 +0000)
committerChris Hanson <org/chris-hanson/cph>
Tue, 10 Oct 1989 11:38:30 +0000 (11:38 +0000)
stack frames as well as the given one.

v7/src/runtime/conpar.scm
v8/src/runtime/conpar.scm

index e5297d535cf97b8acd9e57fc91f2e65e7b526c68..653c0a763795c425c6907193f9a2f0d243f54b33 100644 (file)
@@ -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))
 
index 497feeb528beddb2c2e64b49a5f5993ec7e55235..6680b3f02dd6e530ec30e2638d6b2950e1ff1b67 100644 (file)
@@ -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))