From e37cc8d79279f2e8d469db653c1bb07a7c1f13f8 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Tue, 18 Aug 2026 07:07:21 +0800 Subject: [PATCH] =?UTF-8?q?fix(vast=5Fc):=20alias/keyword=20=E8=8A=82?= =?UTF-8?q?=E7=82=B9=E8=A1=A5=E4=BD=8D=E7=BD=AE=E5=B1=9E=E6=80=A7=EF=BC=8C?= =?UTF-8?q?201=20=E6=96=87=E4=BB=B6=E5=85=A8=E9=87=8F=E5=AF=B9=E6=AF=94?= =?UTF-8?q?=E9=9B=B6=E5=B7=AE=E5=BC=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ParseImport/ParseImportFrom/ParseImportAlias:alias 节点缺 lineno/col_offset(vast 有),编译器符号注册可能按节点位置关联 - MakeKeyword:keyword 节点缺位置属性(4 个调用点:函数调用/类定义的 k=v 与 **kwargs) - 修复后 includes/ + TransPyV/App 全部 201 个 .vp 文件 vast_c vs vast 的 dump 与位置属性完全一致(此前差异 6 文件 keyword + 2 文件 alias) --- lib/vast_c/vast_c.c | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/lib/vast_c/vast_c.c b/lib/vast_c/vast_c.c index cb24e05..b69c802 100644 --- a/lib/vast_c/vast_c.c +++ b/lib/vast_c/vast_c.c @@ -904,9 +904,13 @@ static PyObject *MakeConstantPos(Parser *P, PyObject *Value, Token *Start) { } /* keyword(arg, value):arg 为 NULL 表示 **kwargs(arg=None) */ -static PyObject *MakeKeyword(Parser *P, PyObject *Arg, PyObject *Value) { +static PyObject *MakeKeyword(Parser *P, PyObject *Arg, PyObject *Value, Token *Start) { PyObject *Argv[2] = { Arg ? Arg : Py_None, Value }; - return NewNode(P, "keyword", Argv, 2); + PyObject *N = NewNode(P, "keyword", Argv, 2); + if (N != NULL) { + FixLoc(P, N, Start); + } + return N; } static PyObject *MakeStarred(Parser *P, PyObject *Value) { @@ -2545,7 +2549,7 @@ static PyObject *ParseCallTail(Parser *P, PyObject *Func, Token *Start) { Py_DECREF(Keywords); return NULL; } - PyObject *Kw = MakeKeyword(P, NULL, Value); + PyObject *Kw = MakeKeyword(P, NULL, Value, PrevTok(P)); Py_DECREF(Value); if (Kw == NULL) { Py_DECREF(Args); @@ -2587,7 +2591,7 @@ static PyObject *ParseCallTail(Parser *P, PyObject *Func, Token *Start) { } PyObject *Arg = PyUnicode_FromStringAndSize(NameTok->Start, NameTok->End - NameTok->Start); - PyObject *Kw = MakeKeyword(P, Arg, Value); + PyObject *Kw = MakeKeyword(P, Arg, Value, NameTok); Py_XDECREF(Arg); Py_DECREF(Value); if (Kw == NULL) { @@ -4423,9 +4427,8 @@ static PyObject *ParseImport(Parser *P) { Py_DECREF(Names); return NULL; } - /* alias 无位置属性 */ - (void)NameTok; - (void)EndTok; + /* alias 需与 vast 一致携带位置属性(编译器符号注册按节点位置关联) */ + FixLoc(P, Alias, NameTok); PyList_Append(Names, Alias); Py_DECREF(Alias); if (AtOp(P, ",")) { @@ -4548,7 +4551,7 @@ static PyObject *ParseImportFrom(Parser *P) { Py_XDECREF(Module); return NULL; } - (void)StarTok; + FixLoc(P, Alias, StarTok); PyList_Append(Names, Alias); Py_DECREF(Alias); } else { @@ -4608,6 +4611,9 @@ static PyObject *ParseImportAlias(Parser *P) { PyObject *Alias = NewNode(P, "alias", Argv, 2); Py_DECREF(Name); Py_XDECREF(Asname); + if (Alias != NULL) { + FixLoc(P, Alias, NameTok); + } return Alias; } @@ -5108,7 +5114,7 @@ static PyObject *ParseClassDef(Parser *P, PyObject *Decorators) { Py_DECREF(TypeParams); return NULL; } - PyObject *Kw = MakeKeyword(P, NULL, Value); + PyObject *Kw = MakeKeyword(P, NULL, Value, PrevTok(P)); Py_DECREF(Value); if (Kw == NULL) { Py_DECREF(Bases); @@ -5133,7 +5139,7 @@ static PyObject *ParseClassDef(Parser *P, PyObject *Decorators) { } PyObject *Arg = PyUnicode_FromStringAndSize(ArgTok->Start, ArgTok->End - ArgTok->Start); - PyObject *Kw = MakeKeyword(P, Arg, Value); + PyObject *Kw = MakeKeyword(P, Arg, Value, ArgTok); Py_XDECREF(Arg); Py_DECREF(Value); if (Kw == NULL) {