fix(vast_c): alias/keyword 节点补位置属性,201 文件全量对比零差异

- 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)
This commit is contained in:
TermiNexus committed 2026-08-18 07:07:21 +08:00
1 parent 6350b81307
commit e37cc8d792
1 file changed
+16 -10
+16 -10
View File
@@ -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) {