|
@@ -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!
|