summaryrefslogtreecommitdiff
path: root/MLKEnvironment.m
diff options
context:
space:
mode:
authorMatthias Andreas Benkard <matthias@benkard.de>2008-06-14 20:30:55 +0200
committerMatthias Andreas Benkard <matthias@benkard.de>2008-06-14 20:30:55 +0200
commit51e2909e615867293d949217073093404a2c1139 (patch)
treeca40bc1c7f2a3ab4ed2d621d75762364a6ec31b1 /MLKEnvironment.m
parentcfc17a412d17cac2aa8ad31e434c803a4a7d21b3 (diff)
MLKDynamicContext: Implement -findHandler:.
Diffstat (limited to 'MLKEnvironment.m')
-rw-r--r--MLKEnvironment.m17
1 files changed, 16 insertions, 1 deletions
diff --git a/MLKEnvironment.m b/MLKEnvironment.m
index 6011f90..8a7c270 100644
--- a/MLKEnvironment.m
+++ b/MLKEnvironment.m
@@ -48,6 +48,11 @@
return [self initWithParent:nil bindings:bindings];
}
+-(MLKEnvironment *) parent
+{
+ return _parent;
+}
+
-(void) setBinding:(MLKSymbol *)symbol to:(id)value
{
[self setBinding:symbol to:value inEnvironment:self];
@@ -81,7 +86,7 @@
else
[[[MLKUndefinedVariableException alloc] initWithEnvironment:env
variableName:symbol]
- raise];;
+ raise];
return nil; // avoid a stupid compiler warning
}
@@ -96,6 +101,16 @@
[_bindings setObject:value forKey:symbol];
}
+-(MLKEnvironment *) environmentForBinding:(MLKSymbol *)symbol
+{
+ if ([[_bindings allKeys] containsObject:symbol])
+ return self;
+ else if (_parent)
+ return [_parent environmentForBinding:symbol];
+ else
+ return nil;
+}
+
-(void) dealloc
{
RELEASE (_bindings);