summaryrefslogtreecommitdiff
path: root/MLKDynamicContext.m
diff options
context:
space:
mode:
Diffstat (limited to 'MLKDynamicContext.m')
-rw-r--r--MLKDynamicContext.m14
1 files changed, 14 insertions, 0 deletions
diff --git a/MLKDynamicContext.m b/MLKDynamicContext.m
index 7b102e6..d4e1ab6 100644
--- a/MLKDynamicContext.m
+++ b/MLKDynamicContext.m
@@ -373,11 +373,25 @@ static MLKDynamicContext *global_context;
-(void) addValue:(id)value forSymbol:(MLKSymbol *)symbol
{
+ if (_parent && _environment == _parent->_environment)
+ _environment = [[MLKEnvironment alloc] initWithParent:_parent->_environment
+ values:nil];
+ else if (!_environment)
+ _environment = [[MLKEnvironment alloc] initWithParent:nil
+ values:nil];
+
[[self environment] addValue:value forSymbol:symbol];
}
-(void) addBindingForSymbol:(MLKSymbol *)symbol
{
+ if (_parent && _environment == _parent->_environment)
+ _environment = [[MLKEnvironment alloc] initWithParent:_parent->_environment
+ values:nil];
+ else if (!_environment)
+ _environment = [[MLKEnvironment alloc] initWithParent:nil
+ values:nil];
+
[[self environment] addBindingForSymbol:symbol];
}