Author: Matti Picus <[email protected]>
Branch:
Changeset: r67281:289551a68457
Date: 2013-10-10 13:45 +0300
http://bitbucket.org/pypy/pypy/changeset/289551a68457/
Log: merge cpyext-best_base which uses the best_base function from
pypy.objspace.std.typeobject
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
@@ -52,6 +52,9 @@
.. branch: ndarray-subtype
Allow subclassing ndarray, i.e. matrix
+.. branch: ndarray-sort
+Implement ndarray in-place sorting (for numeric types, no non-native byte
order)
+
.. branch: pypy-pyarray
Implement much of numpy's c api in cpyext, allows (slow) access to ndarray
from c
@@ -87,6 +90,7 @@
.. branch: no-release-gil
.. branch: safe-win-mmap
.. branch: boolean-indexing-cleanup
+.. branch: cpyyest-best_base
.. branch: nobold-backtrace
Work on improving UnionError messages and stack trace displays.
@@ -103,3 +107,5 @@
.. branch: file-support-in-rpython
make open() and friends rpython
+
+
diff --git a/pypy/module/cpyext/test/test_cpyext.py
b/pypy/module/cpyext/test/test_cpyext.py
--- a/pypy/module/cpyext/test/test_cpyext.py
+++ b/pypy/module/cpyext/test/test_cpyext.py
@@ -99,7 +99,7 @@
class LeakCheckingTest(object):
"""Base class for all cpyext tests."""
spaceconfig = dict(usemodules=['cpyext', 'thread', '_rawffi', 'array',
- 'itertools', 'rctime', 'binascii'])
+ 'itertools', 'rctime', 'binascii',
'micronumpy'])
spaceconfig['std.withmethodcache'] = True
enable_leak_checking = True
@@ -196,7 +196,7 @@
assert PyUnicode_GetDefaultEncoding() == 'ascii'
class AppTestCpythonExtensionBase(LeakCheckingTest):
-
+
def setup_class(cls):
cls.space.getbuiltinmodule("cpyext")
from pypy.module.imp.importing import importhook
diff --git a/pypy/module/cpyext/test/test_typeobject.py
b/pypy/module/cpyext/test/test_typeobject.py
--- a/pypy/module/cpyext/test/test_typeobject.py
+++ b/pypy/module/cpyext/test/test_typeobject.py
@@ -156,7 +156,7 @@
def __init__(self):
self.foobar = 32
super(UnicodeSubclass2, self).__init__()
-
+
newobj = UnicodeSubclass2()
assert newobj.get_val() == 42
assert newobj.foobar == 32
@@ -358,6 +358,13 @@
assert w_obj is None
assert api.PyErr_Occurred() is None
+ def test_ndarray_ref(self, space, api):
+ w_obj = space.appexec([], """():
+ import numpypy as np
+ return np.int64(2)""")
+ ref = make_ref(space, w_obj)
+ api.Py_DecRef(ref)
+
class AppTestSlots(AppTestCpythonExtensionBase):
def test_some_slots(self):
module = self.import_extension('foo', [
@@ -525,7 +532,7 @@
assert type(it) is type(iter([]))
assert module.tp_iternext(it) == 1
raises(StopIteration, module.tp_iternext, it)
-
+
def test_bool(self):
module = self.import_extension('foo', [
("newInt", "METH_VARARGS",
diff --git a/pypy/module/cpyext/typeobject.py b/pypy/module/cpyext/typeobject.py
--- a/pypy/module/cpyext/typeobject.py
+++ b/pypy/module/cpyext/typeobject.py
@@ -4,7 +4,7 @@
from rpython.rtyper.lltypesystem import rffi, lltype
from rpython.rtyper.annlowlevel import llhelper
from pypy.interpreter.baseobjspace import W_Root, DescrMismatch
-from pypy.objspace.std.typeobject import W_TypeObject
+from pypy.objspace.std.typeobject import W_TypeObject, find_best_base
from pypy.interpreter.typedef import GetSetProperty
from pypy.module.cpyext.api import (
cpython_api, cpython_struct, bootstrap_function, Py_ssize_t, Py_ssize_tP,
@@ -574,33 +574,7 @@
def best_base(space, bases_w):
if not bases_w:
return None
-
- w_winner = None
- w_base = None
- for w_base_i in bases_w:
- if isinstance(w_base_i, W_ClassObject):
- # old-style base
- continue
- assert isinstance(w_base_i, W_TypeObject)
- w_candidate = solid_base(space, w_base_i)
- if not w_winner:
- w_winner = w_candidate
- w_base = w_base_i
- elif space.abstract_issubclass_w(w_winner, w_candidate):
- pass
- elif space.abstract_issubclass_w(w_candidate, w_winner):
- w_winner = w_candidate
- w_base = w_base_i
- else:
- raise OperationError(
- space.w_TypeError,
- space.wrap("multiple bases have instance lay-out conflict"))
- if w_base is None:
- raise OperationError(
- space.w_TypeError,
- space.wrap("a new-style class can't have only classic bases"))
-
- return w_base
+ return find_best_base(space, bases_w)
def inherit_slots(space, pto, w_base):
# XXX missing: nearly everything
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit