import symbol:* import tree:* import vec:* import map:* import util:* import str:* import mem:* import io:* import ast_nodes:* import ast_transformation:* import pass_common:* fun node_counter(name_ast_map: *map,*ast_node>>, ast_to_syntax: *map<*ast_node, *tree>) { var counter = node_counter_helper(name_ast_map, ast_to_syntax) println(str("Number of nodes touched: ") + counter) } fun node_counter_test(name_ast_map: *map,*ast_node>>, ast_to_syntax: *map<*ast_node, *tree>) { var counter = node_counter_helper(name_ast_map, ast_to_syntax) if (counter > 10000) println("more than 10000 nodes!") } fun node_counter_helper(name_ast_map: *map,*ast_node>>, ast_to_syntax: *map<*ast_node, *tree>): int { var counter = 0 var visited = hash_set<*ast_node>() name_ast_map->for_each(fun(name: str, syntax_ast_pair: pair<*tree,*ast_node>) { var helper = fun(node: *ast_node, parent_chain: *stack<*ast_node>) { counter++ } run_on_tree(helper, empty_pass_second_half(), syntax_ast_pair.second, &visited) }) return counter }