Jim Blandy reported some small problems with the meta-arg Scheme parser.
This commit is contained in:
		
							parent
							
								
									5c5ae4dc99
								
							
						
					
					
						commit
						41bf8dad3f
					
				|  | @ -142,3 +142,7 @@ Alan Bawden has reported a lot of bugs 4/97: | |||
|     crashing the system. | ||||
| 
 | ||||
|     set-file-group had bugs (uid/gid args were transposed in the syscall) | ||||
| 
 | ||||
| meta.scm was blowing up on illegal numeric escapes like \3Q in meta-arg lines. | ||||
|     Was also not recognizing the whole set of C escapes (e.g. \n, \a, \f). | ||||
|     Jim Blandy reported the bug, with fixes for the second problem, 4/97. | ||||
|  |  | |||
|  | @ -26,3 +26,6 @@ euler@lavielle.COM (Lutz Euler) 2/24/97 | |||
| 
 | ||||
| Alan Bawden 4/97 | ||||
|     Lots of good bug reports and fixes. | ||||
| 
 | ||||
| Jim Blandy 4/97 | ||||
|     Fixes for meta.scm | ||||
|  |  | |||
|  | @ -73,7 +73,7 @@ There is a new command-line switch, | |||
|     -sfd <num> | ||||
| which causes scsh to read its script from file descriptor <num>. | ||||
| 
 | ||||
| Scheme 48's floating point support was inadvertently omitted from the last | ||||
| Scheme 48's floating-point support was inadvertently omitted from the last | ||||
| release. It has been reinstated. | ||||
| 
 | ||||
| The regular expression system has been sped up.  Regular-expression | ||||
|  | @ -81,12 +81,12 @@ compilation is now provided, and the AWK macro has been rewritten to | |||
| pre-compile regexps used in rules outside the loop.  It is still, however, | ||||
| slower than it should be. | ||||
| 
 | ||||
| We have introduced two new procedures for our Perl fans, for performing | ||||
| regexp-directed string substitutions: | ||||
| We have introduced two new procedures for performing regexp-directed | ||||
| string substitutions: | ||||
|     regexp-substitute | ||||
|     regexp-substitute/global | ||||
| The design is not what you might expect, but they are quite powerful | ||||
| and efficient. | ||||
| The design differs from what one finds in systems such as sed or perl, | ||||
| and is quite powerful. | ||||
| 
 | ||||
| Execing programs should be faster in this release, since we now use the | ||||
| CLOEXEC status bit to get automatic closing of unrevealed port file | ||||
|  | @ -96,10 +96,10 @@ descriptors. | |||
| -------- | ||||
| 
 | ||||
| We received many bug reports, improvements, fixes and suggestions from scsh | ||||
| users. In particular, we'd like to thank Alan Bawden, Michael Becker, Jin | ||||
| Choi, Sean Doran, Lutz Euler, Kevin Esler, Rolf-Thomas Happe, David Hull, | ||||
| Shriram Krishnamurthi, Tod Olson, Michel Schinz, Bill Sommerfeld, Mike | ||||
| Sperber, and Victor Zandy for their contributions to this release. | ||||
| users. In particular, we'd like to thank Alan Bawden, Michael Becker, Jim | ||||
| Blandy, Jin Choi, Sean Doran, Lutz Euler, Kevin Esler, Rolf-Thomas Happe, | ||||
| David Hull, Shriram Krishnamurthi, Tod Olson, Michel Schinz, Bill Sommerfeld, | ||||
| Mike Sperber, and Victor Zandy for their contributions to this release. | ||||
| 
 | ||||
| Thanks, guys; we really appreciate the feedback. | ||||
| 
 | ||||
|  |  | |||
|  | @ -94,7 +94,13 @@ | |||
| 
 | ||||
| (define (read-backslash-sequence port) | ||||
|   (let ((c1 (read-char port)) | ||||
| 	(eof-lose (lambda () (error "Premature EOF within backslash-sequence in meta-arg argument line")))) | ||||
| 	(eof-lose (lambda () (error "Premature EOF within backslash-sequence in meta-arg argument line"))) | ||||
| 	(octet->int (lambda (c) | ||||
| 		      (cond ((eof-object? c) (eof-lose)) | ||||
| 			    ((char-set-contains? char-set:octal-digits c) | ||||
| 			     (- (char->ascii c) (char->ascii #\0))) | ||||
| 			    (else (error "Non-octal-digit in \\nnn escape sequence in meta-arg argument line." c)))))) | ||||
| 
 | ||||
|     (cond ((eof-object? c1) (eof-lose)) | ||||
| 
 | ||||
| 	  ;; This would be better handled by a char-map abstraction. | ||||
|  | @ -102,26 +108,23 @@ | |||
| 	  ((char=? c1 #\r) carriage-return) | ||||
| 	  ((char=? c1 #\t) tab) | ||||
| 	  ((char=? c1 #\b) backspace) | ||||
| 	  ;; ...whatever. Look up complete table. | ||||
| 	  ((char=? c1 #\a) alert) | ||||
| 	  ((char=? c1 #\f) form-feed) | ||||
| 	  ((char=? c1 #\v) vertical-tab) | ||||
| 
 | ||||
| 	  ;; \, space, tab, newline. | ||||
| 	  ((char-set-contains? char-set:simple-knockdown c1) c1) | ||||
| 
 | ||||
| 	  ((char-set-contains? char-set:octal-digits c1) | ||||
| 	   (let ((c2 (read-char port))) | ||||
| 	     (if (eof-object? c2) (eof-lose) | ||||
| 		 (let ((c3 (read-char port))) | ||||
| 		   (if (eof-object? c3) (eof-lose) | ||||
| 		       (ascii->char (+ (octet->int c3) | ||||
| 				       (* 8 (+ (octet->int c2) | ||||
| 					       (* 8 (octet->int c1))))))))))) | ||||
| 	   (let* ((o64 (octet->int c1)) | ||||
| 		  (o8  (octet->int (read-char port))) | ||||
| 		  (o1  (octet->int (read-char port)))) | ||||
| 	     (ascii->char (+ o1 (* 8 (+ o8 (* 8 o64))))))) | ||||
| 		    | ||||
| 	   | ||||
| 	  (else (error "Illegal \\ escape sequence in meta-arg argument line." | ||||
| 		       c1))))) | ||||
| 
 | ||||
| (define (octet->int c) (- (char->ascii c) (char->ascii #\0))) | ||||
| 
 | ||||
| (define char-set:octal-digits (char-set #\0 #\1 #\2 #\3 #\4 #\5 #\6 #\7)) | ||||
| 
 | ||||
| (define char-set:simple-knockdown (string->char-set "\\ \n\t")) | ||||
|  | @ -130,3 +133,6 @@ | |||
| (define tab (ascii->char 9)) | ||||
| (define carriage-return (ascii->char 13)) | ||||
| (define backspace (ascii->char 8)) | ||||
| (define alert (ascii->char 7)) | ||||
| (define form-feed (ascii->char 12)) | ||||
| (define vertical-tab (ascii->char 11)) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 shivers
						shivers