From 0ed240e1230d35f81523b09523e7dedfb09240f7 Mon Sep 17 00:00:00 2001 From: joe-conigliaro Date: Mon, 22 Jul 2019 20:44:08 +1000 Subject: [PATCH] modules: cycle error improvements --- compiler/modules.v | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/compiler/modules.v b/compiler/modules.v index 8817ad4400..cc664ebd19 100644 --- a/compiler/modules.v +++ b/compiler/modules.v @@ -5,8 +5,10 @@ module main struct ModDepGraphNode { +mut: name string deps []string + last_cycle string } struct ModDepGraph { @@ -21,13 +23,13 @@ struct DepSet { items []string } -pub fn(mapset mut DepSet) add(item string) { - mapset.items << item +pub fn(dset mut DepSet) add(item string) { + dset.items << item } -pub fn(mapset &DepSet) diff(otherset DepSet) DepSet { +pub fn(dset &DepSet) diff(otherset DepSet) DepSet { mut diff := DepSet{} - for item in mapset.items { + for item in dset.items { if !item in otherset.items { diff.items << item } @@ -35,8 +37,8 @@ pub fn(mapset &DepSet) diff(otherset DepSet) DepSet { return diff } -pub fn(mapset &DepSet) size() int { - return mapset.items.len +pub fn(dset &DepSet) size() int { + return dset.items.len } pub fn new_mod_dep_graph() *ModDepGraph { @@ -88,13 +90,18 @@ pub fn(graph &ModDepGraph) resolve() *ModDepGraph { if ready_set.size() == 0 { mut g := new_mod_dep_graph() g.acyclic = false + ndk := node_deps.keys() for name, _ in node_deps { - g.nodes << node_names[name] + mut node := node_names[name] + if name == ndk[node_deps.size-1] { + node.last_cycle = node_deps[name].items[node_deps[name].items.len-1] + } + g.nodes << node } return g } - ready_set.items.len > 0 { + ready_set.size() > 0 { mut new_set := map[string]DepSet{} for name in ready_set.items { // node_deps.remove(name) @@ -133,9 +140,14 @@ pub fn(graph &ModDepGraph) last_node() { } pub fn(graph &ModDepGraph) display() { - for _, node in graph.nodes { - for _, dep in node.deps { - println(' * $node.name -> $dep') + for i:=0; i