|
@@ -43,45 +43,48 @@ class ModelverseKernel(object):
|
|
|
|
|
|
def execute_rule(self, username):
|
|
|
user_root, = yield [("RD", [self.root, username])]
|
|
|
- user_frame, = yield [("RD", [user_root, "frame"])]
|
|
|
- self.inst, phase = yield [("RD", [user_frame, "IP"]),
|
|
|
- ("RD", [user_frame, "phase"]),
|
|
|
- ]
|
|
|
- self.new_debug, self.phase_v, inst_v = \
|
|
|
- yield [("RD", [self.inst, "__debug"]),
|
|
|
- ("RV", [phase]),
|
|
|
- ("RV", [self.inst]),
|
|
|
- ]
|
|
|
- if self.new_debug is not None:
|
|
|
- self.debug_info, = yield [("RV", [self.new_debug])]
|
|
|
-
|
|
|
- if self.phase_v == "finish":
|
|
|
- gen = self.helper_init(user_root)
|
|
|
- elif self.inst is None:
|
|
|
- raise Exception("Instruction pointer could not be found for user %s!" % username)
|
|
|
- elif isinstance(self.phase_v, string_types):
|
|
|
- if self.phase_v == "init" and self.inst in self.compiled:
|
|
|
- #print("%-30s(%s)" % ("COMPILED " + str(self.compiled[self.inst]), self.phase_v))
|
|
|
- gen = self.execute_primitive(user_root, self.inst, username)
|
|
|
+ if user_root is not None:
|
|
|
+ user_frame, = yield [("RD", [user_root, "frame"])]
|
|
|
+ self.inst, phase = yield [("RD", [user_frame, "IP"]),
|
|
|
+ ("RD", [user_frame, "phase"]),
|
|
|
+ ]
|
|
|
+ self.new_debug, self.phase_v, inst_v = \
|
|
|
+ yield [("RD", [self.inst, "__debug"]),
|
|
|
+ ("RV", [phase]),
|
|
|
+ ("RV", [self.inst]),
|
|
|
+ ]
|
|
|
+ if self.new_debug is not None:
|
|
|
+ self.debug_info, = yield [("RV", [self.new_debug])]
|
|
|
+
|
|
|
+ if self.phase_v == "finish":
|
|
|
+ gen = self.helper_init(user_root)
|
|
|
+ elif self.inst is None:
|
|
|
+ raise Exception("Instruction pointer could not be found for user %s!" % username)
|
|
|
+ elif isinstance(self.phase_v, string_types):
|
|
|
+ if self.phase_v == "init" and self.inst in self.compiled:
|
|
|
+ #print("%-30s(%s)" % ("COMPILED " + str(self.compiled[self.inst]), self.phase_v))
|
|
|
+ gen = self.execute_primitive(user_root, self.inst, username)
|
|
|
+ elif inst_v is None:
|
|
|
+ raise Exception("%s: error understanding command (%s, %s)" % (self.debug_info, inst_v, self.phase_v))
|
|
|
+ else:
|
|
|
+ #print("%-30s(%s) -- %s" % (inst_v["value"], self.phase_v, username))
|
|
|
+ gen = getattr(self, "%s_%s" % (inst_v["value"], self.phase_v))(user_root)
|
|
|
elif inst_v is None:
|
|
|
raise Exception("%s: error understanding command (%s, %s)" % (self.debug_info, inst_v, self.phase_v))
|
|
|
+ elif inst_v["value"] == "call":
|
|
|
+ #print("%-30s(%s)" % ("call", "param"))
|
|
|
+ gen = self.call_param(user_root)
|
|
|
else:
|
|
|
- #print("%-30s(%s) -- %s" % (inst_v["value"], self.phase_v, username))
|
|
|
- gen = getattr(self, "%s_%s" % (inst_v["value"], self.phase_v))(user_root)
|
|
|
- elif inst_v is None:
|
|
|
- raise Exception("%s: error understanding command (%s, %s)" % (self.debug_info, inst_v, self.phase_v))
|
|
|
- elif inst_v["value"] == "call":
|
|
|
- #print("%-30s(%s)" % ("call", "param"))
|
|
|
- gen = self.call_param(user_root)
|
|
|
- else:
|
|
|
- raise Exception("%s: error understanding command (%s, %s)" % (self.debug_info, inst_v, self.phase_v))
|
|
|
+ raise Exception("%s: error understanding command (%s, %s)" % (self.debug_info, inst_v, self.phase_v))
|
|
|
|
|
|
- try:
|
|
|
- inp = None
|
|
|
- while 1:
|
|
|
- inp = yield gen.send(inp)
|
|
|
- except StopIteration:
|
|
|
- pass
|
|
|
+ try:
|
|
|
+ inp = None
|
|
|
+ while 1:
|
|
|
+ inp = yield gen.send(inp)
|
|
|
+ except StopIteration:
|
|
|
+ pass
|
|
|
+ else:
|
|
|
+ print("Trying to execute non-existing user %s; ignored" % username)
|
|
|
|
|
|
##########################
|
|
|
### Process primitives ###
|