def __init__(self): bt = builtin.builtins.copy() bt.update(specialforms.specialforms) bt.update({"eval": lambda *args: self.run(args), "#intp": self}) self.vars = inheritdict.idict(None, bt).push() self.file = None self.macros = macros self.call_stack = [self] self._lispprint = lambda: "#main" self._catches = {} if not Lisp.stdlib: self.run(info.lib("basics")) if Lisp.run_stdlib: Lisp.run_stdlib = False self.run(info.lib("stdlib")) # Assuming no error Lisp.run_stdlib = True else: self.vars = Lisp.stdlib if debug > 0: print "StdLib:: Standard library loaded" self.vars.stop = True self.vars = self.vars.push()
def _class(self, inheritfrom, *body): d = {} self.vars = inheritdict.idict(self.vars, d) try: self.eval(["block"] + list(body)) if "__init__" in d: k = d["__init__"] def __init__(*args, **kwargs): k(*args, **kwargs) d["__init__"] = __init__ if "__div__" in d: d["__truediv__"] = d["__div__"] bases = map(self.eval, inheritfrom) return type("", tuple(bases), d) finally: self.vars = self.vars.pop()