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 1cdbe58..c41ca2c 100644 Binary files a/lib/vast_c/_parser.pyd and b/lib/vast_c/_parser.pyd differ 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,