def load_module(self, script): src = open(script).read() parser = MemeParser(src) try: ast,_ = parser.apply("start") except Exception as err: print(err.formatError(''.join(parser.input.data))) sys.exit(1) print "---- AST ----" print ast print "//---- AST ----" self.current_module = _create_compiled_module({"filepath": script, "ast": ast, "parent_module":"memetalk/kernel", "@tag":"a compiled module"}) self.env_id_table = [] self.env_idx = 0 self.functions = [] self.fun_literals = [] self.loading_class = False loader = Loader([ast]) loader.i = self loader.apply("load_module") return self.current_module
def load_body(self, code, params, owner, env): self.parser = MemeParser("{"+code+"}") try: ast,err = self.parser.apply("as_eval") print "--EVAL AST" print ast print "//--EVAL AST" except Exception as err: print(err.formatError(''.join(self.parser.input.data))) raise err uses_env = env != {} # given env _env1 = dict(zip(range(0,len(env.keys())), env.keys())) self.env_idx = len(env.keys()) # parameters env _env2 = dict(zip(range(self.env_idx,self.env_idx+len(params)),params)) self.env_idx = self.env_idx+len(params) self.env_id_table = [dict(_env1.items() + _env2.items())] self.functions = [] self.functions.append(_create_compiled_function({"name":"<anonymous>", "outter_cfun": None, "params": params, "body": ast, 'env_table': self.env_id_table[0], 'uses_env': uses_env, 'env_table_skel': dict(zip(range(0,self.env_idx),[None]*self.env_idx)), 'owner': owner, "@tag":"a compiled literal function"})) loader = Loader([ast]) loader.i = self loader.apply("load_body") return self.functions[0]