Author: mattip <matti.pi...@gmail.com> Branch: release-2.6.x Changeset: r79073:a462c08f1782 Date: 2015-08-19 20:57 +0300 http://bitbucket.org/pypy/pypy/changeset/a462c08f1782/
Log: merge default into release diff --git a/pypy/doc/whatsnew-head.rst b/pypy/doc/whatsnew-2.6.1.rst copy from pypy/doc/whatsnew-head.rst copy to pypy/doc/whatsnew-2.6.1.rst diff --git a/pypy/doc/whatsnew-head.rst b/pypy/doc/whatsnew-head.rst --- a/pypy/doc/whatsnew-head.rst +++ b/pypy/doc/whatsnew-head.rst @@ -2,68 +2,6 @@ What's new in PyPy 2.6+ ======================= -.. this is a revision shortly after release-2.6.0 -.. startrev: 91904d5c5188 +.. this is a revision shortly after release-2.6.1 +.. startrev: 83ebc73d4fcb -.. branch: use_min_scalar -Correctly resolve the output dtype of ufunc(array, scalar) calls. - -.. branch: stdlib-2.7.10 - -Update stdlib to version 2.7.10 - -.. branch: issue2062 - -.. branch: disable-unroll-for-short-loops -The JIT no longer performs loop unrolling if the loop compiles to too much code. - -.. branch: run-create_cffi_imports - -Build cffi import libraries as part of translation by monkey-patching an -additional task into translation - -.. branch: int-float-list-strategy - -Use a compact strategy for Python lists that mix integers and floats, -at least if the integers fit inside 32 bits. These lists are now -stored as an array of floats, like lists that contain only floats; the -difference is that integers are stored as tagged NaNs. (This should -have no visible effect! After ``lst = [42, 42.5]``, the value of -``lst[0]`` is still *not* the float ``42.0`` but the integer ``42``.) - -.. branch: cffi-callback-onerror -.. branch: cffi-new-allocator - -.. branch: unicode-dtype - -Partial implementation of unicode dtype and unicode scalars. - -.. branch: dtypes-compatability - -Improve compatibility with numpy dtypes; handle offsets to create unions, -fix str() and repr(), allow specifying itemsize, metadata and titles, add flags, -allow subclassing dtype - -.. branch: indexing - -Refactor array indexing to support ellipses. - -.. branch: numpy-docstrings - -Allow the docstrings of built-in numpy objects to be set at run-time. - -.. branch: nditer-revisited - -Implement nditer 'buffered' flag and fix some edge cases - -.. branch: ufunc-reduce - -Allow multiple axes in ufunc.reduce() - -.. branch: fix-tinylang-goals - -Update tinylang goals to match current rpython - -.. branch: vmprof-review - -Clean up of vmprof, notably to handle correctly multiple threads diff --git a/pypy/module/_vmprof/test/test__vmprof.py b/pypy/module/_vmprof/test/test__vmprof.py --- a/pypy/module/_vmprof/test/test__vmprof.py +++ b/pypy/module/_vmprof/test/test__vmprof.py @@ -21,11 +21,12 @@ i = 0 count = 0 i += 5 * WORD # header - assert s[i] == '\x04' - i += 1 # marker - assert s[i] == '\x04' - i += 1 # length - i += len('pypy') + assert s[i ] == '\x05' # MARKER_HEADER + assert s[i + 1] == '\x00' # 0 + assert s[i + 2] == '\x01' # VERSION_THREAD_ID + assert s[i + 3] == chr(4) # len('pypy') + assert s[i + 4: i + 8] == 'pypy' + i += 8 while i < len(s): if s[i] == '\x03': break diff --git a/pypy/module/_vmprof/test/test_direct.py b/pypy/module/_vmprof/test/test_direct.py --- a/pypy/module/_vmprof/test/test_direct.py +++ b/pypy/module/_vmprof/test/test_direct.py @@ -42,7 +42,7 @@ } -""" + open(str(srcdir.join("rvmprof_get_custom_offset.h"))).read()) +""" + open(str(srcdir.join("vmprof_get_custom_offset.h"))).read()) class TestDirect(object): def test_infrastructure(self): diff --git a/rpython/rlib/jit.py b/rpython/rlib/jit.py --- a/rpython/rlib/jit.py +++ b/rpython/rlib/jit.py @@ -1087,6 +1087,16 @@ """ assert type(value) is cls +def ll_record_exact_class(ll_value, ll_cls): + from rpython.rlib.debug import ll_assert + from rpython.rtyper.lltypesystem.lloperation import llop + from rpython.rtyper.lltypesystem import lltype + from rpython.rtyper.rclass import ll_type + ll_assert(ll_value == lltype.nullptr(lltype.typeOf(ll_value).TO), "record_exact_class called with None argument") + ll_assert(ll_type(ll_value) is ll_cls, "record_exact_class called with invalid arguments") + llop.jit_record_exact_class(lltype.Void, ll_value, ll_cls) + + class Entry(ExtRegistryEntry): _about_ = record_exact_class @@ -1100,12 +1110,10 @@ from rpython.rtyper import rclass classrepr = rclass.get_type_repr(hop.rtyper) - - hop.exception_cannot_occur() v_inst = hop.inputarg(hop.args_r[0], arg=0) v_cls = hop.inputarg(classrepr, arg=1) - return hop.genop('jit_record_exact_class', [v_inst, v_cls], - resulttype=lltype.Void) + hop.exception_is_here() + return hop.gendirectcall(ll_record_exact_class, v_inst, v_cls) def _jit_conditional_call(condition, function, *args): pass diff --git a/rpython/rtyper/rclass.py b/rpython/rtyper/rclass.py --- a/rpython/rtyper/rclass.py +++ b/rpython/rtyper/rclass.py @@ -616,26 +616,33 @@ while rbase.classdef is not None: immutable_fields.update(rbase.immutable_field_set) rbase = rbase.rbase - self._parse_field_list(immutable_fields, accessor) + self._parse_field_list(immutable_fields, accessor, hints) - def _parse_field_list(self, fields, accessor): + def _parse_field_list(self, fields, accessor, hints): ranking = {} for name in fields: + quasi = False if name.endswith('?[*]'): # a quasi-immutable field pointing to name = name[:-4] # an immutable array rank = IR_QUASIIMMUTABLE_ARRAY + quasi = True elif name.endswith('[*]'): # for virtualizables' lists name = name[:-3] rank = IR_IMMUTABLE_ARRAY elif name.endswith('?'): # a quasi-immutable field name = name[:-1] rank = IR_QUASIIMMUTABLE + quasi = True else: # a regular immutable/green field rank = IR_IMMUTABLE try: mangled_name, r = self._get_field(name) except KeyError: continue + if quasi and hints.get("immutable"): + raise TyperError( + "can't have _immutable_ = True and a quasi-immutable field " + "%s in class %s" % (name, self.classdef)) ranking[mangled_name] = rank accessor.initialize(self.object_type, ranking) return ranking diff --git a/rpython/rtyper/rvirtualizable.py b/rpython/rtyper/rvirtualizable.py --- a/rpython/rtyper/rvirtualizable.py +++ b/rpython/rtyper/rvirtualizable.py @@ -38,8 +38,8 @@ else: self._super()._setup_repr(hints = hints) c_vfields = self.classdef.classdesc.classdict['_virtualizable_'] - self.my_redirected_fields = self._parse_field_list(c_vfields.value, - self.accessor) + self.my_redirected_fields = self._parse_field_list( + c_vfields.value, self.accessor, hints) else: self._super()._setup_repr() # ootype needs my_redirected_fields even for subclass. lltype does diff --git a/rpython/rtyper/test/test_rclass.py b/rpython/rtyper/test/test_rclass.py --- a/rpython/rtyper/test/test_rclass.py +++ b/rpython/rtyper/test/test_rclass.py @@ -943,6 +943,19 @@ found.append(op.args[1].value) assert found == ['mutate_a', 'mutate_a', 'mutate_b'] + def test_quasi_immutable_clashes_with_immutable(self): + from rpython.jit.metainterp.typesystem import deref + class A(object): + _immutable_ = True + _immutable_fields_ = ['a?'] + def f(): + a = A() + a.x = 42 + a.a = 142 + return A() + with py.test.raises(TyperError): + self.gengraph(f, []) + def test_quasi_immutable_array(self): from rpython.jit.metainterp.typesystem import deref class A(object): _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit