summaryrefslogtreecommitdiff
path: root/MLKLexicalContext.m
diff options
context:
space:
mode:
authorMatthias Andreas Benkard <matthias@benkard.de>2008-06-22 22:13:06 +0200
committerMatthias Andreas Benkard <matthias@benkard.de>2008-06-22 22:13:06 +0200
commitc83bce248c8f70e9970fc46c5d74bdc98db766d3 (patch)
treed7153606b5788ca742109fd46fbf13fc5d7b2d46 /MLKLexicalContext.m
parentbbd50fa93b66cfee268c3c7f038d855b953c7eb1 (diff)
MLKLexicalContext: Add support for symbol macros.
Diffstat (limited to 'MLKLexicalContext.m')
-rw-r--r--MLKLexicalContext.m12
1 files changed, 12 insertions, 0 deletions
diff --git a/MLKLexicalContext.m b/MLKLexicalContext.m
index 06d2ebb..2103989 100644
--- a/MLKLexicalContext.m
+++ b/MLKLexicalContext.m
@@ -95,6 +95,7 @@ static MLKSymbol *LEXICAL;
_symbolMacros = MAKE_ENVIRONMENT (macros, _parent, _parent->_symbolMacros);
_knownMacros = [macros allKeys];
+ _knownSymbolMacros = [symbolMacros allKeys];
ASSIGN (_declarations, declarations);
return self;
@@ -150,6 +151,16 @@ static MLKSymbol *LEXICAL;
return (_parent && [_parent symbolNamesMacro:symbol]);
}
+-(BOOL) symbolNamesSymbolMacro:(MLKSymbol *)symbol
+{
+ if ([_variableLocations objectForKey:(symbol ? (id)symbol : (id)[NSNull null])])
+ return NO;
+ else if ([_knownSymbolMacros containsObject:(symbol ? (id)symbol : (id)[NSNull null])])
+ return YES;
+ else
+ return (_parent && [_parent symbolNamesSymbolMacro:symbol]);
+}
+
-(BOOL) variableIsLexical:(MLKSymbol *)symbol
{
id rest;
@@ -200,6 +211,7 @@ static MLKSymbol *LEXICAL;
{
RELEASE (_macros);
RELEASE (_knownMacros);
+ RELEASE (_knownSymbolMacros);
RELEASE (_symbolMacros);
RELEASE (_goTags);
RELEASE (_functionLocations);