Author: Matti Picus <matti.pi...@gmail.com> Branch: py3.5 Changeset: r94457:8a3e586cc749 Date: 2018-04-29 20:56 +0300 http://bitbucket.org/pypy/pypy/changeset/8a3e586cc749/
Log: merge default into py3.5 diff --git a/.hgtags b/.hgtags --- a/.hgtags +++ b/.hgtags @@ -51,3 +51,5 @@ 0000000000000000000000000000000000000000 release-pypy3.5-v5.10.0 09f9160b643e3f02ccb8c843b2fbb4e5cbf54082 release-pypy3.5-v5.10.0 3f6eaa010fce78cc7973bdc1dfdb95970f08fed2 release-pypy3.5-v5.10.1 +ab0b9caf307db6592905a80b8faffd69b39005b8 release-pypy2.7-v6.0.0 +fdd60ed87e941677e8ea11acf9f1819466521bf2 release-pypy3.5-v6.0.0 diff --git a/dotviewer/font/NOTICE b/dotviewer/font/COPYING.txt rename from dotviewer/font/NOTICE rename to dotviewer/font/COPYING.txt diff --git a/lib_pypy/_ctypes/array.py b/lib_pypy/_ctypes/array.py --- a/lib_pypy/_ctypes/array.py +++ b/lib_pypy/_ctypes/array.py @@ -81,8 +81,11 @@ def _CData_output(self, resarray, base=None, index=-1): from _rawffi.alt import types # If a char_p or unichar_p is received, skip the string interpretation - if base._ffiargtype != types.Pointer(types.char_p) and \ - base._ffiargtype != types.Pointer(types.unichar_p): + try: + deref = type(base)._deref_ffiargtype() + except AttributeError: + deref = None + if deref != types.char_p and deref != types.unichar_p: # this seems to be a string if we're array of char, surprise! from ctypes import c_char, c_wchar if self._type_ is c_char: @@ -127,6 +130,12 @@ value = self(*value) return _CDataMeta.from_param(self, value) + def _build_ffiargtype(self): + return _ffi.types.Pointer(self._type_.get_ffi_argtype()) + + def _deref_ffiargtype(self): + return self._type_.get_ffi_argtype() + def array_get_slice_params(self, index): if hasattr(self, '_length_'): start, stop, step = index.indices(self._length_) @@ -254,6 +263,5 @@ _type_ = base ) cls = ArrayMeta(name, (Array,), tpdict) - cls._ffiargtype = _ffi.types.Pointer(base.get_ffi_argtype()) ARRAY_CACHE[key] = cls return cls diff --git a/lib_pypy/_ctypes/basics.py b/lib_pypy/_ctypes/basics.py --- a/lib_pypy/_ctypes/basics.py +++ b/lib_pypy/_ctypes/basics.py @@ -49,10 +49,13 @@ else: return self.from_param(as_parameter) + def _build_ffiargtype(self): + return _shape_to_ffi_type(self._ffiargshape_) + def get_ffi_argtype(self): if self._ffiargtype: return self._ffiargtype - self._ffiargtype = _shape_to_ffi_type(self._ffiargshape_) + self._ffiargtype = self._build_ffiargtype() return self._ffiargtype def _CData_output(self, resbuffer, base=None, index=-1): diff --git a/lib_pypy/_ctypes/pointer.py b/lib_pypy/_ctypes/pointer.py --- a/lib_pypy/_ctypes/pointer.py +++ b/lib_pypy/_ctypes/pointer.py @@ -70,7 +70,12 @@ self._ffiarray = ffiarray self.__init__ = __init__ self._type_ = TP - self._ffiargtype = _ffi.types.Pointer(TP.get_ffi_argtype()) + + def _build_ffiargtype(self): + return _ffi.types.Pointer(self._type_.get_ffi_argtype()) + + def _deref_ffiargtype(self): + return self._type_.get_ffi_argtype() from_address = cdata_from_address diff --git a/lib_pypy/_ctypes/structure.py b/lib_pypy/_ctypes/structure.py --- a/lib_pypy/_ctypes/structure.py +++ b/lib_pypy/_ctypes/structure.py @@ -160,6 +160,10 @@ raise AttributeError("_fields_ is final") if self in [f[1] for f in value]: raise AttributeError("Structure or union cannot contain itself") + if self._ffiargtype is not None: + raise NotImplementedError("Too late to set _fields_: we already " + "said to libffi that the structure type %s is opaque" + % (self,)) names_and_fields( self, value, self.__bases__[0], diff --git a/pypy/doc/gc_info.rst b/pypy/doc/gc_info.rst --- a/pypy/doc/gc_info.rst +++ b/pypy/doc/gc_info.rst @@ -152,7 +152,7 @@ to wait until it reaches a point in which the interpreter is in a known state and calling user-defined code is harmless. It might happen that multiple events occur before the hook is invoked: in this case, you can inspect the -value ``stats.count`` to know how many times the event occured since the last +value ``stats.count`` to know how many times the event occurred since the last time the hook was called. Similarly, ``stats.duration`` contains the **total** time spent by the GC for this specific event since the last time the hook was called. @@ -163,7 +163,7 @@ The attributes for ``GcMinorStats`` are: ``count`` - The number of minor collections occured since the last hook call. + The number of minor collections occurred since the last hook call. ``duration`` The total time spent inside minor collections since the last hook diff --git a/pypy/doc/release-v6.0.0.rst b/pypy/doc/release-v6.0.0.rst --- a/pypy/doc/release-v6.0.0.rst +++ b/pypy/doc/release-v6.0.0.rst @@ -8,13 +8,18 @@ the dual release. This release is a feature release following our previous 5.10 incremental -release in late December 2017. Our C-API compatability layer ``cpyext`` is +release in late December 2017. Our C-API compatibility layer ``cpyext`` is now much faster (see the `blog post`_) as well as more complete. We have made many other improvements in speed and CPython compatibility. Since the changes affect the included python development header files, all c-extension modules must be recompiled for this version. -First-time python users are often stumped by silly typos and emissions when +Until we can work with downstream providers to distribute builds with PyPy, we +have made packages for some common packages `available as wheels`_. You may +compile yourself using ``pip install --no-build-isolation <package>``, the +``no-build-isolation`` is currently needed for pip v10. + +First-time python users are often stumped by silly typos and omissions when getting started writing code. We have improved our parser to emit more friendly `syntax errors`_, making PyPy not only faster but more friendly. @@ -60,6 +65,7 @@ .. _`hooks`: gc_info.html#gc-hooks .. _`cffi`: http://cffi.readthedocs.io .. _`cppyy`: https://cppyy.readthedocs.io +.. _`available as wheels`: https://github.com/antocuni/pypy-wheels What is PyPy? ============= @@ -110,7 +116,7 @@ * Fix JIT bugs exposed in the sre module * Improve speed of Python parser, improve ParseError messages and SyntaxError * Handle JIT hooks more efficiently -* Fix a rare GC bug exposed by intensive use of cpyext `Buffer` s +* Fix a rare GC bug exposed by intensive use of cpyext ``Buffer`` s We also refactored many parts of the JIT bridge optimizations, as well as cpyext internals, and together with new contributors fixed issues, added new diff --git a/pypy/module/__builtin__/operation.py b/pypy/module/__builtin__/operation.py --- a/pypy/module/__builtin__/operation.py +++ b/pypy/module/__builtin__/operation.py @@ -137,7 +137,7 @@ """iter(collection) -> iterator over the elements of the collection. iter(callable, sentinel) -> iterator calling callable() until it returns - the sentinal. + the sentinel. """ if w_sentinel is None: return space.iter(w_collection_or_callable) diff --git a/pypy/module/_codecs/interp_codecs.py b/pypy/module/_codecs/interp_codecs.py --- a/pypy/module/_codecs/interp_codecs.py +++ b/pypy/module/_codecs/interp_codecs.py @@ -556,7 +556,7 @@ to the default encoding. errors may be given to set a different error handling scheme. Default is 'strict' meaning that encoding errors raise a ValueError. Other possible values are 'ignore' and 'replace' - as well as any other name registerd with codecs.register_error that is + as well as any other name registered with codecs.register_error that is able to handle ValueErrors. """ if w_encoding is None: diff --git a/pypy/module/_cppyy/test/test_datatypes.py b/pypy/module/_cppyy/test/test_datatypes.py --- a/pypy/module/_cppyy/test/test_datatypes.py +++ b/pypy/module/_cppyy/test/test_datatypes.py @@ -476,7 +476,7 @@ assert c.get_valid_string('aap') == 'aap' #assert c.get_invalid_string() == '' - def test12_copy_contructor(self): + def test12_copy_constructor(self): """Test copy constructor""" import _cppyy as cppyy diff --git a/pypy/module/itertools/interp_itertools.py b/pypy/module/itertools/interp_itertools.py --- a/pypy/module/itertools/interp_itertools.py +++ b/pypy/module/itertools/interp_itertools.py @@ -538,7 +538,7 @@ def chain_from_iterable(space, w_cls, w_arg): """chain.from_iterable(iterable) --> chain object - Alternate chain() contructor taking a single iterable argument + Alternate chain() constructor taking a single iterable argument that evaluates lazily.""" r = space.allocate_instance(W_Chain, w_cls) r.__init__(space, space.iter(w_arg)) diff --git a/pypy/module/micronumpy/ndarray.py b/pypy/module/micronumpy/ndarray.py --- a/pypy/module/micronumpy/ndarray.py +++ b/pypy/module/micronumpy/ndarray.py @@ -820,7 +820,7 @@ if (axis1 < 0 or axis2 < 0 or axis1 >= self.ndims() or axis2 >= self.ndims()): raise oefmt(space.w_ValueError, - "axis1(=%d) and axis2(=%d) must be withing range " + "axis1(=%d) and axis2(=%d) must be within range " "(ndim=%d)", axis1, axis2, self.ndims()) if axis1 == axis2: raise oefmt(space.w_ValueError, diff --git a/pypy/module/test_lib_pypy/ctypes_tests/test_numbers.py b/pypy/module/test_lib_pypy/ctypes_tests/test_numbers.py --- a/pypy/module/test_lib_pypy/ctypes_tests/test_numbers.py +++ b/pypy/module/test_lib_pypy/ctypes_tests/test_numbers.py @@ -62,7 +62,7 @@ assert t(h).value == h def test_typeerror(self): - # Only numbers are allowed in the contructor, + # Only numbers are allowed in the constructor, # otherwise TypeError is raised for t in signed_types + unsigned_types + float_types: with pytest.raises(TypeError): diff --git a/pypy/module/test_lib_pypy/ctypes_tests/test_pointers.py b/pypy/module/test_lib_pypy/ctypes_tests/test_pointers.py --- a/pypy/module/test_lib_pypy/ctypes_tests/test_pointers.py +++ b/pypy/module/test_lib_pypy/ctypes_tests/test_pointers.py @@ -272,3 +272,18 @@ base = cast(d, c_void_p).value for i in [0, 1, 4, 1444, -10293]: assert cast(byref(c, i), c_void_p).value == base + i + + def test_issue2813_fix(self): + class C(Structure): + pass + POINTER(C) + C._fields_ = [('x', c_int)] + ffitype = C.get_ffi_argtype() + assert C.get_ffi_argtype() is ffitype + assert ffitype.sizeof() == sizeof(c_int) + + def test_issue2813_cant_change_fields_after_get_ffi_argtype(self): + class C(Structure): + pass + ffitype = C.get_ffi_argtype() + raises(NotImplementedError, "C._fields_ = [('x', c_int)]") diff --git a/rpython/jit/backend/llsupport/rewrite.py b/rpython/jit/backend/llsupport/rewrite.py --- a/rpython/jit/backend/llsupport/rewrite.py +++ b/rpython/jit/backend/llsupport/rewrite.py @@ -63,7 +63,7 @@ def remember_known_length(self, op, val): self._known_lengths[op] = val - def remember_setarrayitem_occured(self, op, index): + def remember_setarrayitem_occurred(self, op, index): op = self.get_box_replacement(op) try: subs = self._setarrayitems_occurred[op] @@ -456,7 +456,7 @@ array_box = op.getarg(0) index_box = op.getarg(1) if not isinstance(array_box, ConstPtr) and index_box.is_constant(): - self.remember_setarrayitem_occured(array_box, index_box.getint()) + self.remember_setarrayitem_occurred(array_box, index_box.getint()) def clear_varsize_gc_fields(self, kind, descr, result, v_length, opnum): if self.gc_ll_descr.malloc_zero_filled: diff --git a/rpython/jit/backend/zarch/opassembler.py b/rpython/jit/backend/zarch/opassembler.py --- a/rpython/jit/backend/zarch/opassembler.py +++ b/rpython/jit/backend/zarch/opassembler.py @@ -74,7 +74,7 @@ mc.MLGR(lr, l1) mc.LGHI(r.SCRATCH, l.imm(-1)) mc.RISBG(r.SCRATCH, r.SCRATCH, l.imm(0), l.imm(0x80 | 0), l.imm(0)) - # is the value greater than 2**63 ? then an overflow occured + # is the value greater than 2**63 ? then an overflow occurred jmp_xor_lq_overflow = mc.get_relative_pos() mc.reserve_cond_jump() # CLGRJ lq > 0x8000 ... 00 -> (label_overflow) jmp_xor_lr_overflow = mc.get_relative_pos() diff --git a/rpython/rlib/rvmprof/src/shared/vmp_stack.c b/rpython/rlib/rvmprof/src/shared/vmp_stack.c --- a/rpython/rlib/rvmprof/src/shared/vmp_stack.c +++ b/rpython/rlib/rvmprof/src/shared/vmp_stack.c @@ -214,7 +214,7 @@ ret = unw_getcontext(&uc); if (ret < 0) { // could not initialize lib unwind cursor and context - fprintf(stderr, "WARNING: unw_getcontext did not retreive context, switching to python profiling mode \n"); + fprintf(stderr, "WARNING: unw_getcontext did not retrieve context, switching to python profiling mode \n"); vmp_native_disable(); return vmp_walk_and_record_python_stack_only(frame, result, max_depth, 0, pc); } diff --git a/rpython/rtyper/rpbc.py b/rpython/rtyper/rpbc.py --- a/rpython/rtyper/rpbc.py +++ b/rpython/rtyper/rpbc.py @@ -999,7 +999,7 @@ classdef.has_no_attrs()): # special case for instanciating simple built-in # exceptions: always return the same prebuilt instance, - # and ignore any arguments passed to the contructor. + # and ignore any arguments passed to the constructor. r_instance = rclass.getinstancerepr(hop.rtyper, classdef) example = r_instance.get_reusable_prebuilt_instance() hop.exception_cannot_occur() diff --git a/rpython/translator/c/extfunc.py b/rpython/translator/c/extfunc.py --- a/rpython/translator/c/extfunc.py +++ b/rpython/translator/c/extfunc.py @@ -17,7 +17,7 @@ yield ('RPYTHON_EXCEPTION_MATCH', exceptiondata.fn_exception_match) yield ('RPYTHON_TYPE_OF_EXC_INST', exceptiondata.fn_type_of_exc_inst) - yield ('RPyExceptionOccurred1', exctransformer.rpyexc_occured_ptr.value) + yield ('RPyExceptionOccurred1', exctransformer.rpyexc_occurred_ptr.value) yield ('RPyFetchExceptionType', exctransformer.rpyexc_fetch_type_ptr.value) yield ('RPyFetchExceptionValue', exctransformer.rpyexc_fetch_value_ptr.value) yield ('RPyClearException', exctransformer.rpyexc_clear_ptr.value) diff --git a/rpython/translator/exceptiontransform.py b/rpython/translator/exceptiontransform.py --- a/rpython/translator/exceptiontransform.py +++ b/rpython/translator/exceptiontransform.py @@ -66,7 +66,7 @@ assertion_error_ll_exc_type) self.c_n_i_error_ll_exc_type = constant_value(n_i_error_ll_exc_type) - def rpyexc_occured(): + def rpyexc_occurred(): exc_type = exc_data.exc_type return bool(exc_type) @@ -109,9 +109,9 @@ exc_data.exc_type = ll_inst_type(evalue) exc_data.exc_value = evalue - self.rpyexc_occured_ptr = self.build_func( + self.rpyexc_occurred_ptr = self.build_func( "RPyExceptionOccurred", - rpyexc_occured, + rpyexc_occurred, [], lltype.Bool) self.rpyexc_fetch_type_ptr = self.build_func( _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit