From f6da3068e9e854d6913ba45cf2b7d9deafd87a91 Mon Sep 17 00:00:00 2001
From: Matthias Andreas Benkard <matthias@benkard.de>
Date: Wed, 25 Jun 2008 14:55:54 +0200
Subject: Environment handling: Add MLKEnvironment methods for direct access to
 bindings.

---
 MLKEnvironment.h |  2 ++
 MLKEnvironment.m | 16 +++++++++++++++-
 2 files changed, 17 insertions(+), 1 deletion(-)

diff --git a/MLKEnvironment.h b/MLKEnvironment.h
index 0789b1a..bfa5f2b 100644
--- a/MLKEnvironment.h
+++ b/MLKEnvironment.h
@@ -37,6 +37,8 @@
 -(MLKEnvironment *) parent;
 
 -(NSSet *) bindings;
+-(void) addBinding:(MLKBinding *)binding forSymbol:(MLKSymbol *)symbol;
+-(void) setBinding:(MLKBinding *)binding forSymbol:(MLKSymbol *)symbol;
 -(void) addBindingForSymbol:(MLKSymbol *)symbol;
 -(void) addBindings:(NSDictionary *)bindings;
 -(void) addValues:(NSDictionary *)bindings;
diff --git a/MLKEnvironment.m b/MLKEnvironment.m
index 29f7740..7119bac 100644
--- a/MLKEnvironment.m
+++ b/MLKEnvironment.m
@@ -137,10 +137,24 @@
 
 -(void) addBindingForSymbol:(MLKSymbol *)symbol
 {
-  [_bindings setObject:[MLKBinding binding]
+  [self addBinding:[MLKBinding binding] forSymbol:symbol];
+}
+
+-(void) addBinding:(MLKBinding *)binding forSymbol:(MLKSymbol *)symbol
+{
+  [_bindings setObject:binding
              forKey:(symbol ? (id)symbol : (id)[NSNull null])];
 }
 
+-(void) setBinding:(MLKBinding *)binding forSymbol:(MLKSymbol *)symbol
+{
+  if (![self bindingForSymbol:symbol])
+    [NSException raise:@"MLKUnboundVariableError"
+                 format:@"The variable %@ is unbound.",
+                        [symbol descriptionForLisp]];
+  [self addBinding:binding forSymbol:symbol];
+}
+
 -(MLKEnvironment *) environmentForSymbol:(MLKSymbol *)symbol
 {
   if ([_bindings objectForKey:symbol])
-- 
cgit v1.2.3