|
@@ -124,16 +124,16 @@ class ModelverseKernel(object):
|
|
|
else:
|
|
|
raise Exception("%s: error understanding command (%s, %s)" % (self.debug_info[username], inst_v, self.phase_v))
|
|
|
|
|
|
- def handle_jit_failed(exception):
|
|
|
- # Try again, but this time without the JIT.
|
|
|
- # print(exception.message)
|
|
|
- gen = self.get_inst_phase_generator(inst_v, self.phase_v, user_root)
|
|
|
- yield [("TAIL_CALL", [gen])]
|
|
|
+ def handle_jit_failed(exception):
|
|
|
+ # Try again, but this time without the JIT.
|
|
|
+ # print(exception.message)
|
|
|
+ gen = self.get_inst_phase_generator(inst_v, self.phase_v, user_root)
|
|
|
+ yield [("TAIL_CALL", [gen])]
|
|
|
|
|
|
- yield [("TRY", [])]
|
|
|
- yield [("CATCH", [jit.JitCompilationFailedException, handle_jit_failed])]
|
|
|
- yield [("CALL", [gen])]
|
|
|
- yield [("END_TRY", [])]
|
|
|
+ yield [("TRY", [])]
|
|
|
+ yield [("CATCH", [jit.JitCompilationFailedException, handle_jit_failed])]
|
|
|
+ yield [("CALL", [gen])]
|
|
|
+ yield [("END_TRY", [])]
|
|
|
|
|
|
def get_inst_phase_generator(self, inst_v, phase_v, user_root):
|
|
|
"""Gets a generator for the given instruction in the given phase,
|
|
@@ -620,9 +620,11 @@ class ModelverseKernel(object):
|
|
|
# gives us O(1) state reads per jit-interpreter transition.
|
|
|
exception_return, = yield [("RD", [user_frame, primitive_functions.EXCEPTION_RETURN_KEY])]
|
|
|
if prev_frame is None:
|
|
|
+ print("Frame empty; delete user " + str(self.username))
|
|
|
_, = yield [("DN", [user_root])]
|
|
|
del self.debug_info[self.username]
|
|
|
else:
|
|
|
+ print("Previous frame found")
|
|
|
if self.debug_info[self.username]:
|
|
|
self.debug_info[self.username].pop()
|
|
|
_, _ = yield [("CD", [user_root, "frame", prev_frame]),
|
|
@@ -654,8 +656,11 @@ class ModelverseKernel(object):
|
|
|
self.debug_info[self.username].pop()
|
|
|
|
|
|
user_frame, = yield [("RD", [user_root, "frame"])]
|
|
|
- prev_frame, exception_return, returnvalue = yield [
|
|
|
- ("RD", [user_frame, "prev"]),
|
|
|
+ prev_frame, = yield [("RD", [user_frame, "prev"])]
|
|
|
+ if prev_frame is None:
|
|
|
+ _, = yield [("DN", [user_root])]
|
|
|
+ del self.debug_info[self.username]
|
|
|
+ exception_return, returnvalue = yield [
|
|
|
("RD", [user_frame, primitive_functions.EXCEPTION_RETURN_KEY]),
|
|
|
("RD", [user_frame, "returnvalue"])]
|
|
|
|