feat(parser): new 的类型改按注解规则解析,认 [N]T 前导数组声明符与 T* 后缀

This commit is contained in:
TermiNexus committed 2026-10-09 18:44:42 +08:00
1 parent 17b1d6bb60
commit 7f32042c21
1 file changed
+4 -4
+4 -4
View File
@@ -1853,10 +1853,10 @@ def _parse_new_expr(ps: Parser*) -> AST*:
src = NEW_SRC_MEMGR
continue
break
# 类型 + 可选实参:`T(args)` 复用普通表达式解析;`T`(无实参)是基本类型/别名的简写形式
# (`new stack char`:标量没有构造序列,Gen 侧只需取存储 + 零初始化)。非类型原子(如
# `new stack f * 2`)仍在此 fail-fast,不能让错误落到"class ... is not registered"那种远离根因的报文。
callee: AST* = _parse_atom_expr(ps)
# 类型 + 可选实参:类型用**注解规则**解析 —— 这样前导数组声明符 `[N]T`、指针后缀 `T*`、
# 泛型下标 `list[int]`、描述符前缀都与注解位置同口径;`T(args)` 的实参括号会被 `_parse_test`
# 自身吃成 Call,故这里按"是不是 Call"分流,行为与旧版一致。
callee: AST* = _parse_type_ann(ps)
if callee is None:
_record_parse_err(ps)
ps.error_count += 1