Browse Source

Fixed some calling issues

Yentl Van Tendeloo 7 years ago
parent
commit
b53a1a5599
2 changed files with 29 additions and 24 deletions
  1. 28 23
      kernel/modelverse_kernel/main.py
  2. 1 1
      wrappers/modelverse_SCCD.py

+ 28 - 23
kernel/modelverse_kernel/main.py

@@ -161,6 +161,8 @@ class ModelverseKernel(object):
 
     def execute_jit_internal(self, task_root, inst, taskname, params):
         print("EXEC INTERNAL")
+        print("For instruction: " + str(inst))
+        inst, = yield [("RD", [inst, "body"])]
         gen = self.execute_jit(task_root, inst, taskname, params)
         print("Got generator: " + str(gen))
 
@@ -265,7 +267,7 @@ class ModelverseKernel(object):
                 # Is a global
                 prev = "  " * nested_indent + "_globs, = yield [('RD', [kwargs['task_root'], 'globals'])]\n" + \
                        "  " * nested_indent + "%s, = yield [('RD', [_globs, '%s'])]\n" % (str_value, str_value) + \
-                       "  " * nested_indent + "%s, = yield [('RD', [%s, 'var'])]\n" % (str_value, str_value)
+                       "  " * nested_indent + "%s, = yield [('RD', [%s, 'value'])]\n" % (str_value, str_value)
                 instruction = str_value
             else:
                 # Is a local
@@ -284,8 +286,8 @@ class ModelverseKernel(object):
                 # Therefore we actually do the operation in the Modelverse as well!
                 prev = "  " * nested_indent + "_globs, = yield [('RD', [kwargs['task_root'], 'globals'])]\n" + \
                        "  " * nested_indent + "_var, = yield [('RD', [_globs, '%s'])]\n" % instruction_var + \
-                       "  " * nested_indent + "_old_edge, = yield [('RDE', [_var, 'var'])]\n" + \
-                       "  " * nested_indent + "yield [('CD', [_var, 'var', %s])]\n" % instruction_var + \
+                       "  " * nested_indent + "_old_edge, = yield [('RDE', [_var, 'value'])]\n" + \
+                       "  " * nested_indent + "yield [('CD', [_var, 'value', %s])]\n" % instruction_var + \
                        "  " * nested_indent + "yield [('DE', [_old_edge])]\n"
 
         elif inst_type["value"] == "call":
@@ -348,12 +350,12 @@ class ModelverseKernel(object):
 
         raise primitive_functions.PrimitiveFinished((prev, instruction + next_inst))
 
-    def read_function(self, inst):
+    def read_function(self, inst, suggested_name):
         initial_instruction = inst
-        suggested_name = self.jit.get_global_name(inst)
 
         (params, _, is_mutable), = yield [("CALL_ARGS", [self.jit.jit_signature, (inst,)])]
-        if suggested_name is None or is_mutable:
+        #if suggested_name is None or is_mutable:
+        if is_mutable:
             print("Ignoring mutable or unreadable: %s" % suggested_name)
             raise jit.JitCompilationFailedException("FAIL")
 
@@ -370,39 +372,42 @@ class ModelverseKernel(object):
     def jit_compile(self, task_root, inst):
         # Try to retrieve the suggested name.
         suggested_name = self.jit.get_global_name(inst)
+        if suggested_name is None:
+            suggested_name = "func_%s" % str(inst)
+
         # Have the JIT compile the function.
-        #return self.jit.jit_compile(task_root, inst, suggested_name)
 
         if inst is None:
             raise ValueError('body_id cannot be None: ' + str(suggested_name))
         elif inst in self.jit.jitted_entry_points:
+            print("Found previously compiled version: " + str(self.jit.jitted_entry_points[inst]))
             raise primitive_functions.PrimitiveFinished(
                 self.jit.jit_globals[self.jit.jitted_entry_points[inst]])
 
         compiled_func = self.jit.lookup_compiled_body(inst)
         if compiled_func is None:
-            name = self.jit.get_global_name(inst)
-            compiled_func, = yield [("CALL_ARGS", [self.read_function, (inst,)])]
+            compiled_func, = yield [("CALL_ARGS", [self.read_function, (inst, suggested_name)])]
             exec(str(compiled_func), self.jit.jit_globals)
-            compiled_func = self.jit.jit_globals[name]
-            self.jit.register_compiled(inst, compiled_func, name)
-
-        #raise jit.JitCompilationFailedException("FAIL")
+            compiled_func = self.jit.jit_globals[suggested_name]
+            self.jit.register_compiled(inst, compiled_func, suggested_name)
 
         raise primitive_functions.PrimitiveFinished(compiled_func)
 
     def execute_jit(self, task_root, inst, taskname, params = {}):
         # execute_jit
-        task_frame, =    yield [("RD", [task_root, "frame"])]
-        symbols, =       yield [("RD", [task_frame, "symbols"])]
-        dict_keys_ref, =  yield [("RDK", [symbols])]
-        dict_keys_ref_n =   yield [("RD", [i, "name"]) for i in dict_keys_ref]
-        dict_keys =       yield [("RV", [i]) for i in dict_keys_ref_n]
-        dict_values_elem = yield [("RDN", [symbols, i]) for i in dict_keys_ref]
-        dict_values = yield [("RD", [i, "value"]) for i in dict_values_elem]
-
-        parameters = dict(list(zip(dict_keys, dict_values)))
-        parameters.update(params)
+        try:
+            task_frame, =    yield [("RD", [task_root, "frame"])]
+            symbols, =       yield [("RD", [task_frame, "symbols"])]
+            dict_keys_ref, =  yield [("RDK", [symbols])]
+            dict_keys_ref_n =   yield [("RD", [i, "name"]) for i in dict_keys_ref]
+            dict_keys =       yield [("RV", [i]) for i in dict_keys_ref_n]
+            dict_values_elem = yield [("RDN", [symbols, i]) for i in dict_keys_ref]
+            dict_values = yield [("RD", [i, "value"]) for i in dict_values_elem]
+
+            parameters = dict(list(zip(dict_keys, dict_values)))
+            parameters.update(params)
+        except:
+            parameters = params
 
         parameters["root"] = self.root
         parameters["task_root"] = task_root

+ 1 - 1
wrappers/modelverse_SCCD.py

@@ -1,7 +1,7 @@
 """
 Generated by Statechart compiler by Glenn De Jonghe, Joeri Exelmans, Simon Van Mierlo, and Yentl Van Tendeloo (for the inspiration)
 
-Date:   Mon Apr  9 11:49:33 2018
+Date:   Mon Apr  9 13:46:18 2018
 
 Model author: Yentl Van Tendeloo
 Model name:   MvK Server