[Python-checkins] bpo-31241: Fix AST node position for list and generator comprehensions. (GH-10633)

Serhiy Storchaka webhook-mailer at python.org
Tue Nov 27 02:40:36 EST 2018


https://github.com/python/cpython/commit/b619b097923155a7034c05c4018bf06af9f994d0
commit: b619b097923155a7034c05c4018bf06af9f994d0
branch: master
author: Serhiy Storchaka <storchaka at gmail.com>
committer: GitHub <noreply at github.com>
date: 2018-11-27T09:40:29+02:00
summary:

bpo-31241: Fix AST node position for list and generator comprehensions. (GH-10633)

The lineno and col_offset attributes of AST nodes for list comprehensions,
generator expressions and tuples are now point to the opening parenthesis or
square brace. For tuples without parenthesis they point to the position
of the first item.

files:
A Misc/NEWS.d/next/Core and Builtins/2018-11-21-14-05-51.bpo-31241.Kin10-.rst
M Lib/test/test_ast.py
M Lib/test/test_exceptions.py
M Python/ast.c
M Python/importlib_zipimport.h

diff --git a/Lib/test/test_ast.py b/Lib/test/test_ast.py
index 0d51b1141925..db9a6caf42f1 100644
--- a/Lib/test/test_ast.py
+++ b/Lib/test/test_ast.py
@@ -55,6 +55,9 @@ def to_tuple(t):
     "del v",
     # Assign
     "v = 1",
+    "a,b = c",
+    "(a,b) = c",
+    "[a,b] = c",
     # AugAssign
     "v += 1",
     # For
@@ -90,9 +93,8 @@ def to_tuple(t):
     "for v in v:continue",
     # for statements with naked tuples (see http://bugs.python.org/issue6704)
     "for a,b in c: pass",
-    "[(a,b) for a,b in c]",
-    "((a,b) for a,b in c)",
-    "((a,b) for (a,b) in c)",
+    "for (a,b) in c: pass",
+    "for [a,b] in c: pass",
     # Multiline generator expression (test for .lineno & .col_offset)
     """(
     (
@@ -130,6 +132,8 @@ def to_tuple(t):
     "@deco1\n at deco2()\nasync def f(): pass",
     # Decorated ClassDef
     "@deco1\n at deco2()\nclass C: pass",
+    # Decorator with generator argument
+    "@deco(a for a in b)\ndef f(): pass",
 ]
 
 # These are compiled through "single"
@@ -168,12 +172,24 @@ def to_tuple(t):
   "[a for b in c if d]",
   # GeneratorExp
   "(a for b in c if d)",
+  # Comprehensions with multiple for targets
+  "[(a,b) for a,b in c]",
+  "[(a,b) for (a,b) in c]",
+  "[(a,b) for [a,b] in c]",
+  "{(a,b) for a,b in c}",
+  "{(a,b) for (a,b) in c}",
+  "{(a,b) for [a,b] in c}",
+  "((a,b) for a,b in c)",
+  "((a,b) for (a,b) in c)",
+  "((a,b) for [a,b] in c)",
   # Yield - yield expressions can't work outside a function
   #
   # Compare
   "1 < 2 < 3",
   # Call
   "f(1,2,c=3,*d,**e)",
+  # Call with a generator argument
+  "f(a for a in b)",
   # Num
   "10",
   # Str
@@ -1266,6 +1282,9 @@ def main():
 ('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [], None, [], [], None, []), [('Return', (1, 8), ('Constant', (1, 15), 1))], [], None)]),
 ('Module', [('Delete', (1, 0), [('Name', (1, 4), 'v', ('Del',))])]),
 ('Module', [('Assign', (1, 0), [('Name', (1, 0), 'v', ('Store',))], ('Constant', (1, 4), 1))]),
+('Module', [('Assign', (1, 0), [('Tuple', (1, 0), [('Name', (1, 0), 'a', ('Store',)), ('Name', (1, 2), 'b', ('Store',))], ('Store',))], ('Name', (1, 6), 'c', ('Load',)))]),
+('Module', [('Assign', (1, 0), [('Tuple', (1, 0), [('Name', (1, 1), 'a', ('Store',)), ('Name', (1, 3), 'b', ('Store',))], ('Store',))], ('Name', (1, 8), 'c', ('Load',)))]),
+('Module', [('Assign', (1, 0), [('List', (1, 0), [('Name', (1, 1), 'a', ('Store',)), ('Name', (1, 3), 'b', ('Store',))], ('Store',))], ('Name', (1, 8), 'c', ('Load',)))]),
 ('Module', [('AugAssign', (1, 0), ('Name', (1, 0), 'v', ('Store',)), ('Add',), ('Constant', (1, 5), 1))]),
 ('Module', [('For', (1, 0), ('Name', (1, 4), 'v', ('Store',)), ('Name', (1, 9), 'v', ('Load',)), [('Pass', (1, 11))], [])]),
 ('Module', [('While', (1, 0), ('Name', (1, 6), 'v', ('Load',)), [('Pass', (1, 8))], [])]),
@@ -1284,10 +1303,9 @@ def main():
 ('Module', [('For', (1, 0), ('Name', (1, 4), 'v', ('Store',)), ('Name', (1, 9), 'v', ('Load',)), [('Break', (1, 11))], [])]),
 ('Module', [('For', (1, 0), ('Name', (1, 4), 'v', ('Store',)), ('Name', (1, 9), 'v', ('Load',)), [('Continue', (1, 11))], [])]),
 ('Module', [('For', (1, 0), ('Tuple', (1, 4), [('Name', (1, 4), 'a', ('Store',)), ('Name', (1, 6), 'b', ('Store',))], ('Store',)), ('Name', (1, 11), 'c', ('Load',)), [('Pass', (1, 14))], [])]),
-('Module', [('Expr', (1, 0), ('ListComp', (1, 1), ('Tuple', (1, 2), [('Name', (1, 2), 'a', ('Load',)), ('Name', (1, 4), 'b', ('Load',))], ('Load',)), [('comprehension', ('Tuple', (1, 11), [('Name', (1, 11), 'a', ('Store',)), ('Name', (1, 13), 'b', ('Store',))], ('Store',)), ('Name', (1, 18), 'c', ('Load',)), [], 0)]))]),
-('Module', [('Expr', (1, 0), ('GeneratorExp', (1, 1), ('Tuple', (1, 2), [('Name', (1, 2), 'a', ('Load',)), ('Name', (1, 4), 'b', ('Load',))], ('Load',)), [('comprehension', ('Tuple', (1, 11), [('Name', (1, 11), 'a', ('Store',)), ('Name', (1, 13), 'b', ('Store',))], ('Store',)), ('Name', (1, 18), 'c', ('Load',)), [], 0)]))]),
-('Module', [('Expr', (1, 0), ('GeneratorExp', (1, 1), ('Tuple', (1, 2), [('Name', (1, 2), 'a', ('Load',)), ('Name', (1, 4), 'b', ('Load',))], ('Load',)), [('comprehension', ('Tuple', (1, 12), [('Name', (1, 12), 'a', ('Store',)), ('Name', (1, 14), 'b', ('Store',))], ('Store',)), ('Name', (1, 20), 'c', ('Load',)), [], 0)]))]),
-('Module', [('Expr', (1, 0), ('GeneratorExp', (2, 4), ('Tuple', (3, 4), [('Name', (3, 4), 'Aa', ('Load',)), ('Name', (5, 7), 'Bb', ('Load',))], ('Load',)), [('comprehension', ('Tuple', (8, 4), [('Name', (8, 4), 'Aa', ('Store',)), ('Name', (10, 4), 'Bb', ('Store',))], ('Store',)), ('Name', (10, 10), 'Cc', ('Load',)), [], 0)]))]),
+('Module', [('For', (1, 0), ('Tuple', (1, 4), [('Name', (1, 5), 'a', ('Store',)), ('Name', (1, 7), 'b', ('Store',))], ('Store',)), ('Name', (1, 13), 'c', ('Load',)), [('Pass', (1, 16))], [])]),
+('Module', [('For', (1, 0), ('List', (1, 4), [('Name', (1, 5), 'a', ('Store',)), ('Name', (1, 7), 'b', ('Store',))], ('Store',)), ('Name', (1, 13), 'c', ('Load',)), [('Pass', (1, 16))], [])]),
+('Module', [('Expr', (1, 0), ('GeneratorExp', (1, 0), ('Tuple', (2, 4), [('Name', (3, 4), 'Aa', ('Load',)), ('Name', (5, 7), 'Bb', ('Load',))], ('Load',)), [('comprehension', ('Tuple', (8, 4), [('Name', (8, 4), 'Aa', ('Store',)), ('Name', (10, 4), 'Bb', ('Store',))], ('Store',)), ('Name', (10, 10), 'Cc', ('Load',)), [], 0)]))]),
 ('Module', [('Expr', (1, 0), ('DictComp', (1, 0), ('Name', (1, 1), 'a', ('Load',)), ('Name', (1, 5), 'b', ('Load',)), [('comprehension', ('Name', (1, 11), 'w', ('Store',)), ('Name', (1, 16), 'x', ('Load',)), [], 0), ('comprehension', ('Name', (1, 22), 'm', ('Store',)), ('Name', (1, 27), 'p', ('Load',)), [('Name', (1, 32), 'g', ('Load',))], 0)]))]),
 ('Module', [('Expr', (1, 0), ('DictComp', (1, 0), ('Name', (1, 1), 'a', ('Load',)), ('Name', (1, 5), 'b', ('Load',)), [('comprehension', ('Tuple', (1, 11), [('Name', (1, 11), 'v', ('Store',)), ('Name', (1, 13), 'w', ('Store',))], ('Store',)), ('Name', (1, 18), 'x', ('Load',)), [], 0)]))]),
 ('Module', [('Expr', (1, 0), ('SetComp', (1, 0), ('Name', (1, 1), 'r', ('Load',)), [('comprehension', ('Name', (1, 7), 'l', ('Store',)), ('Name', (1, 12), 'x', ('Load',)), [('Name', (1, 17), 'g', ('Load',))], 0)]))]),
@@ -1297,10 +1315,11 @@ def main():
 ('Module', [('AsyncFunctionDef', (1, 0), 'f', ('arguments', [], None, [], [], None, []), [('AsyncWith', (2, 1), [('withitem', ('Name', (2, 12), 'a', ('Load',)), ('Name', (2, 17), 'b', ('Store',)))], [('Expr', (2, 20), ('Constant', (2, 20), 1))])], [], None)]),
 ('Module', [('Expr', (1, 0), ('Dict', (1, 0), [None, ('Constant', (1, 10), 2)], [('Dict', (1, 3), [('Constant', (1, 4), 1)], [('Constant', (1, 6), 2)]), ('Constant', (1, 12), 3)]))]),
 ('Module', [('Expr', (1, 0), ('Set', (1, 0), [('Starred', (1, 1), ('Set', (1, 2), [('Constant', (1, 3), 1), ('Constant', (1, 6), 2)]), ('Load',)), ('Constant', (1, 10), 3)]))]),
-('Module', [('AsyncFunctionDef', (1, 0), 'f', ('arguments', [], None, [], [], None, []), [('Expr', (2, 1), ('ListComp', (2, 2), ('Name', (2, 2), 'i', ('Load',)), [('comprehension', ('Name', (2, 14), 'b', ('Store',)), ('Name', (2, 19), 'c', ('Load',)), [], 1)]))], [], None)]),
+('Module', [('AsyncFunctionDef', (1, 0), 'f', ('arguments', [], None, [], [], None, []), [('Expr', (2, 1), ('ListComp', (2, 1), ('Name', (2, 2), 'i', ('Load',)), [('comprehension', ('Name', (2, 14), 'b', ('Store',)), ('Name', (2, 19), 'c', ('Load',)), [], 1)]))], [], None)]),
 ('Module', [('FunctionDef', (3, 0), 'f', ('arguments', [], None, [], [], None, []), [('Pass', (3, 9))], [('Name', (1, 1), 'deco1', ('Load',)), ('Call', (2, 0), ('Name', (2, 1), 'deco2', ('Load',)), [], [])], None)]),
 ('Module', [('AsyncFunctionDef', (3, 0), 'f', ('arguments', [], None, [], [], None, []), [('Pass', (3, 15))], [('Name', (1, 1), 'deco1', ('Load',)), ('Call', (2, 0), ('Name', (2, 1), 'deco2', ('Load',)), [], [])], None)]),
 ('Module', [('ClassDef', (3, 0), 'C', [], [], [('Pass', (3, 9))], [('Name', (1, 1), 'deco1', ('Load',)), ('Call', (2, 0), ('Name', (2, 1), 'deco2', ('Load',)), [], [])])]),
+('Module', [('FunctionDef', (2, 0), 'f', ('arguments', [], None, [], [], None, []), [('Pass', (2, 9))], [('Call', (1, 1), ('Name', (1, 1), 'deco', ('Load',)), [('GeneratorExp', (1, 5), ('Name', (1, 6), 'a', ('Load',)), [('comprehension', ('Name', (1, 12), 'a', ('Store',)), ('Name', (1, 17), 'b', ('Load',)), [], 0)])], [])], None)]),
 ]
 single_results = [
 ('Interactive', [('Expr', (1, 0), ('BinOp', (1, 0), ('Constant', (1, 0), 1), ('Add',), ('Constant', (1, 2), 2)))]),
@@ -1315,10 +1334,20 @@ def main():
 ('Expression', ('Dict', (1, 0), [], [])),
 ('Expression', ('Set', (1, 0), [('Constant', (1, 1), None)])),
 ('Expression', ('Dict', (1, 0), [('Constant', (2, 6), 1)], [('Constant', (4, 10), 2)])),
-('Expression', ('ListComp', (1, 1), ('Name', (1, 1), 'a', ('Load',)), [('comprehension', ('Name', (1, 7), 'b', ('Store',)), ('Name', (1, 12), 'c', ('Load',)), [('Name', (1, 17), 'd', ('Load',))], 0)])),
-('Expression', ('GeneratorExp', (1, 1), ('Name', (1, 1), 'a', ('Load',)), [('comprehension', ('Name', (1, 7), 'b', ('Store',)), ('Name', (1, 12), 'c', ('Load',)), [('Name', (1, 17), 'd', ('Load',))], 0)])),
+('Expression', ('ListComp', (1, 0), ('Name', (1, 1), 'a', ('Load',)), [('comprehension', ('Name', (1, 7), 'b', ('Store',)), ('Name', (1, 12), 'c', ('Load',)), [('Name', (1, 17), 'd', ('Load',))], 0)])),
+('Expression', ('GeneratorExp', (1, 0), ('Name', (1, 1), 'a', ('Load',)), [('comprehension', ('Name', (1, 7), 'b', ('Store',)), ('Name', (1, 12), 'c', ('Load',)), [('Name', (1, 17), 'd', ('Load',))], 0)])),
+('Expression', ('ListComp', (1, 0), ('Tuple', (1, 1), [('Name', (1, 2), 'a', ('Load',)), ('Name', (1, 4), 'b', ('Load',))], ('Load',)), [('comprehension', ('Tuple', (1, 11), [('Name', (1, 11), 'a', ('Store',)), ('Name', (1, 13), 'b', ('Store',))], ('Store',)), ('Name', (1, 18), 'c', ('Load',)), [], 0)])),
+('Expression', ('ListComp', (1, 0), ('Tuple', (1, 1), [('Name', (1, 2), 'a', ('Load',)), ('Name', (1, 4), 'b', ('Load',))], ('Load',)), [('comprehension', ('Tuple', (1, 11), [('Name', (1, 12), 'a', ('Store',)), ('Name', (1, 14), 'b', ('Store',))], ('Store',)), ('Name', (1, 20), 'c', ('Load',)), [], 0)])),
+('Expression', ('ListComp', (1, 0), ('Tuple', (1, 1), [('Name', (1, 2), 'a', ('Load',)), ('Name', (1, 4), 'b', ('Load',))], ('Load',)), [('comprehension', ('List', (1, 11), [('Name', (1, 12), 'a', ('Store',)), ('Name', (1, 14), 'b', ('Store',))], ('Store',)), ('Name', (1, 20), 'c', ('Load',)), [], 0)])),
+('Expression', ('SetComp', (1, 0), ('Tuple', (1, 1), [('Name', (1, 2), 'a', ('Load',)), ('Name', (1, 4), 'b', ('Load',))], ('Load',)), [('comprehension', ('Tuple', (1, 11), [('Name', (1, 11), 'a', ('Store',)), ('Name', (1, 13), 'b', ('Store',))], ('Store',)), ('Name', (1, 18), 'c', ('Load',)), [], 0)])),
+('Expression', ('SetComp', (1, 0), ('Tuple', (1, 1), [('Name', (1, 2), 'a', ('Load',)), ('Name', (1, 4), 'b', ('Load',))], ('Load',)), [('comprehension', ('Tuple', (1, 11), [('Name', (1, 12), 'a', ('Store',)), ('Name', (1, 14), 'b', ('Store',))], ('Store',)), ('Name', (1, 20), 'c', ('Load',)), [], 0)])),
+('Expression', ('SetComp', (1, 0), ('Tuple', (1, 1), [('Name', (1, 2), 'a', ('Load',)), ('Name', (1, 4), 'b', ('Load',))], ('Load',)), [('comprehension', ('List', (1, 11), [('Name', (1, 12), 'a', ('Store',)), ('Name', (1, 14), 'b', ('Store',))], ('Store',)), ('Name', (1, 20), 'c', ('Load',)), [], 0)])),
+('Expression', ('GeneratorExp', (1, 0), ('Tuple', (1, 1), [('Name', (1, 2), 'a', ('Load',)), ('Name', (1, 4), 'b', ('Load',))], ('Load',)), [('comprehension', ('Tuple', (1, 11), [('Name', (1, 11), 'a', ('Store',)), ('Name', (1, 13), 'b', ('Store',))], ('Store',)), ('Name', (1, 18), 'c', ('Load',)), [], 0)])),
+('Expression', ('GeneratorExp', (1, 0), ('Tuple', (1, 1), [('Name', (1, 2), 'a', ('Load',)), ('Name', (1, 4), 'b', ('Load',))], ('Load',)), [('comprehension', ('Tuple', (1, 11), [('Name', (1, 12), 'a', ('Store',)), ('Name', (1, 14), 'b', ('Store',))], ('Store',)), ('Name', (1, 20), 'c', ('Load',)), [], 0)])),
+('Expression', ('GeneratorExp', (1, 0), ('Tuple', (1, 1), [('Name', (1, 2), 'a', ('Load',)), ('Name', (1, 4), 'b', ('Load',))], ('Load',)), [('comprehension', ('List', (1, 11), [('Name', (1, 12), 'a', ('Store',)), ('Name', (1, 14), 'b', ('Store',))], ('Store',)), ('Name', (1, 20), 'c', ('Load',)), [], 0)])),
 ('Expression', ('Compare', (1, 0), ('Constant', (1, 0), 1), [('Lt',), ('Lt',)], [('Constant', (1, 4), 2), ('Constant', (1, 8), 3)])),
 ('Expression', ('Call', (1, 0), ('Name', (1, 0), 'f', ('Load',)), [('Constant', (1, 2), 1), ('Constant', (1, 4), 2), ('Starred', (1, 10), ('Name', (1, 11), 'd', ('Load',)), ('Load',))], [('keyword', 'c', ('Constant', (1, 8), 3)), ('keyword', None, ('Name', (1, 15), 'e', ('Load',)))])),
+('Expression', ('Call', (1, 0), ('Name', (1, 0), 'f', ('Load',)), [('GeneratorExp', (1, 1), ('Name', (1, 2), 'a', ('Load',)), [('comprehension', ('Name', (1, 8), 'a', ('Store',)), ('Name', (1, 13), 'b', ('Load',)), [], 0)])], [])),
 ('Expression', ('Constant', (1, 0), 10)),
 ('Expression', ('Constant', (1, 0), 'string')),
 ('Expression', ('Attribute', (1, 0), ('Name', (1, 0), 'a', ('Load',)), 'b', ('Load',))),
@@ -1327,7 +1356,7 @@ def main():
 ('Expression', ('List', (1, 0), [('Constant', (1, 1), 1), ('Constant', (1, 3), 2), ('Constant', (1, 5), 3)], ('Load',))),
 ('Expression', ('List', (1, 0), [], ('Load',))),
 ('Expression', ('Tuple', (1, 0), [('Constant', (1, 0), 1), ('Constant', (1, 2), 2), ('Constant', (1, 4), 3)], ('Load',))),
-('Expression', ('Tuple', (1, 1), [('Constant', (1, 1), 1), ('Constant', (1, 3), 2), ('Constant', (1, 5), 3)], ('Load',))),
+('Expression', ('Tuple', (1, 0), [('Constant', (1, 1), 1), ('Constant', (1, 3), 2), ('Constant', (1, 5), 3)], ('Load',))),
 ('Expression', ('Tuple', (1, 0), [], ('Load',))),
 ('Expression', ('Call', (1, 0), ('Attribute', (1, 0), ('Attribute', (1, 0), ('Attribute', (1, 0), ('Name', (1, 0), 'a', ('Load',)), 'b', ('Load',)), 'c', ('Load',)), 'd', ('Load',)), [('Subscript', (1, 8), ('Attribute', (1, 8), ('Name', (1, 8), 'a', ('Load',)), 'b', ('Load',)), ('Slice', ('Constant', (1, 12), 1), ('Constant', (1, 14), 2), None), ('Load',))], [])),
 ]
diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py
index 535324880089..6ef529e2b015 100644
--- a/Lib/test/test_exceptions.py
+++ b/Lib/test/test_exceptions.py
@@ -204,7 +204,7 @@ def check(src, lineno, offset):
         check('x = 0o9', 1, 6)
 
         # Errors thrown by symtable.c
-        check('x = [(yield i) for i in range(3)]', 1, 6)
+        check('x = [(yield i) for i in range(3)]', 1, 5)
         check('def f():\n  from _ import *', 1, 1)
         check('def f(x, x):\n  pass', 1, 1)
         check('def f(x):\n  nonlocal x', 2, 3)
diff --git a/Misc/NEWS.d/next/Core and Builtins/2018-11-21-14-05-51.bpo-31241.Kin10-.rst b/Misc/NEWS.d/next/Core and Builtins/2018-11-21-14-05-51.bpo-31241.Kin10-.rst
new file mode 100644
index 000000000000..a859a9b0d68e
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2018-11-21-14-05-51.bpo-31241.Kin10-.rst	
@@ -0,0 +1,4 @@
+The *lineno* and *col_offset* attributes of AST nodes for list comprehensions,
+generator expressions and tuples are now point to the opening parenthesis or
+square brace. For tuples without parenthesis they point to the position of
+the first item.
diff --git a/Python/ast.c b/Python/ast.c
index 0d78cc511641..24d5843aabd2 100644
--- a/Python/ast.c
+++ b/Python/ast.c
@@ -577,7 +577,8 @@ static stmt_ty ast_for_with_stmt(struct compiling *, const node *, bool);
 static stmt_ty ast_for_for_stmt(struct compiling *, const node *, bool);
 
 /* Note different signature for ast_for_call */
-static expr_ty ast_for_call(struct compiling *, const node *, expr_ty, bool);
+static expr_ty ast_for_call(struct compiling *, const node *, expr_ty,
+                            const node *);
 
 static PyObject *parsenumber(struct compiling *, const char *);
 static expr_ty parsestrplus(struct compiling *, const node *n);
@@ -931,6 +932,16 @@ forbidden_name(struct compiling *c, identifier name, const node *n,
     return 0;
 }
 
+static expr_ty
+copy_location(expr_ty e, const node *n)
+{
+    if (e) {
+        e->lineno = LINENO(n);
+        e->col_offset = n->n_col_offset;
+    }
+    return e;
+}
+
 /* Set the context ctx for expr_ty e, recursively traversing e.
 
    Only sets context for expr kinds that "can appear in assignment context"
@@ -1519,7 +1530,7 @@ ast_for_decorator(struct compiling *c, const node *n)
         name_expr = NULL;
     }
     else {
-        d = ast_for_call(c, CHILD(n, 3), name_expr, true);
+        d = ast_for_call(c, CHILD(n, 3), name_expr, CHILD(n, 2));
         if (!d)
             return NULL;
         name_expr = NULL;
@@ -2129,10 +2140,16 @@ ast_for_atom(struct compiling *c, const node *n)
             return ast_for_expr(c, ch);
 
         /* testlist_comp: test ( comp_for | (',' test)* [','] ) */
-        if ((NCH(ch) > 1) && (TYPE(CHILD(ch, 1)) == comp_for))
-            return ast_for_genexp(c, ch);
+        if (NCH(ch) == 1) {
+            return ast_for_testlist(c, ch);
+        }
 
-        return ast_for_testlist(c, ch);
+        if (TYPE(CHILD(ch, 1)) == comp_for) {
+            return copy_location(ast_for_genexp(c, ch), n);
+        }
+        else {
+            return copy_location(ast_for_testlist(c, ch), n);
+        }
     case LSQB: /* list (or list comprehension) */
         ch = CHILD(n, 1);
 
@@ -2147,8 +2164,9 @@ ast_for_atom(struct compiling *c, const node *n)
 
             return List(elts, Load, LINENO(n), n->n_col_offset, c->c_arena);
         }
-        else
-            return ast_for_listcomp(c, ch);
+        else {
+            return copy_location(ast_for_listcomp(c, ch), n);
+        }
     case LBRACE: {
         /* dictorsetmaker: ( ((test ':' test | '**' test)
          *                    (comp_for | (',' (test ':' test | '**' test))* [','])) |
@@ -2187,11 +2205,7 @@ ast_for_atom(struct compiling *c, const node *n)
                 /* It's a dictionary display. */
                 res = ast_for_dictdisplay(c, ch);
             }
-            if (res) {
-                res->lineno = LINENO(n);
-                res->col_offset = n->n_col_offset;
-            }
-            return res;
+            return copy_location(res, n);
         }
     }
     default:
@@ -2330,7 +2344,7 @@ ast_for_trailer(struct compiling *c, const node *n, expr_ty left_expr)
             return Call(left_expr, NULL, NULL, LINENO(n),
                         n->n_col_offset, c->c_arena);
         else
-            return ast_for_call(c, CHILD(n, 1), left_expr, true);
+            return ast_for_call(c, CHILD(n, 1), left_expr, CHILD(n, 0));
     }
     else if (TYPE(CHILD(n, 0)) == DOT) {
         PyObject *attr_id = NEW_IDENTIFIER(CHILD(n, 1));
@@ -2667,7 +2681,8 @@ ast_for_expr(struct compiling *c, const node *n)
 }
 
 static expr_ty
-ast_for_call(struct compiling *c, const node *n, expr_ty func, bool allowgen)
+ast_for_call(struct compiling *c, const node *n, expr_ty func,
+             const node *maybegenbeg)
 {
     /*
       arglist: argument (',' argument)*  [',']
@@ -2690,7 +2705,7 @@ ast_for_call(struct compiling *c, const node *n, expr_ty func, bool allowgen)
                 nargs++;
             else if (TYPE(CHILD(ch, 1)) == comp_for) {
                 nargs++;
-                if (!allowgen) {
+                if (!maybegenbeg) {
                     ast_error(c, ch, "invalid syntax");
                     return NULL;
                 }
@@ -2775,7 +2790,7 @@ ast_for_call(struct compiling *c, const node *n, expr_ty func, bool allowgen)
             }
             else if (TYPE(CHILD(ch, 1)) == comp_for) {
                 /* the lone generator expression */
-                e = ast_for_genexp(c, ch);
+                e = copy_location(ast_for_genexp(c, ch), maybegenbeg);
                 if (!e)
                     return NULL;
                 asdl_seq_SET(args, nargs++, e);
@@ -3935,7 +3950,7 @@ ast_for_classdef(struct compiling *c, const node *n, asdl_seq *decorator_seq)
         if (!dummy_name)
             return NULL;
         dummy = Name(dummy_name, Load, LINENO(n), n->n_col_offset, c->c_arena);
-        call = ast_for_call(c, CHILD(n, 3), dummy, false);
+        call = ast_for_call(c, CHILD(n, 3), dummy, NULL);
         if (!call)
             return NULL;
     }
diff --git a/Python/importlib_zipimport.h b/Python/importlib_zipimport.h
index 2d6868ec80cf..e00010c11fc9 100644
--- a/Python/importlib_zipimport.h
+++ b/Python/importlib_zipimport.h
@@ -869,207 +869,207 @@ const unsigned char _Py_M__zipimport[] = {
     132,0,0,0,90,6,109,107,116,105,109,101,41,2,218,1,
     100,114,139,0,0,0,114,9,0,0,0,114,9,0,0,0,
     114,10,0,0,0,218,14,95,112,97,114,115,101,95,100,111,
-    115,116,105,109,101,139,2,0,0,115,24,0,0,0,0,1,
+    115,116,105,109,101,139,2,0,0,115,22,0,0,0,0,1,
     4,1,10,1,10,1,6,1,6,1,10,1,10,1,2,0,
-    2,0,2,250,2,255,114,170,0,0,0,99,2,0,0,0,
-    0,0,0,0,6,0,0,0,10,0,0,0,67,0,0,0,
-    115,116,0,0,0,122,82,124,1,100,1,100,0,133,2,25,
-    0,100,2,107,6,115,22,116,0,130,1,124,1,100,0,100,
-    1,133,2,25,0,125,1,124,0,106,1,124,1,25,0,125,
-    2,124,2,100,3,25,0,125,3,124,2,100,4,25,0,125,
-    4,124,2,100,5,25,0,125,5,116,2,124,4,124,3,131,
-    2,124,5,102,2,87,0,83,0,4,0,116,3,116,4,116,
-    5,102,3,107,10,114,110,1,0,1,0,1,0,89,0,100,
-    6,83,0,88,0,100,0,83,0,41,7,78,114,14,0,0,
-    0,169,2,218,1,99,218,1,111,114,164,0,0,0,233,6,
-    0,0,0,233,3,0,0,0,41,2,114,0,0,0,0,114,
-    0,0,0,0,41,6,218,14,65,115,115,101,114,116,105,111,
-    110,69,114,114,111,114,114,28,0,0,0,114,170,0,0,0,
-    114,26,0,0,0,218,10,73,110,100,101,120,69,114,114,111,
-    114,114,155,0,0,0,41,6,114,32,0,0,0,114,13,0,
-    0,0,114,54,0,0,0,114,132,0,0,0,114,133,0,0,
-    0,90,17,117,110,99,111,109,112,114,101,115,115,101,100,95,
-    115,105,122,101,114,9,0,0,0,114,9,0,0,0,114,10,
-    0,0,0,114,152,0,0,0,152,2,0,0,115,20,0,0,
-    0,0,1,2,2,20,1,12,1,10,3,8,1,8,1,8,
-    1,16,1,20,1,114,152,0,0,0,99,2,0,0,0,0,
-    0,0,0,3,0,0,0,8,0,0,0,67,0,0,0,115,
-    86,0,0,0,124,1,100,1,100,0,133,2,25,0,100,2,
-    107,6,115,20,116,0,130,1,124,1,100,0,100,1,133,2,
-    25,0,125,1,122,14,124,0,106,1,124,1,25,0,125,2,
-    87,0,110,22,4,0,116,2,107,10,114,68,1,0,1,0,
-    1,0,89,0,100,0,83,0,88,0,116,3,124,0,106,4,
-    124,2,131,2,83,0,100,0,83,0,41,3,78,114,14,0,
-    0,0,114,171,0,0,0,41,5,114,176,0,0,0,114,28,
-    0,0,0,114,26,0,0,0,114,52,0,0,0,114,29,0,
-    0,0,41,3,114,32,0,0,0,114,13,0,0,0,114,54,
-    0,0,0,114,9,0,0,0,114,9,0,0,0,114,10,0,
-    0,0,114,150,0,0,0,171,2,0,0,115,14,0,0,0,
-    0,2,20,1,12,2,2,1,14,1,14,1,8,2,114,150,
-    0,0,0,99,2,0,0,0,0,0,0,0,11,0,0,0,
-    9,0,0,0,67,0,0,0,115,198,0,0,0,116,0,124,
-    0,124,1,131,2,125,2,116,1,68,0,93,160,92,3,125,
-    3,125,4,125,5,124,2,124,3,23,0,125,6,116,2,106,
-    3,100,1,124,0,106,4,116,5,124,6,100,2,100,3,141,
-    5,1,0,122,14,124,0,106,6,124,6,25,0,125,7,87,
-    0,110,20,4,0,116,7,107,10,114,88,1,0,1,0,1,
-    0,89,0,113,14,88,0,124,7,100,4,25,0,125,8,116,
-    8,124,0,106,4,124,7,131,2,125,9,124,4,114,132,116,
-    9,124,0,124,8,124,6,124,1,124,9,131,5,125,10,110,
-    10,116,10,124,8,124,9,131,2,125,10,124,10,100,0,107,
-    8,114,152,113,14,124,7,100,4,25,0,125,8,124,10,124,
-    5,124,8,102,3,2,0,1,0,83,0,113,14,116,11,100,
-    5,124,1,155,2,157,2,124,1,100,6,141,2,130,1,100,
-    0,83,0,41,7,78,122,13,116,114,121,105,110,103,32,123,
-    125,123,125,123,125,114,86,0,0,0,41,1,90,9,118,101,
-    114,98,111,115,105,116,121,114,0,0,0,0,114,57,0,0,
-    0,114,58,0,0,0,41,12,114,36,0,0,0,114,89,0,
-    0,0,114,76,0,0,0,114,77,0,0,0,114,29,0,0,
-    0,114,20,0,0,0,114,28,0,0,0,114,26,0,0,0,
-    114,52,0,0,0,114,156,0,0,0,114,162,0,0,0,114,
-    3,0,0,0,41,11,114,32,0,0,0,114,38,0,0,0,
-    114,13,0,0,0,114,90,0,0,0,114,91,0,0,0,114,
-    47,0,0,0,114,63,0,0,0,114,54,0,0,0,114,40,
-    0,0,0,114,127,0,0,0,114,46,0,0,0,114,9,0,
-    0,0,114,9,0,0,0,114,10,0,0,0,114,44,0,0,
-    0,186,2,0,0,115,36,0,0,0,0,1,10,1,14,1,
-    8,1,22,1,2,1,14,1,14,1,6,2,8,1,12,1,
-    4,1,18,2,10,1,8,3,2,1,8,1,16,2,114,44,
-    0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,
-    2,0,0,0,64,0,0,0,115,60,0,0,0,101,0,90,
-    1,100,0,90,2,100,1,90,3,100,2,90,4,100,3,100,
-    4,132,0,90,5,100,5,100,6,132,0,90,6,100,7,100,
-    8,132,0,90,7,100,9,100,10,132,0,90,8,100,11,100,
-    12,132,0,90,9,100,13,83,0,41,14,114,80,0,0,0,
-    122,165,80,114,105,118,97,116,101,32,99,108,97,115,115,32,
-    117,115,101,100,32,116,111,32,115,117,112,112,111,114,116,32,
-    90,105,112,73,109,112,111,114,116,46,103,101,116,95,114,101,
-    115,111,117,114,99,101,95,114,101,97,100,101,114,40,41,46,
-    10,10,32,32,32,32,84,104,105,115,32,99,108,97,115,115,
-    32,105,115,32,97,108,108,111,119,101,100,32,116,111,32,114,
-    101,102,101,114,101,110,99,101,32,97,108,108,32,116,104,101,
-    32,105,110,110,97,114,100,115,32,97,110,100,32,112,114,105,
-    118,97,116,101,32,112,97,114,116,115,32,111,102,10,32,32,
-    32,32,116,104,101,32,122,105,112,105,109,112,111,114,116,101,
-    114,46,10,32,32,32,32,70,99,3,0,0,0,0,0,0,
-    0,3,0,0,0,2,0,0,0,67,0,0,0,115,16,0,
-    0,0,124,1,124,0,95,0,124,2,124,0,95,1,100,0,
-    83,0,114,88,0,0,0,41,2,114,4,0,0,0,114,38,
-    0,0,0,41,3,114,32,0,0,0,114,4,0,0,0,114,
-    38,0,0,0,114,9,0,0,0,114,9,0,0,0,114,10,
-    0,0,0,114,34,0,0,0,220,2,0,0,115,4,0,0,
-    0,0,1,6,1,122,33,95,90,105,112,73,109,112,111,114,
-    116,82,101,115,111,117,114,99,101,82,101,97,100,101,114,46,
-    95,95,105,110,105,116,95,95,99,2,0,0,0,0,0,0,
-    0,5,0,0,0,8,0,0,0,67,0,0,0,115,92,0,
-    0,0,124,0,106,0,160,1,100,1,100,2,161,2,125,2,
-    124,2,155,0,100,2,124,1,155,0,157,3,125,3,100,3,
-    100,4,108,2,109,3,125,4,1,0,122,18,124,4,124,0,
-    106,4,160,5,124,3,161,1,131,1,87,0,83,0,4,0,
-    116,6,107,10,114,86,1,0,1,0,1,0,116,7,124,3,
-    131,1,130,1,89,0,110,2,88,0,100,0,83,0,41,5,
-    78,114,85,0,0,0,114,110,0,0,0,114,0,0,0,0,
-    41,1,218,7,66,121,116,101,115,73,79,41,8,114,38,0,
-    0,0,114,19,0,0,0,90,2,105,111,114,178,0,0,0,
-    114,4,0,0,0,114,55,0,0,0,114,22,0,0,0,218,
-    17,70,105,108,101,78,111,116,70,111,117,110,100,69,114,114,
-    111,114,41,5,114,32,0,0,0,218,8,114,101,115,111,117,
-    114,99,101,218,16,102,117,108,108,110,97,109,101,95,97,115,
-    95,112,97,116,104,114,13,0,0,0,114,178,0,0,0,114,
-    9,0,0,0,114,9,0,0,0,114,10,0,0,0,218,13,
-    111,112,101,110,95,114,101,115,111,117,114,99,101,224,2,0,
-    0,115,14,0,0,0,0,1,14,1,14,1,12,1,2,1,
-    18,1,14,1,122,38,95,90,105,112,73,109,112,111,114,116,
-    82,101,115,111,117,114,99,101,82,101,97,100,101,114,46,111,
-    112,101,110,95,114,101,115,111,117,114,99,101,99,2,0,0,
-    0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,
-    0,115,8,0,0,0,116,0,130,1,100,0,83,0,114,88,
-    0,0,0,41,1,114,179,0,0,0,41,2,114,32,0,0,
-    0,114,180,0,0,0,114,9,0,0,0,114,9,0,0,0,
-    114,10,0,0,0,218,13,114,101,115,111,117,114,99,101,95,
-    112,97,116,104,233,2,0,0,115,2,0,0,0,0,4,122,
-    38,95,90,105,112,73,109,112,111,114,116,82,101,115,111,117,
-    114,99,101,82,101,97,100,101,114,46,114,101,115,111,117,114,
-    99,101,95,112,97,116,104,99,2,0,0,0,0,0,0,0,
-    4,0,0,0,8,0,0,0,67,0,0,0,115,72,0,0,
-    0,124,0,106,0,160,1,100,1,100,2,161,2,125,2,124,
-    2,155,0,100,2,124,1,155,0,157,3,125,3,122,16,124,
-    0,106,2,160,3,124,3,161,1,1,0,87,0,110,22,4,
-    0,116,4,107,10,114,66,1,0,1,0,1,0,89,0,100,
-    3,83,0,88,0,100,4,83,0,41,5,78,114,85,0,0,
-    0,114,110,0,0,0,70,84,41,5,114,38,0,0,0,114,
-    19,0,0,0,114,4,0,0,0,114,55,0,0,0,114,22,
-    0,0,0,41,4,114,32,0,0,0,114,59,0,0,0,114,
-    181,0,0,0,114,13,0,0,0,114,9,0,0,0,114,9,
-    0,0,0,114,10,0,0,0,218,11,105,115,95,114,101,115,
-    111,117,114,99,101,239,2,0,0,115,14,0,0,0,0,3,
-    14,1,14,1,2,1,16,1,14,1,8,1,122,36,95,90,
-    105,112,73,109,112,111,114,116,82,101,115,111,117,114,99,101,
-    82,101,97,100,101,114,46,105,115,95,114,101,115,111,117,114,
-    99,101,99,1,0,0,0,0,0,0,0,9,0,0,0,9,
-    0,0,0,99,0,0,0,115,186,0,0,0,100,1,100,2,
-    108,0,109,1,125,1,1,0,124,1,124,0,106,2,160,3,
-    124,0,106,4,161,1,131,1,125,2,124,2,160,5,124,0,
-    106,2,106,6,161,1,125,3,124,3,106,7,100,3,107,2,
-    115,58,116,8,130,1,124,3,106,9,125,4,116,10,131,0,
-    125,5,124,0,106,2,106,11,68,0,93,102,125,6,122,18,
-    124,1,124,6,131,1,160,5,124,4,161,1,125,7,87,0,
-    110,24,4,0,116,12,107,10,114,124,1,0,1,0,1,0,
-    89,0,113,78,89,0,110,2,88,0,124,7,106,9,106,7,
-    125,8,116,13,124,8,131,1,100,1,107,2,114,156,124,7,
-    106,7,86,0,1,0,113,78,124,8,124,5,107,7,114,78,
-    124,5,160,14,124,8,161,1,1,0,124,8,86,0,1,0,
-    113,78,100,0,83,0,41,4,78,114,0,0,0,0,41,1,
-    218,4,80,97,116,104,114,60,0,0,0,41,15,90,7,112,
-    97,116,104,108,105,98,114,185,0,0,0,114,4,0,0,0,
-    114,56,0,0,0,114,38,0,0,0,90,11,114,101,108,97,
-    116,105,118,101,95,116,111,114,29,0,0,0,114,59,0,0,
-    0,114,176,0,0,0,90,6,112,97,114,101,110,116,218,3,
-    115,101,116,114,28,0,0,0,114,23,0,0,0,114,51,0,
-    0,0,218,3,97,100,100,41,9,114,32,0,0,0,114,185,
-    0,0,0,90,13,102,117,108,108,110,97,109,101,95,112,97,
-    116,104,90,13,114,101,108,97,116,105,118,101,95,112,97,116,
-    104,90,12,112,97,99,107,97,103,101,95,112,97,116,104,90,
-    12,115,117,98,100,105,114,115,95,115,101,101,110,218,8,102,
-    105,108,101,110,97,109,101,90,8,114,101,108,97,116,105,118,
-    101,90,11,112,97,114,101,110,116,95,110,97,109,101,114,9,
-    0,0,0,114,9,0,0,0,114,10,0,0,0,218,8,99,
-    111,110,116,101,110,116,115,250,2,0,0,115,34,0,0,0,
-    0,8,12,1,18,1,14,3,14,1,6,1,6,1,12,1,
-    2,1,18,1,14,1,10,5,8,1,12,1,10,1,8,1,
-    10,1,122,33,95,90,105,112,73,109,112,111,114,116,82,101,
-    115,111,117,114,99,101,82,101,97,100,101,114,46,99,111,110,
-    116,101,110,116,115,78,41,10,114,6,0,0,0,114,7,0,
-    0,0,114,8,0,0,0,114,84,0,0,0,114,81,0,0,
-    0,114,34,0,0,0,114,182,0,0,0,114,183,0,0,0,
-    114,184,0,0,0,114,189,0,0,0,114,9,0,0,0,114,
-    9,0,0,0,114,9,0,0,0,114,10,0,0,0,114,80,
-    0,0,0,212,2,0,0,115,14,0,0,0,8,5,4,1,
-    4,2,8,4,8,9,8,6,8,11,114,80,0,0,0,41,
-    45,114,84,0,0,0,90,26,95,102,114,111,122,101,110,95,
-    105,109,112,111,114,116,108,105,98,95,101,120,116,101,114,110,
-    97,108,114,21,0,0,0,114,1,0,0,0,114,2,0,0,
-    0,90,17,95,102,114,111,122,101,110,95,105,109,112,111,114,
-    116,108,105,98,114,76,0,0,0,114,149,0,0,0,114,111,
-    0,0,0,114,153,0,0,0,114,67,0,0,0,114,132,0,
-    0,0,90,7,95,95,97,108,108,95,95,114,20,0,0,0,
-    90,15,112,97,116,104,95,115,101,112,97,114,97,116,111,114,
-    115,114,18,0,0,0,114,75,0,0,0,114,3,0,0,0,
-    114,25,0,0,0,218,4,116,121,112,101,114,70,0,0,0,
-    114,114,0,0,0,114,116,0,0,0,114,118,0,0,0,114,
-    4,0,0,0,114,89,0,0,0,114,36,0,0,0,114,37,
-    0,0,0,114,35,0,0,0,114,27,0,0,0,114,123,0,
-    0,0,114,143,0,0,0,114,145,0,0,0,114,52,0,0,
-    0,114,148,0,0,0,114,156,0,0,0,218,8,95,95,99,
-    111,100,101,95,95,114,154,0,0,0,114,160,0,0,0,114,
-    162,0,0,0,114,170,0,0,0,114,152,0,0,0,114,150,
-    0,0,0,114,44,0,0,0,114,80,0,0,0,114,9,0,
+    2,0,2,249,114,170,0,0,0,99,2,0,0,0,0,0,
+    0,0,6,0,0,0,10,0,0,0,67,0,0,0,115,116,
+    0,0,0,122,82,124,1,100,1,100,0,133,2,25,0,100,
+    2,107,6,115,22,116,0,130,1,124,1,100,0,100,1,133,
+    2,25,0,125,1,124,0,106,1,124,1,25,0,125,2,124,
+    2,100,3,25,0,125,3,124,2,100,4,25,0,125,4,124,
+    2,100,5,25,0,125,5,116,2,124,4,124,3,131,2,124,
+    5,102,2,87,0,83,0,4,0,116,3,116,4,116,5,102,
+    3,107,10,114,110,1,0,1,0,1,0,89,0,100,6,83,
+    0,88,0,100,0,83,0,41,7,78,114,14,0,0,0,169,
+    2,218,1,99,218,1,111,114,164,0,0,0,233,6,0,0,
+    0,233,3,0,0,0,41,2,114,0,0,0,0,114,0,0,
+    0,0,41,6,218,14,65,115,115,101,114,116,105,111,110,69,
+    114,114,111,114,114,28,0,0,0,114,170,0,0,0,114,26,
+    0,0,0,218,10,73,110,100,101,120,69,114,114,111,114,114,
+    155,0,0,0,41,6,114,32,0,0,0,114,13,0,0,0,
+    114,54,0,0,0,114,132,0,0,0,114,133,0,0,0,90,
+    17,117,110,99,111,109,112,114,101,115,115,101,100,95,115,105,
+    122,101,114,9,0,0,0,114,9,0,0,0,114,10,0,0,
+    0,114,152,0,0,0,152,2,0,0,115,20,0,0,0,0,
+    1,2,2,20,1,12,1,10,3,8,1,8,1,8,1,16,
+    1,20,1,114,152,0,0,0,99,2,0,0,0,0,0,0,
+    0,3,0,0,0,8,0,0,0,67,0,0,0,115,86,0,
+    0,0,124,1,100,1,100,0,133,2,25,0,100,2,107,6,
+    115,20,116,0,130,1,124,1,100,0,100,1,133,2,25,0,
+    125,1,122,14,124,0,106,1,124,1,25,0,125,2,87,0,
+    110,22,4,0,116,2,107,10,114,68,1,0,1,0,1,0,
+    89,0,100,0,83,0,88,0,116,3,124,0,106,4,124,2,
+    131,2,83,0,100,0,83,0,41,3,78,114,14,0,0,0,
+    114,171,0,0,0,41,5,114,176,0,0,0,114,28,0,0,
+    0,114,26,0,0,0,114,52,0,0,0,114,29,0,0,0,
+    41,3,114,32,0,0,0,114,13,0,0,0,114,54,0,0,
+    0,114,9,0,0,0,114,9,0,0,0,114,10,0,0,0,
+    114,150,0,0,0,171,2,0,0,115,14,0,0,0,0,2,
+    20,1,12,2,2,1,14,1,14,1,8,2,114,150,0,0,
+    0,99,2,0,0,0,0,0,0,0,11,0,0,0,9,0,
+    0,0,67,0,0,0,115,198,0,0,0,116,0,124,0,124,
+    1,131,2,125,2,116,1,68,0,93,160,92,3,125,3,125,
+    4,125,5,124,2,124,3,23,0,125,6,116,2,106,3,100,
+    1,124,0,106,4,116,5,124,6,100,2,100,3,141,5,1,
+    0,122,14,124,0,106,6,124,6,25,0,125,7,87,0,110,
+    20,4,0,116,7,107,10,114,88,1,0,1,0,1,0,89,
+    0,113,14,88,0,124,7,100,4,25,0,125,8,116,8,124,
+    0,106,4,124,7,131,2,125,9,124,4,114,132,116,9,124,
+    0,124,8,124,6,124,1,124,9,131,5,125,10,110,10,116,
+    10,124,8,124,9,131,2,125,10,124,10,100,0,107,8,114,
+    152,113,14,124,7,100,4,25,0,125,8,124,10,124,5,124,
+    8,102,3,2,0,1,0,83,0,113,14,116,11,100,5,124,
+    1,155,2,157,2,124,1,100,6,141,2,130,1,100,0,83,
+    0,41,7,78,122,13,116,114,121,105,110,103,32,123,125,123,
+    125,123,125,114,86,0,0,0,41,1,90,9,118,101,114,98,
+    111,115,105,116,121,114,0,0,0,0,114,57,0,0,0,114,
+    58,0,0,0,41,12,114,36,0,0,0,114,89,0,0,0,
+    114,76,0,0,0,114,77,0,0,0,114,29,0,0,0,114,
+    20,0,0,0,114,28,0,0,0,114,26,0,0,0,114,52,
+    0,0,0,114,156,0,0,0,114,162,0,0,0,114,3,0,
+    0,0,41,11,114,32,0,0,0,114,38,0,0,0,114,13,
+    0,0,0,114,90,0,0,0,114,91,0,0,0,114,47,0,
+    0,0,114,63,0,0,0,114,54,0,0,0,114,40,0,0,
+    0,114,127,0,0,0,114,46,0,0,0,114,9,0,0,0,
+    114,9,0,0,0,114,10,0,0,0,114,44,0,0,0,186,
+    2,0,0,115,36,0,0,0,0,1,10,1,14,1,8,1,
+    22,1,2,1,14,1,14,1,6,2,8,1,12,1,4,1,
+    18,2,10,1,8,3,2,1,8,1,16,2,114,44,0,0,
+    0,99,0,0,0,0,0,0,0,0,0,0,0,0,2,0,
+    0,0,64,0,0,0,115,60,0,0,0,101,0,90,1,100,
+    0,90,2,100,1,90,3,100,2,90,4,100,3,100,4,132,
+    0,90,5,100,5,100,6,132,0,90,6,100,7,100,8,132,
+    0,90,7,100,9,100,10,132,0,90,8,100,11,100,12,132,
+    0,90,9,100,13,83,0,41,14,114,80,0,0,0,122,165,
+    80,114,105,118,97,116,101,32,99,108,97,115,115,32,117,115,
+    101,100,32,116,111,32,115,117,112,112,111,114,116,32,90,105,
+    112,73,109,112,111,114,116,46,103,101,116,95,114,101,115,111,
+    117,114,99,101,95,114,101,97,100,101,114,40,41,46,10,10,
+    32,32,32,32,84,104,105,115,32,99,108,97,115,115,32,105,
+    115,32,97,108,108,111,119,101,100,32,116,111,32,114,101,102,
+    101,114,101,110,99,101,32,97,108,108,32,116,104,101,32,105,
+    110,110,97,114,100,115,32,97,110,100,32,112,114,105,118,97,
+    116,101,32,112,97,114,116,115,32,111,102,10,32,32,32,32,
+    116,104,101,32,122,105,112,105,109,112,111,114,116,101,114,46,
+    10,32,32,32,32,70,99,3,0,0,0,0,0,0,0,3,
+    0,0,0,2,0,0,0,67,0,0,0,115,16,0,0,0,
+    124,1,124,0,95,0,124,2,124,0,95,1,100,0,83,0,
+    114,88,0,0,0,41,2,114,4,0,0,0,114,38,0,0,
+    0,41,3,114,32,0,0,0,114,4,0,0,0,114,38,0,
     0,0,114,9,0,0,0,114,9,0,0,0,114,10,0,0,
-    0,218,8,60,109,111,100,117,108,101,62,13,0,0,0,115,
-    90,0,0,0,4,4,8,1,16,1,8,1,8,1,8,1,
-    8,1,8,1,8,2,8,3,6,1,14,3,16,4,4,2,
-    8,2,4,1,4,1,4,2,14,127,0,127,0,1,12,1,
-    12,1,2,1,2,253,2,255,2,9,8,4,8,9,8,31,
-    8,126,2,254,2,29,4,5,8,21,8,46,8,10,8,46,
-    10,5,8,7,8,6,8,13,8,19,8,15,8,26,
+    0,114,34,0,0,0,220,2,0,0,115,4,0,0,0,0,
+    1,6,1,122,33,95,90,105,112,73,109,112,111,114,116,82,
+    101,115,111,117,114,99,101,82,101,97,100,101,114,46,95,95,
+    105,110,105,116,95,95,99,2,0,0,0,0,0,0,0,5,
+    0,0,0,8,0,0,0,67,0,0,0,115,92,0,0,0,
+    124,0,106,0,160,1,100,1,100,2,161,2,125,2,124,2,
+    155,0,100,2,124,1,155,0,157,3,125,3,100,3,100,4,
+    108,2,109,3,125,4,1,0,122,18,124,4,124,0,106,4,
+    160,5,124,3,161,1,131,1,87,0,83,0,4,0,116,6,
+    107,10,114,86,1,0,1,0,1,0,116,7,124,3,131,1,
+    130,1,89,0,110,2,88,0,100,0,83,0,41,5,78,114,
+    85,0,0,0,114,110,0,0,0,114,0,0,0,0,41,1,
+    218,7,66,121,116,101,115,73,79,41,8,114,38,0,0,0,
+    114,19,0,0,0,90,2,105,111,114,178,0,0,0,114,4,
+    0,0,0,114,55,0,0,0,114,22,0,0,0,218,17,70,
+    105,108,101,78,111,116,70,111,117,110,100,69,114,114,111,114,
+    41,5,114,32,0,0,0,218,8,114,101,115,111,117,114,99,
+    101,218,16,102,117,108,108,110,97,109,101,95,97,115,95,112,
+    97,116,104,114,13,0,0,0,114,178,0,0,0,114,9,0,
+    0,0,114,9,0,0,0,114,10,0,0,0,218,13,111,112,
+    101,110,95,114,101,115,111,117,114,99,101,224,2,0,0,115,
+    14,0,0,0,0,1,14,1,14,1,12,1,2,1,18,1,
+    14,1,122,38,95,90,105,112,73,109,112,111,114,116,82,101,
+    115,111,117,114,99,101,82,101,97,100,101,114,46,111,112,101,
+    110,95,114,101,115,111,117,114,99,101,99,2,0,0,0,0,
+    0,0,0,2,0,0,0,1,0,0,0,67,0,0,0,115,
+    8,0,0,0,116,0,130,1,100,0,83,0,114,88,0,0,
+    0,41,1,114,179,0,0,0,41,2,114,32,0,0,0,114,
+    180,0,0,0,114,9,0,0,0,114,9,0,0,0,114,10,
+    0,0,0,218,13,114,101,115,111,117,114,99,101,95,112,97,
+    116,104,233,2,0,0,115,2,0,0,0,0,4,122,38,95,
+    90,105,112,73,109,112,111,114,116,82,101,115,111,117,114,99,
+    101,82,101,97,100,101,114,46,114,101,115,111,117,114,99,101,
+    95,112,97,116,104,99,2,0,0,0,0,0,0,0,4,0,
+    0,0,8,0,0,0,67,0,0,0,115,72,0,0,0,124,
+    0,106,0,160,1,100,1,100,2,161,2,125,2,124,2,155,
+    0,100,2,124,1,155,0,157,3,125,3,122,16,124,0,106,
+    2,160,3,124,3,161,1,1,0,87,0,110,22,4,0,116,
+    4,107,10,114,66,1,0,1,0,1,0,89,0,100,3,83,
+    0,88,0,100,4,83,0,41,5,78,114,85,0,0,0,114,
+    110,0,0,0,70,84,41,5,114,38,0,0,0,114,19,0,
+    0,0,114,4,0,0,0,114,55,0,0,0,114,22,0,0,
+    0,41,4,114,32,0,0,0,114,59,0,0,0,114,181,0,
+    0,0,114,13,0,0,0,114,9,0,0,0,114,9,0,0,
+    0,114,10,0,0,0,218,11,105,115,95,114,101,115,111,117,
+    114,99,101,239,2,0,0,115,14,0,0,0,0,3,14,1,
+    14,1,2,1,16,1,14,1,8,1,122,36,95,90,105,112,
+    73,109,112,111,114,116,82,101,115,111,117,114,99,101,82,101,
+    97,100,101,114,46,105,115,95,114,101,115,111,117,114,99,101,
+    99,1,0,0,0,0,0,0,0,9,0,0,0,9,0,0,
+    0,99,0,0,0,115,186,0,0,0,100,1,100,2,108,0,
+    109,1,125,1,1,0,124,1,124,0,106,2,160,3,124,0,
+    106,4,161,1,131,1,125,2,124,2,160,5,124,0,106,2,
+    106,6,161,1,125,3,124,3,106,7,100,3,107,2,115,58,
+    116,8,130,1,124,3,106,9,125,4,116,10,131,0,125,5,
+    124,0,106,2,106,11,68,0,93,102,125,6,122,18,124,1,
+    124,6,131,1,160,5,124,4,161,1,125,7,87,0,110,24,
+    4,0,116,12,107,10,114,124,1,0,1,0,1,0,89,0,
+    113,78,89,0,110,2,88,0,124,7,106,9,106,7,125,8,
+    116,13,124,8,131,1,100,1,107,2,114,156,124,7,106,7,
+    86,0,1,0,113,78,124,8,124,5,107,7,114,78,124,5,
+    160,14,124,8,161,1,1,0,124,8,86,0,1,0,113,78,
+    100,0,83,0,41,4,78,114,0,0,0,0,41,1,218,4,
+    80,97,116,104,114,60,0,0,0,41,15,90,7,112,97,116,
+    104,108,105,98,114,185,0,0,0,114,4,0,0,0,114,56,
+    0,0,0,114,38,0,0,0,90,11,114,101,108,97,116,105,
+    118,101,95,116,111,114,29,0,0,0,114,59,0,0,0,114,
+    176,0,0,0,90,6,112,97,114,101,110,116,218,3,115,101,
+    116,114,28,0,0,0,114,23,0,0,0,114,51,0,0,0,
+    218,3,97,100,100,41,9,114,32,0,0,0,114,185,0,0,
+    0,90,13,102,117,108,108,110,97,109,101,95,112,97,116,104,
+    90,13,114,101,108,97,116,105,118,101,95,112,97,116,104,90,
+    12,112,97,99,107,97,103,101,95,112,97,116,104,90,12,115,
+    117,98,100,105,114,115,95,115,101,101,110,218,8,102,105,108,
+    101,110,97,109,101,90,8,114,101,108,97,116,105,118,101,90,
+    11,112,97,114,101,110,116,95,110,97,109,101,114,9,0,0,
+    0,114,9,0,0,0,114,10,0,0,0,218,8,99,111,110,
+    116,101,110,116,115,250,2,0,0,115,34,0,0,0,0,8,
+    12,1,18,1,14,3,14,1,6,1,6,1,12,1,2,1,
+    18,1,14,1,10,5,8,1,12,1,10,1,8,1,10,1,
+    122,33,95,90,105,112,73,109,112,111,114,116,82,101,115,111,
+    117,114,99,101,82,101,97,100,101,114,46,99,111,110,116,101,
+    110,116,115,78,41,10,114,6,0,0,0,114,7,0,0,0,
+    114,8,0,0,0,114,84,0,0,0,114,81,0,0,0,114,
+    34,0,0,0,114,182,0,0,0,114,183,0,0,0,114,184,
+    0,0,0,114,189,0,0,0,114,9,0,0,0,114,9,0,
+    0,0,114,9,0,0,0,114,10,0,0,0,114,80,0,0,
+    0,212,2,0,0,115,14,0,0,0,8,5,4,1,4,2,
+    8,4,8,9,8,6,8,11,114,80,0,0,0,41,45,114,
+    84,0,0,0,90,26,95,102,114,111,122,101,110,95,105,109,
+    112,111,114,116,108,105,98,95,101,120,116,101,114,110,97,108,
+    114,21,0,0,0,114,1,0,0,0,114,2,0,0,0,90,
+    17,95,102,114,111,122,101,110,95,105,109,112,111,114,116,108,
+    105,98,114,76,0,0,0,114,149,0,0,0,114,111,0,0,
+    0,114,153,0,0,0,114,67,0,0,0,114,132,0,0,0,
+    90,7,95,95,97,108,108,95,95,114,20,0,0,0,90,15,
+    112,97,116,104,95,115,101,112,97,114,97,116,111,114,115,114,
+    18,0,0,0,114,75,0,0,0,114,3,0,0,0,114,25,
+    0,0,0,218,4,116,121,112,101,114,70,0,0,0,114,114,
+    0,0,0,114,116,0,0,0,114,118,0,0,0,114,4,0,
+    0,0,114,89,0,0,0,114,36,0,0,0,114,37,0,0,
+    0,114,35,0,0,0,114,27,0,0,0,114,123,0,0,0,
+    114,143,0,0,0,114,145,0,0,0,114,52,0,0,0,114,
+    148,0,0,0,114,156,0,0,0,218,8,95,95,99,111,100,
+    101,95,95,114,154,0,0,0,114,160,0,0,0,114,162,0,
+    0,0,114,170,0,0,0,114,152,0,0,0,114,150,0,0,
+    0,114,44,0,0,0,114,80,0,0,0,114,9,0,0,0,
+    114,9,0,0,0,114,9,0,0,0,114,10,0,0,0,218,
+    8,60,109,111,100,117,108,101,62,13,0,0,0,115,88,0,
+    0,0,4,4,8,1,16,1,8,1,8,1,8,1,8,1,
+    8,1,8,2,8,3,6,1,14,3,16,4,4,2,8,2,
+    4,1,4,1,4,2,14,127,0,127,0,1,12,1,12,1,
+    2,1,2,252,4,9,8,4,8,9,8,31,8,126,2,254,
+    2,29,4,5,8,21,8,46,8,10,8,46,10,5,8,7,
+    8,6,8,13,8,19,8,15,8,26,
 };



More information about the Python-checkins mailing list