]> hydra-www.ietfng.org Git - dyna2/commitdiff
fix issue #63.
authorTim Vieira <tim.f.vieira@gmail.com>
Wed, 24 Jul 2013 22:36:50 +0000 (18:36 -0400)
committerTim Vieira <tim.f.vieira@gmail.com>
Wed, 24 Jul 2013 22:36:50 +0000 (18:36 -0400)
src/Dyna/Backend/Python/interpreter.py

index a890a76aafd772135ae00d909b5eabc90f10aa70..cdff442d30f069422511b71e5ba67b8c85b072e8 100644 (file)
@@ -158,13 +158,21 @@ class Interpreter(object):
         if was == now:
             # nothing to do.
             return
+
         # special handling for with_key, forks a second update
         k = self.build('$key/1', item)
-        if k.value is not None:
-            self.replace(k, None)
+
         if hasattr(now, 'fn') and now.fn == 'with_key/2':
             now, key = now.args
-            self.replace(self.build('$key/1', item), key)
+            self.replace(k, key)
+            if was == now:
+                return
+        else:
+            # retract $key when we retract the item or no longer have a with_key
+            # as the value.
+            if k.value is not None:
+                self.replace(k, None)
+
         # delete existing value before so we can replace it
         if was is not None:
             self.push(item, was, delete=True)