Ticket #505: reader-restart-mv.diff.txt

File reader-restart-mv.diff.txt, 1.9 KB (added by Jim Ursetto, 15 years ago)

multiple value implementation

Line 
1diff --git a/library.scm b/library.scm
2index 31c8b37..db4b553 100644
3--- a/library.scm
4+++ b/library.scm
5@@ -2696,7 +2696,8 @@ EOF
6 [h (and srst (##sys#slot srst (char->integer c)) ) ] )
7 (if h
8 ;then handled by read-table entry
9- (h c port)
10+ (##sys#call-with-values (lambda () (h c port))
11+ (lambda xs (if (null? xs) (readrec) (car xs))))
12 ;otherwise chicken extended r5rs syntax
13 (case c
14 ((#\')
15@@ -2720,7 +2721,8 @@ EOF
16 (spdrst (##sys#slot crt 3))
17 (h (and spdrst (##sys#slot spdrst (char->integer dchar)) ) ) )
18 ;#<num> handled by parameterized # read-table entry?
19- (cond (h (h dchar port n))
20+ (cond (h (##sys#call-with-values (lambda () (h dchar port n))
21+ (lambda xs (if (null? xs) (readrec) (car xs)))))
22 ;#<num>?
23 ((or (eq? dchar #\)) (char-whitespace? dchar)) (##sys#sharp-number-hook port n))
24 (else (##sys#read-error port "invalid parameterized read syntax" dchar n) ) ) )
25@@ -2728,7 +2730,8 @@ EOF
26 (h (and sdrst (##sys#slot sdrst (char->integer dchar)) ) ) )
27 (if h
28 ;then handled by # read-table entry
29- (h dchar port)
30+ (##sys#call-with-values (lambda () (h dchar port))
31+ (lambda xs (if (null? xs) (readrec) (car xs))))
32 ;otherwise chicken extended r5rs syntax
33 (case (char-downcase dchar)
34 ((#\x) (##sys#read-char-0 port) (r-number-with-exactness 16))
35@@ -2795,7 +2798,9 @@ EOF
36 (##sys#read-error
37 port
38 "invalid `#!' token" tok) ) ) ] ) ) ) ) ) )
39- (else (##sys#user-read-hook dchar port)) ) ) ) ) ) )
40+ (else
41+ (##sys#call-with-values (lambda () (##sys#user-read-hook dchar port))
42+ (lambda xs (if (null? xs) (readrec) (car xs)))) ) ) ) ) ) ) )
43 ((#\() (r-list #\( #\)))
44 ((#\)) (##sys#read-char-0 port) (container c))
45 ((#\") (##sys#read-char-0 port) (r-string #\"))