From 816c47058da777bafb4bba17d0648a6e221b4a94 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 30 Oct 2025 16:14:32 +0000 Subject: [PATCH] For test runner, try to look for `os.exit` or `os2.exit` --- src/checker.cpp | 16 ++++++++++++++++ src/llvm_backend.cpp | 19 ++++++++++++++++++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/checker.cpp b/src/checker.cpp index 8b3638c9d..1daacd9ce 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -923,6 +923,22 @@ gb_internal AstPackage *get_core_package(CheckerInfo *info, String name) { return *found; } + +gb_internal AstPackage *try_get_core_package(CheckerInfo *info, String name) { + if (name == "runtime") { + return get_runtime_package(info); + } + + gbAllocator a = heap_allocator(); + String path = get_fullpath_core_collection(a, name, nullptr); + defer (gb_free(a, path.text)); + auto found = string_map_get(&info->packages, path); + if (found == nullptr) { + return nullptr; + } + return *found; +} + gb_internal void add_package_dependency(CheckerContext *c, char const *package_name, char const *name, bool required=false) { String n = make_string_c(name); AstPackage *p = get_core_package(&c->checker->info, make_string_c(package_name)); diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 22a481187..3c9d92095 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -2900,7 +2900,24 @@ gb_internal lbProcedure *lb_create_main_procedure(lbModule *m, lbProcedure *star args[0] = lb_addr_load(p, all_tests_slice); lbValue result = lb_emit_call(p, runner, args); - lbValue exit_runner = lb_find_package_value(m, str_lit("os"), str_lit("exit")); + lbValue exit_runner = {}; + { + AstPackage *pkg = try_get_core_package(m->info, str_lit("os")); + if (pkg == nullptr) { + pkg = try_get_core_package(m->info, str_lit("os2")); + } + if (pkg == nullptr) { + pkg = get_core_package(m->info, str_lit("os2")); + } + + String name = str_lit("exit"); + Entity *e = scope_lookup_current(pkg->scope, name); + if (e == nullptr) { + compiler_error("Could not find type declaration for '%.*s.%.*s'\n", LIT(pkg->name), LIT(name)); + } + exit_runner = lb_find_value_from_entity(m, e); + } + auto exit_args = array_make(temporary_allocator(), 1); exit_args[0] = lb_emit_select(p, result, lb_const_int(m, t_int, 0), lb_const_int(m, t_int, 1)); lb_emit_call(p, exit_runner, exit_args, ProcInlining_none);