def recv(self, atom, args): if atom is RUN_1: pname = unwrapStr(args[0]) for extension in [".ty", ".mast"]: path = pname.encode("utf-8") + extension for base in self.paths: try: with open(os.path.join(base, path), "rb") as handle: source = handle.read() with self.recorder.context("Deserialization"): return loadMASTBytes(source) except IOError: continue raise userError(u"Could not locate " + pname) if atom is RUN_2: scope = unwrapMap(args[1]) d = {} for k, v in scope.items(): s = unwrapStr(k) if not s.startswith("&&"): raise userError(u"evalMonteFile scope map must be of the " "form '[\"&&name\" => binding]'") d[s[2:]] = scope[k] code = obtainModule(self.paths, unwrapStr(args[0]).encode("utf-8"), self.recorder) return evaluateRaise([code], d)[0] raise Refused(self, atom, args)
def obtainModuleFromSource(source, recorder, origin): with recorder.context("Deserialization"): term = loadMASTBytes(source) return codeFromAst(term, recorder, origin)