Bladeren bron

Fixed adding a node during rewriting

Yentl Van Tendeloo 8 jaren geleden
bovenliggende
commit
28938da55d
4 gewijzigde bestanden met toevoegingen van 12 en 11 verwijderingen
  1. BIN
      bootstrap/bootstrap.m.gz
  2. 0 1
      bootstrap/conformance_scd.alc
  3. 11 10
      bootstrap/transform.alc
  4. 1 0
      integration/test_pn_interface.py

BIN
bootstrap/bootstrap.m.gz


+ 0 - 1
bootstrap/conformance_scd.alc

@@ -219,7 +219,6 @@ String function conformance_scd(model : Element):
 			if (attr_value < list_len(allInstances(model, metamodel_element))):
 				return "Upper cardinality violated for class: " + metamodel_element!
 
-	log("Static semantics")
 	// Structure seems fine, now do static semantics
 	if (dict_in(metamodel, "constraints")):
 		Element constraint_function

+ 11 - 10
bootstrap/transform.alc

@@ -171,33 +171,33 @@ Void function rewrite(host_model : Element, RHS_model : Element, mapping : Eleme
 	String dst
 	Element new_mapping
 	String new_name
+	Element RHS_map
+	String tmp
 
 	LHS_labels = dict_keys(mapping)
 	RHS_labels = create_node()
+	RHS_map = create_node()
 
 	RHS_elements = allInstances(RHS_model, "Post_Element")
 	while (read_nr_out(RHS_elements) > 0):
-		set_add(RHS_labels, read_attribute(RHS_model, set_pop(RHS_elements), "label"))
+		tmp = set_pop(RHS_elements)
+		label = read_attribute(RHS_model, tmp, "label")
+		set_add(RHS_labels, label)
+		dict_add(RHS_map, label, tmp)
 
 	remaining = set_overlap(LHS_labels, RHS_labels)
 	while (read_nr_out(remaining) > 0):
 		elem = set_pop(remaining)
 		set_remove(LHS_labels, elem)
 		set_remove(RHS_labels, elem)
-	log("LHS labels: " + set_to_string(LHS_labels))
-	log("RHS labels: " + set_to_string(RHS_labels))
 
 	labels_to_remove = LHS_labels
 	labels_to_add = set_to_list(RHS_labels)
-	log("Labels to add: " + dict_to_string(labels_to_add))
-	log("Labels to remove: " + set_to_string(labels_to_remove))
 
 	new_mapping = dict_copy(mapping)
 	while (read_nr_out(labels_to_remove) > 0):
 		// Remove the elements linked to these labels
 		label = set_pop(labels_to_remove)
-		log("Remove element linked to label " + label)
-		log("   --> " + cast_v2s(mapping[label]))
 		model_delete_element(host_model, mapping[label])
 		dict_delete(new_mapping, label)
 
@@ -207,8 +207,8 @@ Void function rewrite(host_model : Element, RHS_model : Element, mapping : Eleme
 		log("Add element linked to label " + label)
 		if (is_edge(RHS_model["model"][mapping[label]])):
 			// Edge
-			src = read_attribute(RHS_model, reverseKeyLookup(RHS_model["model"], read_edge_src(RHS_model["model"][mapping[label]])), "label")
-			dst = read_attribute(RHS_model, reverseKeyLookup(RHS_model["model"], read_edge_dst(RHS_model["model"][mapping[label]])), "label")
+			src = read_attribute(RHS_model, reverseKeyLookup(RHS_model["model"], read_edge_src(RHS_model["model"][RHS_map[label]])), "label")
+			dst = read_attribute(RHS_model, reverseKeyLookup(RHS_model["model"], read_edge_dst(RHS_model["model"][RHS_map[label]])), "label")
 			// First check whether both source and destination are already created
 			if (bool_and(dict_in(new_mapping, src), dict_in(new_mapping, dst))):
 				// Both are present, so we can make the link
@@ -222,8 +222,9 @@ Void function rewrite(host_model : Element, RHS_model : Element, mapping : Eleme
 		else:
 			// Node
 			// Create the node and add it
-			typename = reverseKeyLookup(RHS_model["metamodel"]["model"], dict_read_node(RHS_model["type_mapping"], RHS_model["model"][mapping[label]]))
+			typename = reverseKeyLookup(RHS_model["metamodel"]["model"], dict_read_node(RHS_model["type_mapping"], RHS_model["model"][RHS_map[label]]))
 			original_typename = string_substr(typename, 5, string_len(typename))
+			log("Instantiate type " + original_typename)
 			new_name = instantiate_node(host_model, original_typename, "")
 			dict_add(new_mapping, label, new_name)
 

+ 1 - 0
integration/test_pn_interface.py

@@ -591,6 +591,7 @@ Element function constraint(model : Element, name : String):
              "transform", "pn", "pn_LHS", "pn_RHS",
              "load", "pn",
                 "list",
+                "verify",
                 "exit",
                 ],
             None, "PO"))