3 class InterpreterException(Exception):
7 def __init__(self, symbols) -> None:
8 self.__syms = globals()
9 self.__syms.update(symbols)
11 def execute(self, file):
13 return self.executes(f.read(), file)
15 def executes(self, str, file=""):
18 glb_ctx = self.__syms.copy()
19 exec(str, glb_ctx, local_ctx)
21 except SyntaxError as err:
22 error_class = err.__class__.__name__
24 line_number = err.lineno
25 except Exception as err:
26 error_class = err.__class__.__name__
28 cl, exc, tb = sys.exc_info()
29 line_number = traceback.extract_tb(tb)[1][1]
31 print(f"LunaBuild failed: {error_class} at ./{file}:{line_number}, {detail}")
32 raise InterpreterException("load error")