Franck Pommereau

improved let wrt .globals

...@@ -907,10 +907,12 @@ class Expression (ArcAnnotation) : ...@@ -907,10 +907,12 @@ class Expression (ArcAnnotation) :
907 else : 907 else :
908 env = binding._dict 908 env = binding._dict
909 env["__binding__"] = binding._dict 909 env["__binding__"] = binding._dict
910 + env["__globals__"] = self.globals
910 try : 911 try :
911 return Token(self.globals(self._expr, env)) 912 return Token(self.globals(self._expr, env))
912 finally : 913 finally :
913 del env["__binding__"] 914 del env["__binding__"]
915 + del env["__globals__"]
914 def __call__ (self, binding) : 916 def __call__ (self, binding) :
915 """Returns the value from `bind` (but not encapsulated in a 917 """Returns the value from `bind` (but not encapsulated in a
916 `Token`). 918 `Token`).
......
...@@ -67,11 +67,9 @@ def unlet (expr, *names) : ...@@ -67,11 +67,9 @@ def unlet (expr, *names) :
67 return unparse(new), drop.calls 67 return unparse(new), drop.calls
68 68
69 class MakeLet (object) : 69 class MakeLet (object) :
70 - def __init__ (self, globals) :
71 - self.globals = globals
72 def match (self, match, binding) : 70 def match (self, match, binding) :
73 env = dict(binding) 71 env = dict(binding)
74 - env.update(iter(self.globals)) 72 + env.update(env["__globals__"])
75 exec("", env) 73 exec("", env)
76 old = set(env) 74 old = set(env)
77 exec(match, env) 75 exec(match, env)
...@@ -95,5 +93,5 @@ def extend (module) : ...@@ -95,5 +93,5 @@ def extend (module) :
95 class PetriNet (module.PetriNet) : 93 class PetriNet (module.PetriNet) :
96 def __init__ (self, name, **args) : 94 def __init__ (self, name, **args) :
97 module.PetriNet.__init__(self, name, **args) 95 module.PetriNet.__init__(self, name, **args)
98 - self.globals["let"] = MakeLet(self.globals) 96 + self.globals["let"] = MakeLet()
99 return PetriNet, unlet 97 return PetriNet, unlet
......