summaryrefslogtreecommitdiff
path: root/MLKReader.m
diff options
context:
space:
mode:
authorMatthias Andreas Benkard <matthias@benkard.de>2008-07-31 11:48:46 +0200
committerMatthias Andreas Benkard <matthias@benkard.de>2008-07-31 11:48:46 +0200
commitca17649dab6d0d1ed49a3e072827e8324629aa64 (patch)
tree4b6cd04a660f44e11aa6089a02df7ab925c60eaf /MLKReader.m
parent0f383318a079bd0c7bb23c909f30771b1c20b29c (diff)
Reader: Add support for dispatching macro characters.
Diffstat (limited to 'MLKReader.m')
-rw-r--r--MLKReader.m28
1 files changed, 19 insertions, 9 deletions
diff --git a/MLKReader.m b/MLKReader.m
index 7db9670..a6f11c1 100644
--- a/MLKReader.m
+++ b/MLKReader.m
@@ -50,15 +50,17 @@
eofValue:eofValue
recursive:recursive
preserveWhitespace:preserveWhitespace
- singleDotMarker:nil];
+ singleDotMarker:nil
+ readingUninternedSymbol:NO];
}
-+(id) readFromStream:(MLKStream *)stream
- eofError:(BOOL)eofError
- eofValue:(id)eofValue
- recursive:(BOOL)recursive
- preserveWhitespace:(BOOL)preserveWhitespace
- singleDotMarker:(id)dotMarker
++(id) readFromStream:(MLKStream *)stream
+ eofError:(BOOL)eofError
+ eofValue:(id)eofValue
+ recursive:(BOOL)recursive
+ preserveWhitespace:(BOOL)preserveWhitespace
+ singleDotMarker:(id)dotMarker
+readingUninternedSymbol:(BOOL)readingUninternedSymbol
{
unichar ch;
NSMutableString *token;
@@ -72,6 +74,13 @@
valueForSymbol:[[MLKPackage findPackage:@"COMMON-LISP"]
intern:@"*READTABLE*"]];
+ if (readingUninternedSymbol)
+ {
+ token = [NSMutableString stringWithString:@"#:"];
+ escaped = NO;
+ goto read_token;
+ }
+
start:
if ([stream isEOF])
{
@@ -89,7 +98,7 @@
if ([readtable isMacroCharacter:ch])
{
NSArray *returnValues;
- MLKFuncallable *macrofun = [readtable macroFunctionForCharacter:ch];
+ id <MLKFuncallable> macrofun = [readtable macroFunctionForCharacter:ch];
NSArray *args = [NSArray arrayWithObjects:
stream,
[MLKCharacter characterWithUnichar:ch],
@@ -135,6 +144,7 @@
[token appendFormat:@"%C", [readtable charWithReadtableCase:ch]];
}
+ read_token:
while (![stream isEOF])
{
//NSLog (@"...");
@@ -260,7 +270,7 @@
escaped:(BOOL)escaped
{
int base;
-
+
base = [[[MLKDynamicContext currentContext]
valueForSymbol:[[MLKPackage findPackage:@"COMMON-LISP"]
intern:@"*READ-BASE*"]]