stage2 更多的工具库 stage1 修复问题

This commit is contained in:
zzy committed 2026-09-18 10:10:53 +08:00
1 parent 16a1f030d4
commit b3e38ba7e4
28 files changed
+2274 -523

No files matched your search

+14
View File
@@ -2024,6 +2024,20 @@ static spl_lang_type_id_t sema_infer(spl_sema_t *sema, spl_ast_node_ref_t ref) {
if (!obj)
return 0;
/* 限定枚举变体 Type.Variant:基对象是聚合类型名且类型为 enum。 */
spl_ast_node_t *objn = spl_ast_node(sema->ast, n->field.obj);
if (objn && objn->kind == SPL_AST_EXPR_IDENT) {
spl_def_node_t *od = spl_def_node(sema->type, objn->resolved_def_id);
if (od && od->kind == SPL_DEF_AGG && obj->kind == SPL_LANG_TYPE_ENUM) {
spl_type_id_t eir = spl_lang_type_get_ir_type(sema->type, obj_tid);
usize vidx = 0;
if (eir && spl_type_agg_member_idx(&sema->type->ir, eir, n->field.field, &vidx)) {
n->resolved_lang_tid = obj_tid;
return obj_tid;
}
}
}
spl_intrin_t in = spl_intrin_lookup_field(obj->kind, n->field.field);
if (in != SPL_INTRIN_NONE) {
spl_lang_type_id_t t = sema_intrin_field(sema, n, in);