fix generics causing a free unique due to ordering in expect_type
This commit is contained in:
@@ -1440,29 +1440,31 @@ pub fn handle_func_dependencies(
|
||||
to_be_defined: &mut IndexMap<FunctionAccessKey, ()>,
|
||||
id_gen: Rc<IdGenerator>,
|
||||
) {
|
||||
let mut function_component = function_component.clone();
|
||||
let function_component = function_component.clone();
|
||||
|
||||
let mut function_dependency_order = function_component.dependencies.clone();
|
||||
|
||||
let mut dependency_map = IndexMap::new();
|
||||
let mut dependency_vec = vec![];
|
||||
|
||||
// deal with function dependencies by sorting order in which we pop them.
|
||||
while let Some(dependency) = function_component.dependencies.pop() {
|
||||
while let Some(dependency) = function_dependency_order.pop() {
|
||||
let depend_comp = func_components.get(&dependency).unwrap();
|
||||
|
||||
if dependency_map.contains_key(&dependency) {
|
||||
dependency_map.shift_remove(&dependency);
|
||||
}
|
||||
|
||||
dependency_map.insert(dependency, ());
|
||||
function_dependency_order.extend(depend_comp.dependencies.iter().cloned().collect_vec());
|
||||
|
||||
function_component
|
||||
.dependencies
|
||||
.extend(depend_comp.dependencies.clone().into_iter());
|
||||
dependency_map.insert(dependency, ());
|
||||
}
|
||||
|
||||
dependency_vec.extend(dependency_map.keys().cloned());
|
||||
dependency_vec.reverse();
|
||||
|
||||
println!("HANDLE FUNC DEP VEC {:#?}", dependency_vec);
|
||||
|
||||
while let Some(dependency) = dependency_vec.pop() {
|
||||
let func_component_dep = func_components.get(&dependency);
|
||||
|
||||
@@ -1472,7 +1474,13 @@ pub fn handle_func_dependencies(
|
||||
|
||||
let Some(depend_comp) = func_component_dep else {continue};
|
||||
|
||||
let dep_scope = func_index_map.get(&dependency).unwrap();
|
||||
let dep_scope = func_index_map
|
||||
.get(&dependency)
|
||||
.unwrap_or_else(|| unreachable!());
|
||||
|
||||
println!("THING @ {:#?}", depend_comp.ir);
|
||||
|
||||
println!("FUNC DEFINE IS {:#?}", function_component.ir[0]);
|
||||
|
||||
if (dep_scope.common_ancestor(func_scope) == *func_scope && !depend_comp.args.is_empty())
|
||||
|| function_component.args.is_empty()
|
||||
@@ -1494,6 +1502,7 @@ pub fn handle_func_dependencies(
|
||||
|
||||
if depend_comp.is_code_gen_func {
|
||||
temp_stack = recursion_stack;
|
||||
println!("TEMP STACK IS {:#?}", temp_stack);
|
||||
} else {
|
||||
temp_stack.define_func(
|
||||
dependency.function_name.clone(),
|
||||
|
||||
Reference in New Issue
Block a user