Browse Source

Make retype a compiled function

Yentl Van Tendeloo 7 years ago
parent
commit
34cefc51db
2 changed files with 29 additions and 1 deletions
  1. 28 0
      kernel/modelverse_kernel/compiled.py
  2. 1 1
      wrappers/modelverse_SCCD.py

+ 28 - 0
kernel/modelverse_kernel/compiled.py

@@ -407,3 +407,31 @@ def read_type(a, b, **remainder):
             yield [("RETURN", [{'value': ""}])]
         else:
             yield [("RETURN", [{'value': type_value}])]
+
+def retype(a, b, c, **remainder):
+    if "value" not in b:
+        b['value'], = yield [("RV", [b['id']])]
+    if "value" not in c:
+        c['value'], = yield [("RV", [c['id']])]
+
+    tm, = yield [("RD", [a["id"], "type_mapping"])]
+
+    # remove_type
+    root, = yield [("RD", [tm, "root"])]
+    val_edge, = yield [("RDE", [root, b["value"]])]
+    if val_edge is not None:
+        # Key exists, so remove
+        yield [("DE", [val_edge])]
+
+    # Create new type links
+    type_elem, instance_elem = yield [("CNV", [c['value']]), ("CNV", [b['value']])]
+    type_link, = yield [("CE", [root, type_elem])]
+    instance_link, = yield [("CE", [type_link, instance_elem])]
+
+    # Add them to the model
+    yield  [("CD", [tm, str(type_elem), type_elem]),
+            ("CD", [tm, str(instance_elem), instance_elem]),
+            ("CD", [tm, str(type_link), type_link]), 
+            ("CD", [tm, str(instance_link), instance_link])]
+
+    yield [("RETURN", [None])]

+ 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 May 31 08:17:54 2018
+Date:   Thu May 31 09:50:04 2018
 
 Model author: Yentl Van Tendeloo
 Model name:   MvK Server