|
@@ -373,6 +373,51 @@ def instantiate_node(a, b, c, **remainder):
|
|
|
|
|
|
yield [("RETURN", [name_node])]
|
|
|
|
|
|
+def instantiate_typed_link(a, b, c, d, e, **remainder):
|
|
|
+ if "value" not in b:
|
|
|
+ b['value'], = yield [("RV", [b['id']])]
|
|
|
+
|
|
|
+ if "value" not in c:
|
|
|
+ c['value'], = yield [("RV", [c['id']])]
|
|
|
+
|
|
|
+ if "value" not in d:
|
|
|
+ d['value'], = yield [("RV", [d['id']])]
|
|
|
+
|
|
|
+ if "value" not in e:
|
|
|
+ e['value'], = yield [("RV", [e['id']])]
|
|
|
+
|
|
|
+ dict_entry, tm = yield [\
|
|
|
+ ("RD", [a['id'], "model"]),
|
|
|
+ ("RD", [a['id'], "type_mapping"]),
|
|
|
+ ]
|
|
|
+ src, dst = yield [\
|
|
|
+ ("RD", [dict_entry, d['value']]),
|
|
|
+ ("RD", [dict_entry, e['value']]),
|
|
|
+ ]
|
|
|
+ node, = yield [("CE", [src, dst])]
|
|
|
+ if c['value'] == "":
|
|
|
+ name = "__" + str(node)
|
|
|
+ name_node = {'value': name}
|
|
|
+ else:
|
|
|
+ name = c['value']
|
|
|
+ name_node = c
|
|
|
+
|
|
|
+ _, root = yield [("CD", [dict_entry, name, node]),
|
|
|
+ ("RD", [tm, "root"])]
|
|
|
+
|
|
|
+ # Create new type links
|
|
|
+ type_elem, instance_elem = yield [("CNV", [b['value']]), ("CNV", [name])]
|
|
|
+ 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", [name_node])]
|
|
|
+
|
|
|
def list_insert(a, b, c, **remainder):
|
|
|
if "id" not in b:
|
|
|
b["id"], = yield [("CNV", [b['value']])]
|