#| -*-Scheme-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/runtime/parse.scm,v 14.10 1990/09/07 00:27:35 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/runtime/parse.scm,v 14.11 1990/10/10 06:15:56 cph Exp $
Copyright (c) 1988, 1989, 1990 Massachusetts Institute of Technology
(char-set-difference char-set/atom-constituents
(char-set #\0 #\1 #\2 #\3 #\4 #\5 #\6 #\7 #\8 #\9
#\+ #\- #\. #\#)))
- (set! char-set/not-octal
- (char-set-invert (char-set #\0 #\1 #\2 #\3 #\4 #\5 #\6 #\7)))
(set! lambda-optional-tag (intern "#!optional"))
(set! lambda-rest-tag (intern "#!rest"))
(define char-set/atom-constituents)
(define char-set/char-delimiters)
(define char-set/symbol-leaders)
-(define char-set/not-octal)
(define lambda-optional-tag)
(define lambda-rest-tag)
((char-ci=? char #\n) #\Newline)
((char-ci=? char #\f) #\Page)
((char->digit char 8)
- (octal->char
- (string-append (string char)
- (read-string char-set/not-octal))))
+ (let ((c2 (read-char)))
+ (octal->char char c2 (read-char))))
(else char)))))
(string-append head
(string char)
(loop)))))))
-(define (octal->char string)
- (let ((end (string-length string))
- (loser
- (lambda (message)
- (error (string-append "Octal string escape " message ":") string))))
- (if (> end 3)
- (loser "too long"))
- (let loop ((index 0) (sum 0))
- (if (= index end)
- (begin
- (if (>= sum 256)
- (loser "exceeds ASCII range"))
- (ascii->char sum))
- (loop (1+ index)
- (+ (* sum 8) (char->digit (string-ref string index) 8)))))))
+(define (octal->char c1 c2 c3)
+ (let ((sum
+ (+ (* #o100 (char->digit c1 8))
+ (* #o10 (char->digit c2 8))
+ (char->digit c3 8))))
+ (if (>= sum 256)
+ (error "Octal string escape exceeds ASCII range:" (string c1 c2 c3)))
+ (ascii->char sum)))
(define (parse-object/char-quote)
(discard-char)