diff --git a/src/protocol/parser/symbol_table.rs b/src/protocol/parser/symbol_table.rs index e96cd2c815c3541895817b00f4f63ae961f587c5..34f390f1ebddd74d95279b272eaee7b7ba5750df 100644 --- a/src/protocol/parser/symbol_table.rs +++ b/src/protocol/parser/symbol_table.rs @@ -114,10 +114,14 @@ impl SymbolTable { ); } } + } else { + lookup_reserve_size += import.symbols.len(); } } } } + + lookup_reserve_size += module_root.definitions.len(); } let mut table = Self{ @@ -266,6 +270,33 @@ impl SymbolTable { } } } + fn find_name(heap: &Heap, root_id: RootId) -> String { + let root = &heap[root_id]; + for pragma_id in &root.pragmas { + match &heap[*pragma_id] { + Pragma::Module(module) => { + return String::from_utf8_lossy(&module.value).to_string() + }, + _ => {}, + } + } + + return String::from("Unknown") + } + + for (k, v) in table.symbol_lookup.iter() { + let key = String::from_utf8_lossy(&k.symbol_name).to_string(); + let value = match v.symbol { + Symbol::Definition((a, b)) => { + let utf8 = String::from_utf8_lossy(&heap[b].identifier().value); + format!("Definition({}) in Root({})", utf8, find_name(heap, a)) + }, + Symbol::Namespace(a) => { + format!("Root({})", find_name(heap, a)) + } + }; + println!("{} => {}", key, value); + } debug_assert_eq!( table.symbol_lookup.len(), lookup_reserve_size,