From eb968f738101d87b2d0e170d757ea10a27bbb867 Mon Sep 17 00:00:00 2001 From: Matthias Andreas Benkard Date: Mon, 30 Jun 2008 21:04:34 +0200 Subject: Create environments upon binding when needed. --- MLKLexicalEnvironment.m | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'MLKLexicalEnvironment.m') diff --git a/MLKLexicalEnvironment.m b/MLKLexicalEnvironment.m index 1f7d920..78a3b93 100644 --- a/MLKLexicalEnvironment.m +++ b/MLKLexicalEnvironment.m @@ -115,11 +115,25 @@ static MLKLexicalEnvironment *global_environment; -(void) addValue:(id)value forSymbol:(MLKSymbol *)symbol { + if (_parent && _variables == _parent->_variables) + _variables = [[MLKEnvironment alloc] initWithParent:_parent->_variables + values:nil]; + else if (!_variables) + _variables = [[MLKEnvironment alloc] initWithParent:nil + values:nil]; + [_variables addValue:value forSymbol:symbol]; } -(void) addBindingForSymbol:(MLKSymbol *)symbol { + if (_parent && _variables == _parent->_variables) + _variables = [[MLKEnvironment alloc] initWithParent:_parent->_variables + values:nil]; + else if (!_variables) + _variables = [[MLKEnvironment alloc] initWithParent:nil + values:nil]; + [_variables addBindingForSymbol:symbol]; } @@ -145,6 +159,13 @@ static MLKLexicalEnvironment *global_environment; -(void) addFunction:(id)value forSymbol:(MLKSymbol *)symbol { + if (_parent && _functions == _parent->_functions) + _functions = [[MLKEnvironment alloc] initWithParent:_parent->_functions + values:nil]; + else if (!_functions) + _functions = [[MLKEnvironment alloc] initWithParent:nil + values:nil]; + [_functions addValue:value forSymbol:symbol]; } -- cgit v1.2.3