Explorar o código

Algebraic loop detection seems to work

Yentl Van Tendeloo %!s(int64=8) %!d(string=hai) anos
pai
achega
7fba089fb3
Modificáronse 1 ficheiros con 8 adicións e 3 borrados
  1. 8 3
      integration/code/cbd_semantics.alc

+ 8 - 3
integration/code/cbd_semantics.alc

@@ -191,25 +191,30 @@ Void function strongconnect(v : String, values : Element):
 		w = set_pop(successors)
 		log("Found successor " + w)
 		if (bool_not(dict_in(values["indices"], w))):
+			log("Recurse!")
 			strongconnect(w, values)
-			log("Old lowlink: " + cast_v2s(values["lowlink"][v]))
 			dict_overwrite(values["lowlink"], v, min(values["lowlink"][v], values["lowlink"][w]))
-			log("Set lowlink of " + v)
-			log("   to " + cast_v2s(values["lowlink"][v]))
 		elif (dict_in(values["onStack"], w)):
+			log("Check on stack")
 			if (values["onStack"][w]):
+				log("Is on stack, so update")
 				dict_overwrite(values["lowlink"], v, min(values["lowlink"][v], values["indices"][w]))
+	log("Done")
 	
 	if (value_eq(values["lowlink"][v], values["indices"][v])):
+		log("Start new SCC block")
 		Element scc
 		scc = create_node()
 		// It will always differ now
 		w = list_pop(values["S"])
 		list_append(scc, w)
+		dict_overwrite(values["onStack"], w, False)
+		log("REMOVE from stack: " + w)
 		while (w != v):
 			w = list_pop(values["S"])
 			list_append(scc, w)
 			dict_overwrite(values["onStack"], w, False)
+			log("REMOVE from stack: " + w)
 		list_insert(values["SCC"], scc, 0)
 
 	return!