summaryrefslogtreecommitdiff
path: root/MLKReader.m
diff options
context:
space:
mode:
authorMatthias Andreas Benkard <matthias@benkard.de>2008-06-19 20:33:07 +0200
committerMatthias Andreas Benkard <matthias@benkard.de>2008-06-19 20:33:07 +0200
commit66ed696a14623f3062f28ede477ec73049e69321 (patch)
treeee2ad382f0c1b12fb01f0af8c0b35c6a1d17b52f /MLKReader.m
parentd1503a4c0651018d6484a9780722a1969a6f5634 (diff)
Fix escaped symbol reading.
Diffstat (limited to 'MLKReader.m')
-rw-r--r--MLKReader.m22
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;