Author: Amaury Forgeot d'Arc <[email protected]>
Branch: py3.6
Changeset: r93378:4fc91603abd7
Date: 2017-12-11 23:18 +0100
http://bitbucket.org/pypy/pypy/changeset/4fc91603abd7/
Log: Match CPython exception for bad lineno or col_offset: always
ValueError.
diff --git a/pypy/interpreter/astcompiler/ast.py
b/pypy/interpreter/astcompiler/ast.py
--- a/pypy/interpreter/astcompiler/ast.py
+++ b/pypy/interpreter/astcompiler/ast.py
@@ -28,6 +28,12 @@
w_obj = space.w_None
return w_obj
+def obj_to_int(space, w_value):
+ if not space.isinstance_w(w_value, space.w_long):
+ raise oefmt(space.w_ValueError,
+ "invalid integer value: %R", w_value)
+ return space.int_w(w_value)
+
class AST(object):
__metaclass__ = extendabletype
@@ -444,8 +450,8 @@
decorator_list_w = space.unpackiterable(w_decorator_list)
_decorator_list = [expr.from_object(space, w_item) for w_item in
decorator_list_w]
_returns = expr.from_object(space, w_returns)
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return FunctionDef(_name, _args, _body, _decorator_list, _returns,
_lineno, _col_offset)
State.ast_type('FunctionDef', 'stmt', ['name', 'args', 'body',
'decorator_list', 'returns'])
@@ -524,8 +530,8 @@
decorator_list_w = space.unpackiterable(w_decorator_list)
_decorator_list = [expr.from_object(space, w_item) for w_item in
decorator_list_w]
_returns = expr.from_object(space, w_returns)
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return AsyncFunctionDef(_name, _args, _body, _decorator_list,
_returns, _lineno, _col_offset)
State.ast_type('AsyncFunctionDef', 'stmt', ['name', 'args', 'body',
'decorator_list', 'returns'])
@@ -617,8 +623,8 @@
_body = [stmt.from_object(space, w_item) for w_item in body_w]
decorator_list_w = space.unpackiterable(w_decorator_list)
_decorator_list = [expr.from_object(space, w_item) for w_item in
decorator_list_w]
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return ClassDef(_name, _bases, _keywords, _body, _decorator_list,
_lineno, _col_offset)
State.ast_type('ClassDef', 'stmt', ['name', 'bases', 'keywords', 'body',
'decorator_list'])
@@ -654,8 +660,8 @@
w_lineno = get_field(space, w_node, 'lineno', False)
w_col_offset = get_field(space, w_node, 'col_offset', False)
_value = expr.from_object(space, w_value)
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return Return(_value, _lineno, _col_offset)
State.ast_type('Return', 'stmt', ['value'])
@@ -698,8 +704,8 @@
w_col_offset = get_field(space, w_node, 'col_offset', False)
targets_w = space.unpackiterable(w_targets)
_targets = [expr.from_object(space, w_item) for w_item in targets_w]
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return Delete(_targets, _lineno, _col_offset)
State.ast_type('Delete', 'stmt', ['targets'])
@@ -750,8 +756,8 @@
_value = expr.from_object(space, w_value)
if _value is None:
raise_required_value(space, w_node, 'value')
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return Assign(_targets, _value, _lineno, _col_offset)
State.ast_type('Assign', 'stmt', ['targets', 'value'])
@@ -803,8 +809,8 @@
_value = expr.from_object(space, w_value)
if _value is None:
raise_required_value(space, w_node, 'value')
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return AugAssign(_target, _op, _value, _lineno, _col_offset)
State.ast_type('AugAssign', 'stmt', ['target', 'op', 'value'])
@@ -877,8 +883,8 @@
_body = [stmt.from_object(space, w_item) for w_item in body_w]
orelse_w = space.unpackiterable(w_orelse)
_orelse = [stmt.from_object(space, w_item) for w_item in orelse_w]
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return For(_target, _iter, _body, _orelse, _lineno, _col_offset)
State.ast_type('For', 'stmt', ['target', 'iter', 'body', 'orelse'])
@@ -951,8 +957,8 @@
_body = [stmt.from_object(space, w_item) for w_item in body_w]
orelse_w = space.unpackiterable(w_orelse)
_orelse = [stmt.from_object(space, w_item) for w_item in orelse_w]
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return AsyncFor(_target, _iter, _body, _orelse, _lineno, _col_offset)
State.ast_type('AsyncFor', 'stmt', ['target', 'iter', 'body', 'orelse'])
@@ -1017,8 +1023,8 @@
_body = [stmt.from_object(space, w_item) for w_item in body_w]
orelse_w = space.unpackiterable(w_orelse)
_orelse = [stmt.from_object(space, w_item) for w_item in orelse_w]
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return While(_test, _body, _orelse, _lineno, _col_offset)
State.ast_type('While', 'stmt', ['test', 'body', 'orelse'])
@@ -1083,8 +1089,8 @@
_body = [stmt.from_object(space, w_item) for w_item in body_w]
orelse_w = space.unpackiterable(w_orelse)
_orelse = [stmt.from_object(space, w_item) for w_item in orelse_w]
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return If(_test, _body, _orelse, _lineno, _col_offset)
State.ast_type('If', 'stmt', ['test', 'body', 'orelse'])
@@ -1141,8 +1147,8 @@
_items = [withitem.from_object(space, w_item) for w_item in items_w]
body_w = space.unpackiterable(w_body)
_body = [stmt.from_object(space, w_item) for w_item in body_w]
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return With(_items, _body, _lineno, _col_offset)
State.ast_type('With', 'stmt', ['items', 'body'])
@@ -1199,8 +1205,8 @@
_items = [withitem.from_object(space, w_item) for w_item in items_w]
body_w = space.unpackiterable(w_body)
_body = [stmt.from_object(space, w_item) for w_item in body_w]
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return AsyncWith(_items, _body, _lineno, _col_offset)
State.ast_type('AsyncWith', 'stmt', ['items', 'body'])
@@ -1243,8 +1249,8 @@
w_col_offset = get_field(space, w_node, 'col_offset', False)
_exc = expr.from_object(space, w_exc)
_cause = expr.from_object(space, w_cause)
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return Raise(_exc, _cause, _lineno, _col_offset)
State.ast_type('Raise', 'stmt', ['exc', 'cause'])
@@ -1329,8 +1335,8 @@
_orelse = [stmt.from_object(space, w_item) for w_item in orelse_w]
finalbody_w = space.unpackiterable(w_finalbody)
_finalbody = [stmt.from_object(space, w_item) for w_item in
finalbody_w]
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return Try(_body, _handlers, _orelse, _finalbody, _lineno, _col_offset)
State.ast_type('Try', 'stmt', ['body', 'handlers', 'orelse', 'finalbody'])
@@ -1374,8 +1380,8 @@
if _test is None:
raise_required_value(space, w_node, 'test')
_msg = expr.from_object(space, w_msg)
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return Assert(_test, _msg, _lineno, _col_offset)
State.ast_type('Assert', 'stmt', ['test', 'msg'])
@@ -1418,8 +1424,8 @@
w_col_offset = get_field(space, w_node, 'col_offset', False)
names_w = space.unpackiterable(w_names)
_names = [alias.from_object(space, w_item) for w_item in names_w]
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return Import(_names, _lineno, _col_offset)
State.ast_type('Import', 'stmt', ['names'])
@@ -1471,9 +1477,9 @@
_module = space.text_or_none_w(w_module)
names_w = space.unpackiterable(w_names)
_names = [alias.from_object(space, w_item) for w_item in names_w]
- _level = space.int_w(w_level)
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _level = obj_to_int(space, w_level)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return ImportFrom(_module, _names, _level, _lineno, _col_offset)
State.ast_type('ImportFrom', 'stmt', ['module', 'names', 'level'])
@@ -1512,8 +1518,8 @@
w_col_offset = get_field(space, w_node, 'col_offset', False)
names_w = space.unpackiterable(w_names)
_names = [space.text_w(w_item) for w_item in names_w]
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return Global(_names, _lineno, _col_offset)
State.ast_type('Global', 'stmt', ['names'])
@@ -1552,8 +1558,8 @@
w_col_offset = get_field(space, w_node, 'col_offset', False)
names_w = space.unpackiterable(w_names)
_names = [space.text_w(w_item) for w_item in names_w]
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return Nonlocal(_names, _lineno, _col_offset)
State.ast_type('Nonlocal', 'stmt', ['names'])
@@ -1590,8 +1596,8 @@
_value = expr.from_object(space, w_value)
if _value is None:
raise_required_value(space, w_node, 'value')
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return Expr(_value, _lineno, _col_offset)
State.ast_type('Expr', 'stmt', ['value'])
@@ -1620,8 +1626,8 @@
def from_object(space, w_node):
w_lineno = get_field(space, w_node, 'lineno', False)
w_col_offset = get_field(space, w_node, 'col_offset', False)
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return Pass(_lineno, _col_offset)
State.ast_type('Pass', 'stmt', [])
@@ -1650,8 +1656,8 @@
def from_object(space, w_node):
w_lineno = get_field(space, w_node, 'lineno', False)
w_col_offset = get_field(space, w_node, 'col_offset', False)
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return Break(_lineno, _col_offset)
State.ast_type('Break', 'stmt', [])
@@ -1680,8 +1686,8 @@
def from_object(space, w_node):
w_lineno = get_field(space, w_node, 'lineno', False)
w_col_offset = get_field(space, w_node, 'col_offset', False)
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return Continue(_lineno, _col_offset)
State.ast_type('Continue', 'stmt', [])
@@ -1805,8 +1811,8 @@
raise_required_value(space, w_node, 'op')
values_w = space.unpackiterable(w_values)
_values = [expr.from_object(space, w_item) for w_item in values_w]
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return BoolOp(_op, _values, _lineno, _col_offset)
State.ast_type('BoolOp', 'expr', ['op', 'values'])
@@ -1858,8 +1864,8 @@
_right = expr.from_object(space, w_right)
if _right is None:
raise_required_value(space, w_node, 'right')
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return BinOp(_left, _op, _right, _lineno, _col_offset)
State.ast_type('BinOp', 'expr', ['left', 'op', 'right'])
@@ -1903,8 +1909,8 @@
_operand = expr.from_object(space, w_operand)
if _operand is None:
raise_required_value(space, w_node, 'operand')
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return UnaryOp(_op, _operand, _lineno, _col_offset)
State.ast_type('UnaryOp', 'expr', ['op', 'operand'])
@@ -1949,8 +1955,8 @@
_body = expr.from_object(space, w_body)
if _body is None:
raise_required_value(space, w_node, 'body')
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return Lambda(_args, _body, _lineno, _col_offset)
State.ast_type('Lambda', 'expr', ['args', 'body'])
@@ -2003,8 +2009,8 @@
_orelse = expr.from_object(space, w_orelse)
if _orelse is None:
raise_required_value(space, w_node, 'orelse')
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return IfExp(_test, _body, _orelse, _lineno, _col_offset)
State.ast_type('IfExp', 'expr', ['test', 'body', 'orelse'])
@@ -2061,8 +2067,8 @@
_keys = [expr.from_object(space, w_item) for w_item in keys_w]
values_w = space.unpackiterable(w_values)
_values = [expr.from_object(space, w_item) for w_item in values_w]
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return Dict(_keys, _values, _lineno, _col_offset)
State.ast_type('Dict', 'expr', ['keys', 'values'])
@@ -2105,8 +2111,8 @@
w_col_offset = get_field(space, w_node, 'col_offset', False)
elts_w = space.unpackiterable(w_elts)
_elts = [expr.from_object(space, w_item) for w_item in elts_w]
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return Set(_elts, _lineno, _col_offset)
State.ast_type('Set', 'expr', ['elts'])
@@ -2157,8 +2163,8 @@
raise_required_value(space, w_node, 'elt')
generators_w = space.unpackiterable(w_generators)
_generators = [comprehension.from_object(space, w_item) for w_item in
generators_w]
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return ListComp(_elt, _generators, _lineno, _col_offset)
State.ast_type('ListComp', 'expr', ['elt', 'generators'])
@@ -2209,8 +2215,8 @@
raise_required_value(space, w_node, 'elt')
generators_w = space.unpackiterable(w_generators)
_generators = [comprehension.from_object(space, w_item) for w_item in
generators_w]
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return SetComp(_elt, _generators, _lineno, _col_offset)
State.ast_type('SetComp', 'expr', ['elt', 'generators'])
@@ -2269,8 +2275,8 @@
raise_required_value(space, w_node, 'value')
generators_w = space.unpackiterable(w_generators)
_generators = [comprehension.from_object(space, w_item) for w_item in
generators_w]
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return DictComp(_key, _value, _generators, _lineno, _col_offset)
State.ast_type('DictComp', 'expr', ['key', 'value', 'generators'])
@@ -2321,8 +2327,8 @@
raise_required_value(space, w_node, 'elt')
generators_w = space.unpackiterable(w_generators)
_generators = [comprehension.from_object(space, w_item) for w_item in
generators_w]
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return GeneratorExp(_elt, _generators, _lineno, _col_offset)
State.ast_type('GeneratorExp', 'expr', ['elt', 'generators'])
@@ -2359,8 +2365,8 @@
_value = expr.from_object(space, w_value)
if _value is None:
raise_required_value(space, w_node, 'value')
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return Await(_value, _lineno, _col_offset)
State.ast_type('Await', 'expr', ['value'])
@@ -2396,8 +2402,8 @@
w_lineno = get_field(space, w_node, 'lineno', False)
w_col_offset = get_field(space, w_node, 'col_offset', False)
_value = expr.from_object(space, w_value)
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return Yield(_value, _lineno, _col_offset)
State.ast_type('Yield', 'expr', ['value'])
@@ -2434,8 +2440,8 @@
_value = expr.from_object(space, w_value)
if _value is None:
raise_required_value(space, w_node, 'value')
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return YieldFrom(_value, _lineno, _col_offset)
State.ast_type('YieldFrom', 'expr', ['value'])
@@ -2496,8 +2502,8 @@
_ops = [cmpop.from_object(space, w_item) for w_item in ops_w]
comparators_w = space.unpackiterable(w_comparators)
_comparators = [expr.from_object(space, w_item) for w_item in
comparators_w]
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return Compare(_left, _ops, _comparators, _lineno, _col_offset)
State.ast_type('Compare', 'expr', ['left', 'ops', 'comparators'])
@@ -2562,8 +2568,8 @@
_args = [expr.from_object(space, w_item) for w_item in args_w]
keywords_w = space.unpackiterable(w_keywords)
_keywords = [keyword.from_object(space, w_item) for w_item in
keywords_w]
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return Call(_func, _args, _keywords, _lineno, _col_offset)
State.ast_type('Call', 'expr', ['func', 'args', 'keywords'])
@@ -2599,8 +2605,8 @@
_n = w_n
if _n is None:
raise_required_value(space, w_node, 'n')
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return Num(_n, _lineno, _col_offset)
State.ast_type('Num', 'expr', ['n'])
@@ -2636,8 +2642,8 @@
_s = check_string(space, w_s)
if _s is None:
raise_required_value(space, w_node, 's')
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return Str(_s, _lineno, _col_offset)
State.ast_type('Str', 'expr', ['s'])
@@ -2684,10 +2690,10 @@
_value = expr.from_object(space, w_value)
if _value is None:
raise_required_value(space, w_node, 'value')
- _conversion = space.int_w(w_conversion)
+ _conversion = obj_to_int(space, w_conversion)
_format_spec = expr.from_object(space, w_format_spec)
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return FormattedValue(_value, _conversion, _format_spec, _lineno,
_col_offset)
State.ast_type('FormattedValue', 'expr', ['value', 'conversion',
'format_spec'])
@@ -2730,8 +2736,8 @@
w_col_offset = get_field(space, w_node, 'col_offset', False)
values_w = space.unpackiterable(w_values)
_values = [expr.from_object(space, w_item) for w_item in values_w]
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return JoinedStr(_values, _lineno, _col_offset)
State.ast_type('JoinedStr', 'expr', ['values'])
@@ -2767,8 +2773,8 @@
_s = check_string(space, w_s)
if _s is None:
raise_required_value(space, w_node, 's')
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return Bytes(_s, _lineno, _col_offset)
State.ast_type('Bytes', 'expr', ['s'])
@@ -2804,8 +2810,8 @@
_value = w_value
if _value is None:
raise_required_value(space, w_node, 'value')
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return NameConstant(_value, _lineno, _col_offset)
State.ast_type('NameConstant', 'expr', ['value'])
@@ -2834,8 +2840,8 @@
def from_object(space, w_node):
w_lineno = get_field(space, w_node, 'lineno', False)
w_col_offset = get_field(space, w_node, 'col_offset', False)
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return Ellipsis(_lineno, _col_offset)
State.ast_type('Ellipsis', 'expr', [])
@@ -2871,8 +2877,8 @@
_value = w_value
if _value is None:
raise_required_value(space, w_node, 'value')
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return Constant(_value, _lineno, _col_offset)
State.ast_type('Constant', 'expr', ['value'])
@@ -2923,8 +2929,8 @@
_ctx = expr_context.from_object(space, w_ctx)
if _ctx is None:
raise_required_value(space, w_node, 'ctx')
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return Attribute(_value, _attr, _ctx, _lineno, _col_offset)
State.ast_type('Attribute', 'expr', ['value', 'attr', 'ctx'])
@@ -2976,8 +2982,8 @@
_ctx = expr_context.from_object(space, w_ctx)
if _ctx is None:
raise_required_value(space, w_node, 'ctx')
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return Subscript(_value, _slice, _ctx, _lineno, _col_offset)
State.ast_type('Subscript', 'expr', ['value', 'slice', 'ctx'])
@@ -3021,8 +3027,8 @@
_ctx = expr_context.from_object(space, w_ctx)
if _ctx is None:
raise_required_value(space, w_node, 'ctx')
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return Starred(_value, _ctx, _lineno, _col_offset)
State.ast_type('Starred', 'expr', ['value', 'ctx'])
@@ -3065,8 +3071,8 @@
_ctx = expr_context.from_object(space, w_ctx)
if _ctx is None:
raise_required_value(space, w_node, 'ctx')
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return Name(_id, _ctx, _lineno, _col_offset)
State.ast_type('Name', 'expr', ['id', 'ctx'])
@@ -3116,8 +3122,8 @@
_ctx = expr_context.from_object(space, w_ctx)
if _ctx is None:
raise_required_value(space, w_node, 'ctx')
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return List(_elts, _ctx, _lineno, _col_offset)
State.ast_type('List', 'expr', ['elts', 'ctx'])
@@ -3167,8 +3173,8 @@
_ctx = expr_context.from_object(space, w_ctx)
if _ctx is None:
raise_required_value(space, w_node, 'ctx')
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return Tuple(_elts, _ctx, _lineno, _col_offset)
State.ast_type('Tuple', 'expr', ['elts', 'ctx'])
@@ -3780,8 +3786,8 @@
_name = space.text_or_none_w(w_name)
body_w = space.unpackiterable(w_body)
_body = [stmt.from_object(space, w_item) for w_item in body_w]
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return ExceptHandler(_type, _name, _body, _lineno, _col_offset)
State.ast_type('ExceptHandler', 'excepthandler', ['type', 'name', 'body'])
@@ -3915,8 +3921,8 @@
if _arg is None:
raise_required_value(space, w_node, 'arg')
_annotation = expr.from_object(space, w_annotation)
- _lineno = space.int_w(w_lineno)
- _col_offset = space.int_w(w_col_offset)
+ _lineno = obj_to_int(space, w_lineno)
+ _col_offset = obj_to_int(space, w_col_offset)
return arg(_arg, _annotation, _lineno, _col_offset)
State.ast_type('arg', 'AST', ['arg', 'annotation'], ['lineno', 'col_offset'])
diff --git a/pypy/interpreter/astcompiler/tools/asdl_py.py
b/pypy/interpreter/astcompiler/tools/asdl_py.py
--- a/pypy/interpreter/astcompiler/tools/asdl_py.py
+++ b/pypy/interpreter/astcompiler/tools/asdl_py.py
@@ -165,7 +165,7 @@
return "space.text_or_none_w(%s)" % (value,)
return "space.text_w(%s)" % (value,)
elif field.type in ("int",):
- return "space.int_w(%s)" % (value,)
+ return "obj_to_int(space, %s)" % (value,)
elif field.type in ("bool",):
return "space.bool_w(%s)" % (value,)
else:
@@ -457,6 +457,12 @@
w_obj = space.w_None
return w_obj
+def obj_to_int(space, w_value):
+ if not space.isinstance_w(w_value, space.w_long):
+ raise oefmt(space.w_ValueError,
+ "invalid integer value: %R", w_value)
+ return space.int_w(w_value)
+
class AST(object):
__metaclass__ = extendabletype
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
@@ -84,6 +84,16 @@
imp.level = 3
assert imp.level == 3
+ def test_bad_int(self):
+ ast = self.ast
+ body = [ast.ImportFrom(module='time',
+ names=[ast.alias(name='sleep')],
+ level=None,
+ lineno=None, col_offset=None)]
+ mod = ast.Module(body)
+ exc = raises(ValueError, compile, mod, 'test', 'exec')
+ assert str(exc.value) == "invalid integer value: None"
+
def test_identifier(self):
ast = self.ast
name = ast.Name("name_word", ast.Load())
@@ -114,13 +124,12 @@
assert alias.name == 'mod' + expected
assert alias.asname == expected
- @py.test.mark.skipif("py.test.config.option.runappdirect")
def test_object(self):
ast = self.ast
- const = ast.Const(4)
- assert const.obj == 4
- const.obj = 5
- assert const.obj == 5
+ const = ast.Constant(4)
+ assert const.value == 4
+ const.value = 5
+ assert const.value == 5
def test_optional(self):
mod = self.get_ast("x(32)", "eval")
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit