diff --git a/stage0/sema.c b/stage0/sema.c index fbbf3723e5..8bfa332fa6 100644 --- a/stage0/sema.c +++ b/stage0/sema.c @@ -9386,45 +9386,6 @@ static AirInstRef zirFieldValComptime( = sema->code.inst_datas[obj_inst].str_tok.start; const char* import_path = findDeclImportPath(sema, decl_name_idx); if (import_path) { - // Special handling for @import("builtin") — the - // compiler-generated builtin module with target info. - // Look up the field in the cg builtin namespace. - if (strcmp(import_path, "builtin") == 0 - && s_cg_builtin_ns_idx != UINT32_MAX) { - uint32_t field_nav - = findNavInNamespace(s_cg_builtin_ns_idx, field_name); - if (field_nav != UINT32_MAX) { - // For "target", return the ptr_nav (pointer to the - // target value) rather than the type. This enables - // comptime method calls like - // target.cCallingConvention() where the evaluator - // needs a pointer, not a type. - // Track it so the comptime evaluator can resolve - // field accesses on the target value. - if (strcmp(field_name, "target") == 0) { - const Nav* tn = ipGetNav(field_nav); - if (tn->resolved_type != IP_INDEX_NONE) { - InternPoolIndex ptr_ty - = internPtrConst(tn->resolved_type); - InternPoolKey pk; - memset(&pk, 0, sizeof(pk)); - pk.tag = IP_KEY_PTR_NAV; - pk.data.ptr_nav.ty = ptr_ty; - pk.data.ptr_nav.nav = field_nav; - InternPoolIndex pn = ipIntern(sema->ip, pk); - return AIR_REF_FROM_IP(pn); - } - } - // Lazily resolve CG builtin fields - // (is_test, object_format, link_mode). - InternPoolIndex val - = resolveCgBuiltinField(field_nav, field_name); - if (val == IP_INDEX_NONE) - val = ensureNavValUpToDate(field_nav); - if (val != IP_INDEX_NONE) - return AIR_REF_FROM_IP(val); - } - } Ast import_ast; Zir import_zir = loadImportZir( sema->source_dir, import_path, &import_ast); @@ -9465,56 +9426,6 @@ static AirInstRef zirFieldPtr(Sema* sema, SemaBlock* block, uint32_t inst) { // Cross-module comptime pointer resolution. // When the object is from a cross-module import (decl_ref of // @import), load the imported module's ZIR and resolve the field. - // This handles patterns like: - // @import("builtin").target → ptr_nav(target) - // Ported from zirFieldValComptime cross-module path, adapted for - // pointer (field_ptr) context. - if (AIR_REF_IS_IP(obj) && block->is_comptime) { - InternPoolIndex obj_ip = AIR_REF_TO_IP(obj); - if (obj_ip == IP_INDEX_VOID_VALUE && obj_ref >= ZIR_REF_START_INDEX - && sema->source_dir) { - uint32_t obj_inst = obj_ref - ZIR_REF_START_INDEX; - ZirInstTag obj_tag = sema->code.inst_tags[obj_inst]; - if (obj_tag == ZIR_INST_DECL_VAL || obj_tag == ZIR_INST_DECL_REF) { - uint32_t decl_name_idx - = sema->code.inst_datas[obj_inst].str_tok.start; - const char* import_path - = findDeclImportPath(sema, decl_name_idx); - if (import_path && strcmp(import_path, "builtin") == 0 - && s_cg_builtin_ns_idx != UINT32_MAX) { - uint32_t field_nav - = findNavInNamespace(s_cg_builtin_ns_idx, field_name); - if (field_nav != UINT32_MAX) { - if (strcmp(field_name, "target") == 0) { - const Nav* tn = ipGetNav(field_nav); - if (tn->resolved_type != IP_INDEX_NONE) { - InternPoolIndex ptr_ty - = internPtrConst(tn->resolved_type); - InternPoolKey pk; - memset(&pk, 0, sizeof(pk)); - pk.tag = IP_KEY_PTR_NAV; - pk.data.ptr_nav.ty = ptr_ty; - pk.data.ptr_nav.nav = field_nav; - InternPoolIndex pn = ipIntern(sema->ip, pk); - return AIR_REF_FROM_IP(pn); - } - } - InternPoolIndex val = ensureNavValUpToDate(field_nav); - if (val != IP_INDEX_NONE) { - InternPoolIndex ptr_ty = internPtrConst(val); - InternPoolKey pk; - memset(&pk, 0, sizeof(pk)); - pk.tag = IP_KEY_PTR_NAV; - pk.data.ptr_nav.ty = ptr_ty; - pk.data.ptr_nav.nav = field_nav; - return AIR_REF_FROM_IP(ipIntern(sema->ip, pk)); - } - } - } - } - } - } - // Comptime: if the operand IS a struct type (its type is `type`), // look up the field in the type's namespace. This handles patterns // like @import("builtin").target where the import resolves to a