Author: Amaury Forgeot d'Arc <amaur...@gmail.com> 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 pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit