stage2 更多的工具库 stage1 修复问题
This commit is contained in:
1 parent
16a1f030d4
commit
b3e38ba7e4
28 files changed
+2274
-523
No files matched your search
@@ -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);
|
||||
|
||||
Reference in new issue
Block a user