From a1c668d8709df2a6a6f83b26e85bd096732bbda9 Mon Sep 17 00:00:00 2001 From: Tim Vieira Date: Wed, 24 Jul 2013 18:36:50 -0400 Subject: [PATCH] fix issue #63. --- src/Dyna/Backend/Python/interpreter.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/Dyna/Backend/Python/interpreter.py b/src/Dyna/Backend/Python/interpreter.py index a890a76..cdff442 100644 --- a/src/Dyna/Backend/Python/interpreter.py +++ b/src/Dyna/Backend/Python/interpreter.py @@ -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) -- 2.50.1