Quellcode durchsuchen

Fixed some bugs and added debugging functions in the JIT (at generated code level)

Yentl Van Tendeloo vor 7 Jahren
Ursprung
Commit
964e613c38
3 geänderte Dateien mit 15 neuen und 13 gelöschten Zeilen
  1. 1 1
      hybrid_server/classes/task.xml
  2. 13 11
      kernel/modelverse_kernel/compiled.py
  3. 1 1
      wrappers/modelverse_SCCD.py

+ 1 - 1
hybrid_server/classes/task.xml

@@ -46,7 +46,7 @@
                 import traceback
                 print("Error on requests: " + str(commands))
                 print("For taskname " + str(taskname))
-                print("Stack @ MvK: " + str(mvk.request_handlers[taskname][operation].generator_stack))
+                print("Stack @ MvK:\n" + str("\n".join(['\t%s:%s' % (gen['generator'].__name__, gen['generator'].gi_frame.f_lineno) for gen in mvk.request_handlers[taskname][operation].generator_stack if gen['generator'].__name__ not in ['execute_rule', 'execute_jit', 'execute_jit_internal']])))
                 print(traceback.format_exc())
                 return (float('inf'), False)
             ]]>

+ 13 - 11
kernel/modelverse_kernel/compiled.py

@@ -1,14 +1,13 @@
 from modelverse_kernel.primitives import PrimitiveFinished
 import time
 
-"""
 def get_superclasses(a, b, **remainder):
     if 'value' not in b:
         b['value'], = yield [("RV", [b['id']])]
-    model_dict, tm_dict = yield [("RD", [a, "model"]), 
-                                 ("RD", [a, "type_mapping"])]
+    model_dict, tm_dict = yield [("RD", [a['id'], "model"]), 
+                                 ("RD", [a['id'], "type_mapping"])]
 
-    worklist = set(b['value'])
+    worklist = set([b['value']])
     found = set([])
 
     cache_value = {}
@@ -29,7 +28,7 @@ def get_superclasses(a, b, **remainder):
             # If the link is typed by "Inheritance", we add its destination
             link_name_node, = yield [("CALL_ARGS", [reverseKeyLookup, [{'id': model_dict}, {'id': link}]])]
             if "value" not in link_name_node:
-                link_name_node['id'], = yield [("CNV", [link_name_node['value']])]
+                link_name_node['value'], = yield [("RV", [link_name_node['id']])]
 
             t_edge, = yield [("RD", [tm_dict, link_name_node['value']])]
             t_edge, = yield [("RV", [t_edge])]
@@ -38,7 +37,7 @@ def get_superclasses(a, b, **remainder):
                 src, dst = edge
                 # Look up dst's name and add it
                 if dst not in cache_value:
-                    dst_name, = yield [("CALL_ARGS", [reverseKeyLookup, [model_dict, dst]])]
+                    dst_name, = yield [("CALL_ARGS", [reverseKeyLookup, [{'id': model_dict}, {'id': dst}]])]
                     dst_name_value, = yield [("RV", [dst_name])]
                     cache_value[dst] = dst_name_value
                 dst_name_value = cache_value[dst]
@@ -103,7 +102,7 @@ def set_merge(a, b, **remainder):
 
 def has_value(a, **remainder):
     if "value" not in a:
-        a['value'], = yield [("RV", [])]
+        a['value'], = yield [("RV", [a['id']])]
     if a['value'] is None:
         raise PrimitiveFinished({'value': False})
     else:
@@ -193,7 +192,7 @@ def list_append(a, b, **remainder):
 
 def list_read(a, b, **remainder):
     if 'value' not in b:
-        b['value'], = yield [("RV", [b])]
+        b['value'], = yield [("RV", [b['id']])]
     result, = yield [("RD", [a['id'], b['value']])]
     if result is None:
         raise Exception("List read out of bounds: %s" % b['value'])
@@ -292,6 +291,9 @@ def list_pop_final(a, **remainder):
 def instantiate_node(a, b, c, **remainder):
     if "value" not in c:
         c['value'], = yield [("RV", [c['id']])]
+    if "id" not in b:
+        b['id'], = yield [("CNV", [b['value']])]
+
     node, dict_entry, typing = \
         yield [("CN", []),
                ("RD", [a['id'], "model"]),
@@ -302,10 +304,11 @@ def instantiate_node(a, b, c, **remainder):
         name = "__" + str(node)
         name_node = {'value': name}
     else:
+        name = c['value']
         name_node = c
 
-    yield [("CD", [dict_entry, c['value'], node])]
-    yield [("CD", [typing, c['value'], b])]
+    yield [("CD", [dict_entry, name, node])]
+    yield [("CD", [typing, name, b['id']])]
 
     raise PrimitiveFinished(name_node)
 
@@ -341,4 +344,3 @@ def list_delete(a, b, **remainder):
     yield [("CD", [a['id'], b['value'] + index, value]) for index, value in enumerate(values[1:])] + \
           [("DE", [i]) for i in edges]
     raise PrimitiveFinished(a)
-"""

+ 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:   Thu Apr 26 09:48:48 2018
+Date:   Thu Apr 26 11:05:03 2018
 
 Model author: Yentl Van Tendeloo
 Model name:   MvK Server