hy/hy/lang/hyobj.py
Paul Tagliamonte 395943ca53 some hacking
2012-12-22 00:18:37 -05:00

50 lines
1.2 KiB
Python

from hy.lang.internals import HYNamespaceCOW
class HYObject(object):
def set_namespace(self, ns):
self.namespace = ns
for c in self.get_children():
c.set_namespace(ns)
def get_children(self):
return []
def __call__(self, *args, **kwargs):
ns = HYNamespaceCOW({}) # Each invocation needs it's own ns
return self.eval(ns, *args, **kwargs)
def lookup(self, lns, fn):
if fn in lns:
return lns[fn]
if fn in self.namespace:
return self.namespace[fn]
if fn in self.namespace['__builtins__']:
return self.namespace['__builtins__'][fn]
# builtin lookup
if "." in fn:
lon, short = fn.rsplit(".", 1)
holder = self.lookup(lns, lon)
return getattr(holder, short)
raise Exception("No such symbol: `%s`" % (fn))
def eval(self, lns, *args, **kwargs):
for node in self.get_children():
node.eval(lns, *args, **kwargs)
return self
def _issue_job(self, job, *args, **kwargs):
pass
def _join(self):
pass
def copy(self):
new = type(self)(self)
new.set_namespace(self.namespace)
return new