Author: Amaury Forgeot d'Arc <[email protected]>
Branch: py3.3
Changeset: r73872:ec5e03429d1d
Date: 2014-10-09 22:03 +0200
http://bitbucket.org/pypy/pypy/changeset/ec5e03429d1d/
Log: Really validate the ast in compile()...
diff --git a/pypy/module/__builtin__/compiling.py
b/pypy/module/__builtin__/compiling.py
--- a/pypy/module/__builtin__/compiling.py
+++ b/pypy/module/__builtin__/compiling.py
@@ -45,6 +45,7 @@
if space.isinstance_w(w_source, space.gettypeobject(ast.W_AST.typedef)):
ast_node = ast.mod.from_object(space, w_source)
+ ec.compiler.validate_ast(ast_node)
code = ec.compiler.compile_ast(ast_node, filename, mode, flags,
optimize=optimize)
return space.wrap(code)
diff --git a/pypy/module/_ast/test/test_ast.py
b/pypy/module/_ast/test/test_ast.py
--- a/pypy/module/_ast/test/test_ast.py
+++ b/pypy/module/_ast/test/test_ast.py
@@ -449,3 +449,26 @@
empty_yield_from.body[0].body[0].value.value = None
exc = raises(ValueError, compile, empty_yield_from, "<test>", "exec")
assert "field value is required" in str(exc.value)
+
+ def test_compare(self):
+ import ast
+
+ def _mod(mod, msg=None, mode="exec", exc=ValueError):
+ mod.lineno = mod.col_offset = 0
+ ast.fix_missing_locations(mod)
+ exc = raises(exc, compile, mod, "<test>", mode)
+ if msg is not None:
+ assert msg in str(exc.value)
+ def _expr(node, msg=None, exc=ValueError):
+ mod = ast.Module([ast.Expr(node)])
+ _mod(mod, msg, exc=exc)
+ left = ast.Name("x", ast.Load())
+ comp = ast.Compare(left, [ast.In()], [])
+ _expr(comp, "no comparators")
+ comp = ast.Compare(left, [ast.In()], [ast.Num(4), ast.Num(5)])
+ _expr(comp, "different number of comparators and operands")
+ comp = ast.Compare(ast.Num("blah"), [ast.In()], [left])
+ _expr(comp, "non-numeric", exc=TypeError)
+ comp = ast.Compare(left, [ast.In()], [ast.Num("blah")])
+ _expr(comp, "non-numeric", exc=TypeError)
+
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit