diff --git a/Python-3.3.0/Python/ast.c b/python3-modified/Python/ast.c index fc6c565..11857a3 100644 --- a/Python-3.3.0/Python/ast.c +++ b/python3-modified/Python/ast.c @@ -1173,7 +1173,7 @@ ast_for_arg(struct compiling *c, const node *n) return NULL; } - return arg(name, annotation, c->c_arena); + return arg(name, annotation, n->n_lineno, n->n_col_offset, c->c_arena); } /* returns -1 if failed to handle keyword only arguments @@ -1228,7 +1228,7 @@ handle_keywordonly_args(struct compiling *c, const node *n, int start, goto error; if (forbidden_name(argname, ch, 0)) goto error; - arg = arg(argname, annotation, c->c_arena); + arg = arg(argname, annotation, ch->n_lineno, ch->n_col_offset, c->c_arena); if (!arg) goto error; asdl_seq_SET(kwonlyargs, j++, arg); @@ -1267,6 +1267,7 @@ ast_for_arguments(struct compiling *c, const node *n) vfpdef: NAME */ int i, j, k, nposargs = 0, nkwonlyargs = 0; + int vararg_lineno = 0, vararg_col_offset = 0, kwarg_lineno = 0, kwarg_col_offset = 0; int nposdefaults = 0, found_default = 0; asdl_seq *posargs, *posdefaults, *kwonlyargs, *kwdefaults; identifier vararg = NULL, kwarg = NULL; @@ -1277,7 +1278,8 @@ ast_for_arguments(struct compiling *c, const node *n) if (TYPE(n) == parameters) { if (NCH(n) == 2) /* () as argument list */ return arguments(NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, c->c_arena); + NULL, vararg_lineno, vararg_col_offset, + kwarg_lineno, kwarg_col_offset, c->c_arena); n = CHILD(n, 1); } assert(TYPE(n) == typedargslist || TYPE(n) == varargslist); @@ -1386,6 +1388,8 @@ ast_for_arguments(struct compiling *c, const node *n) vararg = NEW_IDENTIFIER(CHILD(ch, 0)); if (!vararg) return NULL; + vararg_lineno = CHILD(ch, 0)->n_lineno; + vararg_col_offset = CHILD(ch, 0)->n_col_offset; if (forbidden_name(vararg, CHILD(ch, 0), 0)) return NULL; if (NCH(ch) > 1) { @@ -1411,6 +1415,8 @@ ast_for_arguments(struct compiling *c, const node *n) kwarg = NEW_IDENTIFIER(CHILD(ch, 0)); if (!kwarg) return NULL; + kwarg_lineno = CHILD(ch, 0)->n_lineno; + kwarg_col_offset = CHILD(ch, 0)->n_col_offset; if (NCH(ch) > 1) { /* there is an annotation on the kwarg */ kwargannotation = ast_for_expr(c, CHILD(ch, 2)); @@ -1429,7 +1435,9 @@ ast_for_arguments(struct compiling *c, const node *n) } } return arguments(posargs, vararg, varargannotation, kwonlyargs, kwarg, - kwargannotation, posdefaults, kwdefaults, c->c_arena); + kwargannotation, posdefaults, kwdefaults, + vararg_lineno, vararg_col_offset, + kwarg_lineno, kwarg_col_offset, c->c_arena); } static expr_ty @@ -1595,7 +1603,7 @@ ast_for_lambdef(struct compiling *c, const node *n) if (NCH(n) == 3) { args = arguments(NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, c->c_arena); + NULL, 0, 0, 0, 0, c->c_arena); if (!args) return NULL; expression = ast_for_expr(c, CHILD(n, 2)); @@ -2237,8 +2245,6 @@ ast_for_power(struct compiling *c, const node *n) tmp = ast_for_trailer(c, ch, e); if (!tmp) return NULL; - tmp->lineno = e->lineno; - tmp->col_offset = e->col_offset; e = tmp; } if (TYPE(CHILD(n, NCH(n) - 1)) == factor) { diff --git a/Python-3.3.0/Parser/Python.asdl b/python3-modified/Parser/Python.asdl index 6b06dec..8f3d89f 100644 --- a/Python-3.3.0/Parser/Python.asdl +++ b/python3-modified/Parser/Python.asdl @@ -106,8 +106,11 @@ module Python arguments = (arg* args, identifier? vararg, expr? varargannotation, arg* kwonlyargs, identifier? kwarg, expr? kwargannotation, expr* defaults, - expr* kw_defaults) - arg = (identifier arg, expr? annotation) + expr* kw_defaults, + int vararg_lineno, int vararg_col_offset, + int kwarg_lineno, int kwarg_col_offset) + arg = (identifier arg, expr? annotation, + int lineno, int col_offset) -- keyword arguments supplied to call keyword = (identifier arg, expr value)