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) {