diff options
author | Matthias Andreas Benkard <matthias@benkard.de> | 2008-06-30 21:04:34 +0200 |
---|---|---|
committer | Matthias Andreas Benkard <matthias@benkard.de> | 2008-06-30 21:04:34 +0200 |
commit | eb968f738101d87b2d0e170d757ea10a27bbb867 (patch) | |
tree | 3841ee113f61a48ce9ba6f08bc42e2ecd1418152 /MLKDynamicContext.m | |
parent | ee2d7b7d9bb5ab87dc7986407ee44acd6bcad429 (diff) |
Create environments upon binding when needed.
Diffstat (limited to 'MLKDynamicContext.m')
-rw-r--r-- | MLKDynamicContext.m | 14 |
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]; } |