Franck Pommereau

improved let wrt .globals

......@@ -907,10 +907,12 @@ class Expression (ArcAnnotation) :
else :
env = binding._dict
env["__binding__"] = binding._dict
env["__globals__"] = self.globals
try :
return Token(self.globals(self._expr, env))
finally :
del env["__binding__"]
del env["__globals__"]
def __call__ (self, binding) :
"""Returns the value from `bind` (but not encapsulated in a
`Token`).
......
......@@ -67,11 +67,9 @@ def unlet (expr, *names) :
return unparse(new), drop.calls
class MakeLet (object) :
def __init__ (self, globals) :
self.globals = globals
def match (self, match, binding) :
env = dict(binding)
env.update(iter(self.globals))
env.update(env["__globals__"])
exec("", env)
old = set(env)
exec(match, env)
......@@ -95,5 +93,5 @@ def extend (module) :
class PetriNet (module.PetriNet) :
def __init__ (self, name, **args) :
module.PetriNet.__init__(self, name, **args)
self.globals["let"] = MakeLet(self.globals)
self.globals["let"] = MakeLet()
return PetriNet, unlet
......