fix dangling pointer issues in ext2dr
[lunaix-os.git] / lunaix-os / scripts / build-tools / lib / sandbox.py
1 import traceback, sys
2
3 class InterpreterException(Exception):
4     pass
5
6 class Sandbox:
7     def __init__(self, symbols) -> None:
8         self.__syms = globals()
9         self.__syms.update(symbols)
10
11     def execute(self, file):
12         with open(file) as f:
13             return self.executes(f.read(), file)
14     
15     def executes(self, str, file=""):
16         try:
17             local_ctx = {}
18             glb_ctx = self.__syms.copy()
19             exec(str, glb_ctx, local_ctx)
20             return local_ctx
21         except SyntaxError as err:
22             error_class = err.__class__.__name__
23             detail = err.args[0]
24             line_number = err.lineno
25         except Exception as err:
26             error_class = err.__class__.__name__
27             detail = err.args[0]
28             cl, exc, tb = sys.exc_info()
29             line_number = traceback.extract_tb(tb)[1][1]
30
31         print(f"LunaBuild failed: {error_class} at ./{file}:{line_number}, {detail}")
32         raise InterpreterException("load error")