Ver código fonte

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

Yentl Van Tendeloo 7 anos atrás
pai
commit
964e613c38

+ 1 - 1
hybrid_server/classes/task.xml

@@ -46,7 +46,7 @@
                 import traceback
                 import traceback
                 print("Error on requests: " + str(commands))
                 print("Error on requests: " + str(commands))
                 print("For taskname " + str(taskname))
                 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())
                 print(traceback.format_exc())
                 return (float('inf'), False)
                 return (float('inf'), False)
             ]]>
             ]]>

+ 13 - 11
kernel/modelverse_kernel/compiled.py

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