aboutsummaryrefslogtreecommitdiff
path: root/src/bin/typegraph.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/bin/typegraph.rs')
-rw-r--r--src/bin/typegraph.rs88
1 files changed, 42 insertions, 46 deletions
diff --git a/src/bin/typegraph.rs b/src/bin/typegraph.rs
index 79c096b..b8e26d2 100644
--- a/src/bin/typegraph.rs
+++ b/src/bin/typegraph.rs
@@ -17,58 +17,54 @@ fn main() -> anyhow::Result<()> {
let filter_prims = args().any(|a| a == "no_primitives");
let mut edges = BTreeSet::new();
- for node in fs.nodes().to_vec() {
- if node.name.ends_with(".resource") || node.name.ends_with(".resS") {
- continue;
- }
- let mut cab = fs.read(&node)?;
- let file = read_serialized_file(&mut cab)?;
+ let node = fs.find_main_file().unwrap().to_owned();
+ let mut cab = fs.read(&node)?;
+ let file = read_serialized_file(&mut cab)?;
- for ob in file.objects {
- let typetree = if ob.type_id < 0 {
- unimplemented!()
- } else {
- &file.types[ob.type_id as usize]
- };
- fn print_types(
- edges: &mut BTreeSet<(String, String)>,
- filter_prims: bool,
- tt: TypeTreeNode,
- ) {
- for c in tt.children {
- let mut c = vec![c];
- loop {
- let mut nc = Vec::new();
- let mut f = false;
- for mut c in c {
- if let Some(inner) = c.type_string.strip_prefix("PPtr<") {
- c.type_string = inner.strip_suffix(">").unwrap().to_owned();
- f = true;
- } else if matches!(c.type_string.as_str(), "Array" | "pair" | "map") {
- nc.extend(c.children);
- f = true
- } else {
- nc.push(c);
- };
- }
- c = nc;
- if !f {
- break;
- }
+ for ob in file.objects {
+ let typetree = if ob.type_id < 0 {
+ unimplemented!()
+ } else {
+ &file.types[ob.type_id as usize]
+ };
+ fn print_types(
+ edges: &mut BTreeSet<(String, String)>,
+ filter_prims: bool,
+ tt: TypeTreeNode,
+ ) {
+ for c in tt.children {
+ let mut c = vec![c];
+ loop {
+ let mut nc = Vec::new();
+ let mut f = false;
+ for mut c in c {
+ if let Some(inner) = c.type_string.strip_prefix("PPtr<") {
+ c.type_string = inner.strip_suffix(">").unwrap().to_owned();
+ f = true;
+ } else if matches!(c.type_string.as_str(), "Array" | "pair" | "map") {
+ nc.extend(c.children);
+ f = true
+ } else {
+ nc.push(c);
+ };
+ }
+ c = nc;
+ if !f {
+ break;
}
- for c in c {
- if filter_prims && is_primitive(&c.type_string) {
- continue;
- }
- edges.insert((tt.type_string.to_owned(), c.type_string.to_owned()));
- print_types(edges, filter_prims, c);
+ }
+ for c in c {
+ if filter_prims && is_primitive(&c.type_string) {
+ continue;
}
+ edges.insert((tt.type_string.to_owned(), c.type_string.to_owned()));
+ print_types(edges, filter_prims, c);
}
}
+ }
- if let Some(tree) = &typetree.type_tree {
- print_types(&mut edges, filter_prims, tree.clone());
- }
+ if let Some(tree) = &typetree.type_tree {
+ print_types(&mut edges, filter_prims, tree.clone());
}
}
let nodes = edges