Author: Raffael Tfirst <[email protected]>
Branch: py3.5
Changeset: r84667:3d80438bd661
Date: 2016-05-24 21:54 +0200
http://bitbucket.org/pypy/pypy/changeset/3d80438bd661/
Log: Add ast test for unpack in set, add TODO, define STAR as first token
as Set
diff --git a/pypy/interpreter/astcompiler/astbuilder.py
b/pypy/interpreter/astcompiler/astbuilder.py
--- a/pypy/interpreter/astcompiler/astbuilder.py
+++ b/pypy/interpreter/astcompiler/astbuilder.py
@@ -466,6 +466,7 @@
classdef_node.get_column())
call = self.handle_call(classdef_node.get_child(3), call_name)
body = self.handle_suite(classdef_node.get_child(6))
+ #TODO: any order
return ast.ClassDef(
name, call.args, call.keywords, call.starargs, call.kwargs,
body, decorators, classdef_node.get_lineno(),
classdef_node.get_column())
@@ -1198,7 +1199,7 @@
if maker.type == tokens.RBRACE:
return ast.Dict(None, None, atom_node.get_lineno(),
atom_node.get_column())
n_maker_children = maker.num_children()
- if n_maker_children == 1 or maker.get_child(1).type ==
tokens.COMMA:
+ if n_maker_children == 1 or maker.get_child(1).type ==
tokens.COMMA or maker.get_child(0).type == tokens.STAR:
elts = []
for i in range(0, n_maker_children, 2):
elts.append(self.handle_expr(maker.get_child(i)))
diff --git a/pypy/interpreter/astcompiler/test/test_astbuilder.py
b/pypy/interpreter/astcompiler/test/test_astbuilder.py
--- a/pypy/interpreter/astcompiler/test/test_astbuilder.py
+++ b/pypy/interpreter/astcompiler/test/test_astbuilder.py
@@ -732,6 +732,29 @@
assert isinstance(elt, ast.Num)
assert self.space.eq_w(elt.n, self.space.wrap(i))
+ def test_set_unpack(self):
+ s = self.get_first_expr("{*{1}}")
+ assert isinstance(s, ast.Set)
+ assert len(s.elts) == 1
+ sta0 = s.elts[0]
+ assert isinstance(sta0, ast.Starred)
+ s0 = sta0.value
+ assert isinstance(s0, ast.Set)
+ assert len(s0.elts) == 1
+ assert isinstance(s0.elts[0], ast.Num)
+ assert self.space.eq_w(s0.elts[0].n, self.space.wrap(1))
+ s = self.get_first_expr("{*{0, 1, 2, 3, 4, 5}}")
+ assert isinstance(s, ast.Set)
+ assert len(s.elts) == 1
+ sta0 = s.elts[0]
+ assert isinstance(sta0, ast.Starred)
+ s0 = sta0.value
+ assert isinstance(s0, ast.Set)
+ assert len(s0.elts) == 6
+ for i, elt in enumerate(s0.elts):
+ assert isinstance(elt, ast.Num)
+ assert self.space.eq_w(elt.n, self.space.wrap(i))
+
def test_set_context(self):
tup = self.get_ast("(a, b) = c").body[0].targets[0]
assert all(elt.ctx == ast.Store for elt in tup.elts)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit