Author: mattip <[email protected]>
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
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit