feat(parser): 支持空下标 T[](无签名函数指针 t.Callable[])

_parse_slice 在 '[' 后紧跟 ']' 时不再调 _parse_expr(原本报 意外的 token ]),slice 置 None 交类型解析侧按空参数表处理。其余切片/元组/单表达式形态不变。
This commit is contained in:
TermiNexus committed 2026-09-27 12:25:47 +08:00
1 parent c392390e0d
commit a6fe460bce
1 file changed
+4 -1
+4 -1
View File
@@ -1668,7 +1668,10 @@ def _parse_subscript(ps: rawptr[Parser], value: rawptr[AST]) -> rawptr[AST]:
def _parse_slice(ps: rawptr[Parser]) -> rawptr[AST]:
"""Parse slice: [expr] ':' [expr] [':' [expr]] | expr | expr, expr, ..."""
lower: rawptr[AST] = None
if not _match_op(ps, TokOp.Colon):
# 空下标(`T[]`,类型注解位置的无签名函数指针 t.Callable[]):`[` 后直接 `]`
# ⇒ slice 为 None(由类型解析侧按"空参数表"处理),不能调 _parse_expr,
# 否则报"意外的 token ']'"。
if not _match_op(ps, TokOp.Colon) and not _match_op(ps, TokOp.Rsqb):
lower = _parse_expr(ps)
# Check if there’s a comma (tuple syntax: a[x, y, ...])