From b49b5c3ba6948afcbf82ccbdf61b52f3b71fab33 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Wed, 7 Oct 2026 19:59:28 +0800 Subject: [PATCH] =?UTF-8?q?chore(parse):=20=E5=B7=B2=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E7=9A=84=20CIf=20=E5=AE=B6=E6=97=8F=E5=90=8D=E5=AD=97=E8=A1=A8?= =?UTF-8?q?=E8=A1=A5=E9=BD=90=20CElif/CElse/CEndif?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ExprParser 的 _REMOVED_CIF_NAMES 与 vast_c.c 的 Interesting/Removed 名字表原本只认 CIf/CIfdef/CIfndef,现补齐三件套六个拼写(含 c. 前缀形式),使 parser 阶段即可给出指向 cif/celif/celse 的 FailFast;_parser.pyd 同步重编。 --- lib/vast/ExprParser.py | 8 +++++--- lib/vast_c/_parser.pyd | Bin 227354 -> 227866 bytes lib/vast_c/vast_c.c | 8 +++++--- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/lib/vast/ExprParser.py b/lib/vast/ExprParser.py index a6dee14..35d1680 100644 --- a/lib/vast/ExprParser.py +++ b/lib/vast/ExprParser.py @@ -40,10 +40,12 @@ def _JoinConstParts(parts: list[object]) -> str | bytes: _HEX_ALPHABET: str = '0123456789abcdefABCDEF' -# 已删除的用户可见 CIf 族名:用户再写 c.CIf / c.CIfdef / c.CIfndef ⇒ FailFast, -# 提示改用原生 cif/celif/celse 与 defined() 谓词(内部标记由解析期合成,不走此处)。 +# 已删除的用户可见 CIf 族名(CIf/CIfdef/CIfndef/CElif/CElse/CEndif 及 c. 前缀形式): +# 用户再写即 FailFast,提示改用原生 cif/celif/celse 与 defined() 谓词 +#(内部标记 c.@CIf 族由解析期合成,不走此处)。 _REMOVED_CIF_NAMES: frozenset[str] = frozenset({ - 'CIf', 'CIfdef', 'CIfndef', 'c.CIf', 'c.CIfdef', 'c.CIfndef', + 'CIf', 'CIfdef', 'CIfndef', 'CElif', 'CElse', 'CEndif', + 'c.CIf', 'c.CIfdef', 'c.CIfndef', 'c.CElif', 'c.CElse', 'c.CEndif', }) diff --git a/lib/vast_c/_parser.pyd b/lib/vast_c/_parser.pyd index 1cdbe58b9396c52a47faf6f28f1ddee7af4716de..c41ca2ce58d68718bf684e3c0e606e0c68a19403 100644 GIT binary patch delta 4134 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 delta 4081 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 Kl);t4H1_{oR1ARt diff --git a/lib/vast_c/vast_c.c b/lib/vast_c/vast_c.c index 8df093e..925d529 100644 --- a/lib/vast_c/vast_c.c +++ b/lib/vast_c/vast_c.c @@ -3103,7 +3103,8 @@ static int StrIsOneOf(PyObject *S, const char *const *Names) { /* 调用点特殊 desugar / fail-fast:接管 Node 的引用,返回新引用(失败返回 NULL)。 * - defined(NAME):仅 cif/celif 条件内合法(P->InCIfCond)⇒ desugar 为 c.@CIfdef(NAME); * 其余位置 ⇒ FailFast。 - * - c.CIf / c.CIfdef / c.CIfndef(及裸名):已删除 ⇒ FailFast,指向原生新语法。 */ + * - c.CIf / c.CIfdef / c.CIfndef / c.CElif / c.CElse / c.CEndif(及裸名):已删除 ⇒ FailFast, + * 指向原生新语法。 */ static PyObject *DesugarSpecialCall(Parser *P, PyObject *Node, Token *Start) { PyObject *Func = PyObject_GetAttrString(Node, "func"); if (Func == NULL) { @@ -3123,7 +3124,7 @@ static PyObject *DesugarSpecialCall(Parser *P, PyObject *Node, Token *Start) { Py_DECREF(Func); return Node; } - static const char *Interesting[] = {"CIf", "CIfdef", "CIfndef", "defined", NULL}; + static const char *Interesting[] = {"CIf", "CIfdef", "CIfndef", "CElif", "CElse", "CEndif", "defined", NULL}; int Hit = StrIsOneOf(Short, Interesting); Py_DECREF(Short); if (!Hit) { @@ -3137,7 +3138,8 @@ static PyObject *DesugarSpecialCall(Parser *P, PyObject *Node, Token *Start) { return Node; } static const char *Removed[] = { - "CIf", "CIfdef", "CIfndef", "c.CIf", "c.CIfdef", "c.CIfndef", NULL + "CIf", "CIfdef", "CIfndef", "CElif", "CElse", "CEndif", + "c.CIf", "c.CIfdef", "c.CIfndef", "c.CElif", "c.CElse", "c.CEndif", NULL }; if (StrIsOneOf(Callee, Removed)) { PyErr_Format(PyExc_SyntaxError,