Explorar el Código

Fixed some calling issues

Yentl Van Tendeloo hace 7 años
padre
commit
b53a1a5599
Se han modificado 2 ficheros con 29 adiciones y 24 borrados
  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):
     def execute_jit_internal(self, task_root, inst, taskname, params):
         print("EXEC INTERNAL")
         print("EXEC INTERNAL")
+        print("For instruction: " + str(inst))
+        inst, = yield [("RD", [inst, "body"])]
         gen = self.execute_jit(task_root, inst, taskname, params)
         gen = self.execute_jit(task_root, inst, taskname, params)
         print("Got generator: " + str(gen))
         print("Got generator: " + str(gen))
 
 
@@ -265,7 +267,7 @@ class ModelverseKernel(object):
                 # Is a global
                 # Is a global
                 prev = "  " * nested_indent + "_globs, = yield [('RD', [kwargs['task_root'], 'globals'])]\n" + \
                 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', [_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
                 instruction = str_value
             else:
             else:
                 # Is a local
                 # Is a local
@@ -284,8 +286,8 @@ class ModelverseKernel(object):
                 # Therefore we actually do the operation in the Modelverse as well!
                 # Therefore we actually do the operation in the Modelverse as well!
                 prev = "  " * nested_indent + "_globs, = yield [('RD', [kwargs['task_root'], 'globals'])]\n" + \
                 prev = "  " * nested_indent + "_globs, = yield [('RD', [kwargs['task_root'], 'globals'])]\n" + \
                        "  " * nested_indent + "_var, = yield [('RD', [_globs, '%s'])]\n" % instruction_var + \
                        "  " * 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"
                        "  " * nested_indent + "yield [('DE', [_old_edge])]\n"
 
 
         elif inst_type["value"] == "call":
         elif inst_type["value"] == "call":
@@ -348,12 +350,12 @@ class ModelverseKernel(object):
 
 
         raise primitive_functions.PrimitiveFinished((prev, instruction + next_inst))
         raise primitive_functions.PrimitiveFinished((prev, instruction + next_inst))
 
 
-    def read_function(self, inst):
+    def read_function(self, inst, suggested_name):
         initial_instruction = inst
         initial_instruction = inst
-        suggested_name = self.jit.get_global_name(inst)
 
 
         (params, _, is_mutable), = yield [("CALL_ARGS", [self.jit.jit_signature, (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)
             print("Ignoring mutable or unreadable: %s" % suggested_name)
             raise jit.JitCompilationFailedException("FAIL")
             raise jit.JitCompilationFailedException("FAIL")
 
 
@@ -370,39 +372,42 @@ class ModelverseKernel(object):
     def jit_compile(self, task_root, inst):
     def jit_compile(self, task_root, inst):
         # Try to retrieve the suggested name.
         # Try to retrieve the suggested name.
         suggested_name = self.jit.get_global_name(inst)
         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.
         # Have the JIT compile the function.
-        #return self.jit.jit_compile(task_root, inst, suggested_name)
 
 
         if inst is None:
         if inst is None:
             raise ValueError('body_id cannot be None: ' + str(suggested_name))
             raise ValueError('body_id cannot be None: ' + str(suggested_name))
         elif inst in self.jit.jitted_entry_points:
         elif inst in self.jit.jitted_entry_points:
+            print("Found previously compiled version: " + str(self.jit.jitted_entry_points[inst]))
             raise primitive_functions.PrimitiveFinished(
             raise primitive_functions.PrimitiveFinished(
                 self.jit.jit_globals[self.jit.jitted_entry_points[inst]])
                 self.jit.jit_globals[self.jit.jitted_entry_points[inst]])
 
 
         compiled_func = self.jit.lookup_compiled_body(inst)
         compiled_func = self.jit.lookup_compiled_body(inst)
         if compiled_func is None:
         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)
             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)
         raise primitive_functions.PrimitiveFinished(compiled_func)
 
 
     def execute_jit(self, task_root, inst, taskname, params = {}):
     def execute_jit(self, task_root, inst, taskname, params = {}):
         # execute_jit
         # 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["root"] = self.root
         parameters["task_root"] = task_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)
 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 author: Yentl Van Tendeloo
 Model name:   MvK Server
 Model name:   MvK Server