diff options
author | Matthias Andreas Benkard <matthias@benkard.de> | 2008-06-19 21:16:13 +0200 |
---|---|---|
committer | Matthias Andreas Benkard <matthias@benkard.de> | 2008-06-19 21:16:13 +0200 |
commit | 85762b55bf85437e981ebbf162e9af2255236330 (patch) | |
tree | 2e37cd8847c78b36d42d9e3f9931b039f7c7de3a /MLKReader.m | |
parent | 66ed696a14623f3062f28ede477ec73049e69321 (diff) |
Make the list reader work for simple lists.
Diffstat (limited to 'MLKReader.m')
-rw-r--r-- | MLKReader.m | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/MLKReader.m b/MLKReader.m index da5e743..fd6daa3 100644 --- a/MLKReader.m +++ b/MLKReader.m @@ -55,7 +55,7 @@ readtable = [[MLKDynamicContext currentContext] valueForBinding:[[MLKPackage findPackage:@"COMMON-LISP"] intern:@"*READTABLE*"]]; - + start: if ([stream isEOF]) { @@ -86,7 +86,9 @@ } returnValues = [macrofun applyToArray:args]; if ([returnValues count]) - return [returnValues objectAtIndex:0]; + return ([returnValues objectAtIndex:0] == [NSNull null] + ? nil + : [returnValues objectAtIndex:0]); else goto start; } @@ -123,7 +125,8 @@ ch = [stream readChar]; if ([readtable isConstituentCharacter:ch] || [readtable isNonTerminatingMacroCharacter:ch] || - (escaped && [readtable isWhitespaceCharacter:ch])) + (escaped && (![readtable isMultipleEscapeCharacter:ch] + && ![readtable isSingleEscapeCharacter:ch]))) { if (escaped) [token appendFormat:@"%C", ch]; @@ -148,9 +151,12 @@ [stream unreadChar:ch]; break; } - else if ([readtable isInvalid:ch]) + else if ([readtable isConstituentCharacter:ch] + && [readtable isInvalid:ch]) { - [[[MLKReaderError alloc] initWithStream:stream] raise]; + //[[[MLKReaderError alloc] initWithStream:stream] raise]; + [NSException raise:@"MLKReaderError" + format:@"'%c' is an invalid constituent character.", ch]; } else if ([readtable isWhitespaceCharacter:ch]) { |