diff --git a/src/compiler.pr b/src/compiler.pr index 5256bf8..946c42c 100644 --- a/src/compiler.pr +++ b/src/compiler.pr @@ -1772,6 +1772,7 @@ def convert_fp_to_closure(tpe: &typechecking::Type, value: Value, loc: &Value, s var ret = { kind = ValueKind::ZEROINITIALIZER, tpe = tpe } !Value value = state.bitcast(tpe.fields[0].tpe, value, loc) ret = state.insert_value(tpe, ret, value, [0], loc) + add_type_meta(tpe, state) return ret } @@ -1893,6 +1894,7 @@ def walk_Cast(node: &parser::Node, state: &State) -> Value { let value = walk_and_load_expression(node.value.bin_op.left, state) import_structures(node.tpe, state.module) + add_type_meta(node.tpe, state) return convert_to(node, value, node.tpe, state) } @@ -2850,6 +2852,10 @@ def walk_Identifier(node: &parser::Node, state: &State) -> Value { } let tpe = node.tpe + if tpe and tpe.kind == typechecking::TypeKind::CLOSURE { + add_type_meta(tpe, state) + } + import_structures(tpe, state.module) if (@val).global { (@(@state).module).imported.add((@val).assembly_name) @@ -6582,6 +6588,10 @@ export def create_function( function.yield_index = 1 } + if is_closure { + add_type_meta(reference(function.state), state) + } + import_structures(tpe, state.module) state.module.imported.add(tpe.type_name) create_debug_info(node, function, tpe, state) diff --git a/src/toolchain.pr b/src/toolchain.pr index fa60e79..720620f 100644 --- a/src/toolchain.pr +++ b/src/toolchain.pr @@ -698,9 +698,10 @@ export def compile_main_file(filename: &string) { create_types_main() main_module_file = filename - var module = consteval_file(filename, "main", display_name = main_file_name) + var module = create_module_if_absent(filename, "main", display_name = main_file_name) if not module { exit(1) } + consteval_module(module, main_file_name) serialize::dependency_pass(module) typecheck_module(module)