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:
1 parent
6350b81307
commit
e37cc8d792
1 file changed
+16
-10
+16
-10
@@ -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) {
|
||||
|
||||
Reference in new issue
Block a user