[Python-checkins] cpython (3.4): set line and column numbers for keyword-only arg nodes (closes #20619)

larry.hastings python-checkins at python.org
Mon Mar 17 07:31:41 CET 2014


http://hg.python.org/cpython/rev/3c01209ab697
changeset:   89711:3c01209ab697
branch:      3.4
user:        Benjamin Peterson <benjamin at python.org>
date:        Thu Feb 13 19:22:14 2014 -0500
summary:
  set line and column numbers for keyword-only arg nodes (closes #20619)

files:
  Lib/test/test_ast.py |  4 ++--
  Misc/NEWS            |  3 +++
  Python/ast.c         |  2 ++
  3 files changed, 7 insertions(+), 2 deletions(-)


diff --git a/Lib/test/test_ast.py b/Lib/test/test_ast.py
--- a/Lib/test/test_ast.py
+++ b/Lib/test/test_ast.py
@@ -37,7 +37,7 @@
     # FunctionDef with kwargs
     "def f(**kwargs): pass",
     # FunctionDef with all kind of args
-    "def f(a, b=1, c=None, d=[], e={}, *args, **kwargs): pass",
+    "def f(a, b=1, c=None, d=[], e={}, *args, f=42, **kwargs): pass",
     # ClassDef
     "class C:pass",
     # ClassDef, new style class
@@ -973,7 +973,7 @@
 ('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [('arg', (1, 6), 'a', None)], None, [], [], None, [('Num', (1, 8), 0)]), [('Pass', (1, 12))], [], None)]),
 ('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [], ('arg', (1, 7), 'args', None), [], [], None, []), [('Pass', (1, 14))], [], None)]),
 ('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [], None, [], [], ('arg', (1, 8), 'kwargs', None), []), [('Pass', (1, 17))], [], None)]),
-('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [('arg', (1, 6), 'a', None), ('arg', (1, 9), 'b', None), ('arg', (1, 14), 'c', None), ('arg', (1, 22), 'd', None), ('arg', (1, 28), 'e', None)], ('arg', (1, 35), 'args', None), [], [], ('arg', (1, 43), 'kwargs', None), [('Num', (1, 11), 1), ('NameConstant', (1, 16), None), ('List', (1, 24), [], ('Load',)), ('Dict', (1, 30), [], [])]), [('Pass', (1, 52))], [], None)]),
+    ('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [('arg', (1, 6), 'a', None), ('arg', (1, 9), 'b', None), ('arg', (1, 14), 'c', None), ('arg', (1, 22), 'd', None), ('arg', (1, 28), 'e', None)], ('arg', (1, 35), 'args', None), [('arg', (1, 41), 'f', None)], [('Num', (1, 43), 42)], ('arg', (1, 49), 'kwargs', None), [('Num', (1, 11), 1), ('NameConstant', (1, 16), None), ('List', (1, 24), [], ('Load',)), ('Dict', (1, 30), [], [])]), [('Pass', (1, 58))], [], None)]),
 ('Module', [('ClassDef', (1, 0), 'C', [], [], None, None, [('Pass', (1, 8))], [])]),
 ('Module', [('ClassDef', (1, 0), 'C', [('Name', (1, 8), 'object', ('Load',))], [], None, None, [('Pass', (1, 17))], [])]),
 ('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [], None, [], [], None, []), [('Return', (1, 8), ('Num', (1, 15), 1))], [], None)]),
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -10,6 +10,9 @@
 Core and Builtins
 -----------------
 
+- Issue #20619: Give the AST nodes of keyword-only arguments a column and line
+  number.
+
 - Issue #20526: Revert changes of issue #19466 which introduces a regression:
   don't clear anymore the state of Python threads early during the Python
   shutdown.
diff --git a/Python/ast.c b/Python/ast.c
--- a/Python/ast.c
+++ b/Python/ast.c
@@ -1203,6 +1203,8 @@
                 arg = arg(argname, annotation, c->c_arena);
                 if (!arg)
                     goto error;
+                arg->lineno = LINENO(ch);
+                arg->col_offset = ch->n_col_offset;
                 asdl_seq_SET(kwonlyargs, j++, arg);
                 i += 2; /* the name and the comma */
                 break;

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list