diff options
author | Matthias Andreas Benkard <matthias@benkard.de> | 2008-06-19 20:33:07 +0200 |
---|---|---|
committer | Matthias Andreas Benkard <matthias@benkard.de> | 2008-06-19 20:33:07 +0200 |
commit | 66ed696a14623f3062f28ede477ec73049e69321 (patch) | |
tree | ee2ad382f0c1b12fb01f0af8c0b35c6a1d17b52f /MLKReader.m | |
parent | d1503a4c0651018d6484a9780722a1969a6f5634 (diff) |
Fix escaped symbol reading.
Diffstat (limited to 'MLKReader.m')
-rw-r--r-- | MLKReader.m | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/MLKReader.m b/MLKReader.m index 779ffdd..da5e743 100644 --- a/MLKReader.m +++ b/MLKReader.m @@ -48,6 +48,9 @@ NSMutableString *token; MLKReadtable *readtable; BOOL escaped; + BOOL ever_escaped; + + ever_escaped = NO; readtable = [[MLKDynamicContext currentContext] valueForBinding:[[MLKPackage findPackage:@"COMMON-LISP"] @@ -97,12 +100,14 @@ token = [NSMutableString stringWithCapacity:8]; [token appendFormat:@"%C", [stream readChar]]; + ever_escaped = YES; } if ([readtable isMultipleEscapeCharacter:ch]) { token = [NSMutableString stringWithCapacity:8]; escaped = YES; + ever_escaped = YES; } if ([readtable isConstituentCharacter:ch]) @@ -130,11 +135,14 @@ if ([stream isEOF]) [[[MLKEndOfFileError alloc] initWithStream:stream] raise]; - token = [NSMutableString stringWithCapacity:8]; [token appendFormat:@"%C", [stream readChar]]; + ever_escaped = YES; } else if ([readtable isMultipleEscapeCharacter:ch]) - escaped = !escaped; + { + ever_escaped = YES; + escaped = !escaped; + } else if ([readtable isTerminatingMacroCharacter:ch]) { [stream unreadChar:ch]; @@ -153,7 +161,9 @@ } //NSLog (@"--> Interpret token: %@", token); - return [self interpretToken:token readtable:readtable]; + return [self interpretToken:token + readtable:readtable + escaped:ever_escaped]; } +(BOOL) isPotentialNumber:(NSString *)token @@ -212,7 +222,9 @@ return YES; } -+(id) interpretToken:(NSString *)token readtable:(MLKReadtable *)readtable ++(id) interpretToken:(NSString *)token + readtable:(MLKReadtable *)readtable + escaped:(BOOL)escaped { int base; @@ -221,7 +233,7 @@ intern:@"*READ-BASE*"]] intValue]; - if ([self isPotentialNumber:token readtable:readtable base:base]) + if (!escaped && [self isPotentialNumber:token readtable:readtable base:base]) { unsigned long i, firstNum, secondNum, exponent, exponentMarkerPos; unichar sign, exponentSign; |