[pypy-commit] pypy py3k: merge default
pjenvey
noreply at buildbot.pypy.org
Thu May 16 22:57:44 CEST 2013
Author: Philip Jenvey <pjenvey at underboss.org>
Branch: py3k
Changeset: r64243:f4bb9fce9847
Date: 2013-05-16 13:56 -0700
http://bitbucket.org/pypy/pypy/changeset/f4bb9fce9847/
Log: merge default
diff --git a/lib-python/2.7/socket.py b/lib-python/2.7/socket.py
--- a/lib-python/2.7/socket.py
+++ b/lib-python/2.7/socket.py
@@ -324,7 +324,12 @@
if self._close:
self._sock.close()
else:
- self._sock._decref_socketios()
+ try:
+ self._sock._decref_socketios()
+ except AttributeError:
+ pass # bah, someone built a _fileobject manually
+ # with some unexpected replacement of the
+ # _socketobject class
self._sock = None
def __del__(self):
diff --git a/lib-python/2.7/test/test_traceback.py b/lib-python/2.7/test/test_traceback.py
--- a/lib-python/2.7/test/test_traceback.py
+++ b/lib-python/2.7/test/test_traceback.py
@@ -180,7 +180,7 @@
def test_traceback_format(self):
if traceback_print is None:
- return
+ raise unittest.SkipTest('Requires _testcapi')
try:
raise KeyError('blah')
except KeyError:
diff --git a/lib-python/2.7/test/test_unicode.py b/lib-python/2.7/test/test_unicode.py
--- a/lib-python/2.7/test/test_unicode.py
+++ b/lib-python/2.7/test/test_unicode.py
@@ -1612,7 +1612,7 @@
try:
from _testcapi import unicode_encodedecimal
except ImportError:
- return
+ raise unittest.SkipTest('Requires _testcapi')
self.assertEqual(unicode_encodedecimal(u'123'),
b'123')
self.assertEqual(unicode_encodedecimal(u'\u0663.\u0661\u0664'),
diff --git a/pypy/doc/conf.py b/pypy/doc/conf.py
--- a/pypy/doc/conf.py
+++ b/pypy/doc/conf.py
@@ -47,7 +47,7 @@
# The short X.Y version.
version = '2.0'
# The full version, including alpha/beta/rc tags.
-release = '2.0.0'
+release = '2.0.1'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
diff --git a/pypy/doc/how-to-release.rst b/pypy/doc/how-to-release.rst
--- a/pypy/doc/how-to-release.rst
+++ b/pypy/doc/how-to-release.rst
@@ -22,7 +22,8 @@
will capture the revision number of this change for the release;
some of the next updates may be done before or after branching; make
sure things are ported back to the trunk and to the branch as
- necessary
+ necessary; also update the version number in pypy/doc/conf.py,
+ and in pypy/doc/index.rst
* update pypy/doc/contributor.rst (and possibly LICENSE)
* rename pypy/doc/whatsnew_head.rst to whatsnew_VERSION.rst
and create a fresh whatsnew_head.rst after the release
diff --git a/pypy/doc/index.rst b/pypy/doc/index.rst
--- a/pypy/doc/index.rst
+++ b/pypy/doc/index.rst
@@ -40,7 +40,7 @@
* `FAQ`_: some frequently asked questions.
-* `Release 2.0`_: the latest official release
+* `Release 2.0.1`_: the latest official release
* `PyPy Blog`_: news and status info about PyPy
@@ -110,7 +110,7 @@
.. _`Getting Started`: getting-started.html
.. _`Papers`: extradoc.html
.. _`Videos`: video-index.html
-.. _`Release 2.0`: http://pypy.org/download.html
+.. _`Release 2.0.1`: http://pypy.org/download.html
.. _`speed.pypy.org`: http://speed.pypy.org
.. _`RPython toolchain`: translation.html
.. _`potential project ideas`: project-ideas.html
diff --git a/pypy/doc/release-2.0.1.rst b/pypy/doc/release-2.0.1.rst
new file mode 100644
--- /dev/null
+++ b/pypy/doc/release-2.0.1.rst
@@ -0,0 +1,46 @@
+==============================
+PyPy 2.0.1 - Bohr Smørrebrød
+==============================
+
+We're pleased to announce PyPy 2.0.1. This is a stable bugfix release
+over `2.0`_. You can download it here:
+
+ http://pypy.org/download.html
+
+The fixes are mainly about fatal errors or crashes in our stdlib. See
+below for more details.
+
+What is PyPy?
+=============
+
+PyPy is a very compliant Python interpreter, almost a drop-in replacement for
+CPython 2.7. It's fast (`pypy 2.0 and cpython 2.7.3`_ performance comparison)
+due to its integrated tracing JIT compiler.
+
+This release supports x86 machines running Linux 32/64, Mac OS X 64 or
+Windows 32. Support for ARM is progressing but not bug-free yet.
+
+.. _`pypy 2.0 and cpython 2.7.3`: http://speed.pypy.org
+
+Highlights
+==========
+
+- fix an occasional crash in the JIT that ends in `RPython Fatal error:
+ NotImplementedError`__.
+
+- `id(x)` is now always a positive number (except on int/float/long/complex).
+ This fixes an issue in ``_sqlite.py`` (mostly for 32-bit Linux).
+
+- fix crashes of callback-from-C-functions (with cffi) when used together
+ with Stackless features, on asmgcc (i.e. Linux only). Now `gevent should
+ work better`__.
+
+- work around an eventlet issue with `socket._decref_socketios()`__.
+
+.. __: https://bugs.pypy.org/issue1482
+.. __: http://mail.python.org/pipermail/pypy-dev/2013-May/011362.html
+.. __: https://bugs.pypy.org/issue1468
+.. _2.0: release-2.0.0.html
+
+Cheers,
+arigo et. al. for the PyPy team
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
@@ -16,3 +16,6 @@
.. branch: remove-set-smm
Remove multi-methods on sets
+
+.. branch: numpy-subarrays
+Implement subarrays for numpy
diff --git a/pypy/module/_cffi_backend/cdataobj.py b/pypy/module/_cffi_backend/cdataobj.py
--- a/pypy/module/_cffi_backend/cdataobj.py
+++ b/pypy/module/_cffi_backend/cdataobj.py
@@ -114,8 +114,11 @@
ge = _make_comparison('ge')
def hash(self):
- h = (objectmodel.compute_identity_hash(self.ctype) ^
- rffi.cast(lltype.Signed, self._cdata))
+ h = rffi.cast(lltype.Signed, self._cdata)
+ # To hash pointers in dictionaries. Assumes that h shows some
+ # alignment (to 4, 8, maybe 16 bytes), so we use the following
+ # formula to avoid the trailing bits being always 0.
+ h = h ^ (h >> 4)
return self.space.wrap(h)
def getitem(self, w_index):
diff --git a/pypy/module/_cffi_backend/test/_backend_test_c.py b/pypy/module/_cffi_backend/test/_backend_test_c.py
--- a/pypy/module/_cffi_backend/test/_backend_test_c.py
+++ b/pypy/module/_cffi_backend/test/_backend_test_c.py
@@ -365,8 +365,9 @@
BInt = new_primitive_type("int")
BFloat = new_primitive_type("float")
for i in range(1, 20):
- if (hash(cast(BChar, chr(i))) !=
- hash(cast(BInt, i))):
+ x1 = cast(BChar, chr(i))
+ x2 = cast(BInt, i)
+ if hash(x1) != hash(x2):
break
else:
raise AssertionError("hashes are equal")
@@ -2723,6 +2724,14 @@
assert x.__name__ == '<cdata>'
assert hasattr(x, '__doc__')
+def test_different_types_of_ptr_equality():
+ BVoidP = new_pointer_type(new_void_type())
+ BIntP = new_pointer_type(new_primitive_type("int"))
+ x = cast(BVoidP, 12345)
+ assert x == cast(BIntP, 12345)
+ assert x != cast(BIntP, 12344)
+ assert hash(x) == hash(cast(BIntP, 12345))
+
def test_version():
# this test is here mostly for PyPy
assert __version__ == "0.6"
diff --git a/pypy/module/_ffi/test/test_funcptr.py b/pypy/module/_ffi/test/test_funcptr.py
--- a/pypy/module/_ffi/test/test_funcptr.py
+++ b/pypy/module/_ffi/test/test_funcptr.py
@@ -74,9 +74,9 @@
from _ffi import CDLL, types
# this should return *all* loaded libs, dlopen(NULL)
dll = CDLL(None)
- # Assume CPython, or PyPy compiled with cpyext
- res = dll.getfunc('Py_IsInitialized', [], types.slong)()
- assert res == 1
+ # libm should be loaded
+ res = dll.getfunc('sqrt', [types.double], types.double)(1.0)
+ assert res == 1.0
def test_callfunc(self):
from _ffi import CDLL, types
@@ -139,7 +139,7 @@
def test_pointer_args(self):
"""
- extern int dummy; // defined in test_void_result
+ extern int dummy; // defined in test_void_result
DLLEXPORT int* get_dummy_ptr() { return &dummy; }
DLLEXPORT void set_val_to_ptr(int* ptr, int val) { *ptr = val; }
"""
@@ -158,7 +158,7 @@
def test_convert_pointer_args(self):
"""
- extern int dummy; // defined in test_void_result
+ extern int dummy; // defined in test_void_result
DLLEXPORT int* get_dummy_ptr(); // defined in test_pointer_args
DLLEXPORT void set_val_to_ptr(int* ptr, int val); // ditto
"""
@@ -170,7 +170,7 @@
def _as_ffi_pointer_(self, ffitype):
assert ffitype is types.void_p
return self.value
-
+
libfoo = CDLL(self.libfoo_name)
get_dummy = libfoo.getfunc('get_dummy', [], types.sint)
get_dummy_ptr = libfoo.getfunc('get_dummy_ptr', [], types.void_p)
@@ -259,7 +259,7 @@
def test_typed_pointer_args(self):
"""
- extern int dummy; // defined in test_void_result
+ extern int dummy; // defined in test_void_result
DLLEXPORT int* get_dummy_ptr(); // defined in test_pointer_args
DLLEXPORT void set_val_to_ptr(int* ptr, int val); // ditto
"""
@@ -551,7 +551,7 @@
from _ffi import CDLL, types
libfoo = CDLL(self.libfoo_name)
raises(TypeError, "libfoo.getfunc('sum_xy', [types.void], types.sint)")
-
+
def test_OSError_loading(self):
from _ffi import CDLL, types
raises(OSError, "CDLL('I do not exist')")
@@ -606,7 +606,7 @@
from _rawffi import FUNCFLAG_STDCALL
libm = CDLL(self.libm_name)
pow_addr = libm.getaddressindll('pow')
- wrong_pow = FuncPtr.fromaddr(pow_addr, 'pow',
+ wrong_pow = FuncPtr.fromaddr(pow_addr, 'pow',
[types.double, types.double], types.double, FUNCFLAG_STDCALL)
try:
wrong_pow(2, 3) == 8
@@ -622,7 +622,7 @@
from _rawffi import FUNCFLAG_STDCALL
kernel = WinDLL('Kernel32.dll')
sleep_addr = kernel.getaddressindll('Sleep')
- sleep = FuncPtr.fromaddr(sleep_addr, 'sleep', [types.uint],
+ sleep = FuncPtr.fromaddr(sleep_addr, 'sleep', [types.uint],
types.void, FUNCFLAG_STDCALL)
sleep(10)
diff --git a/pypy/module/sys/initpath.py b/pypy/module/sys/initpath.py
--- a/pypy/module/sys/initpath.py
+++ b/pypy/module/sys/initpath.py
@@ -68,7 +68,7 @@
If it cannot be found, return (None, None).
"""
if executable == '':
- return None, None
+ executable = 'pypy-c'
search = executable
while True:
dirname = resolvedirof(search)
diff --git a/pypy/module/sys/test/test_initpath.py b/pypy/module/sys/test/test_initpath.py
--- a/pypy/module/sys/test/test_initpath.py
+++ b/pypy/module/sys/test/test_initpath.py
@@ -16,9 +16,12 @@
build_hierarchy(tmpdir)
path, prefix = find_stdlib(None, str(pypy))
assert prefix == tmpdir
- # shouldn't find stdlib if executable == '' even if parent dir has a stdlib
- monkeypatch.chdir(tmpdir.join('bin'))
- assert find_stdlib(None, '') == (None, None)
+ # in executable is None look for stdlib based on the working directory
+ # see lib-python/2.7/test/test_sys.py:test_executable
+ _, prefix = find_stdlib(None, '')
+ cwd = os.path.dirname(os.path.realpath(__file__))
+ assert prefix is not None
+ assert cwd.startswith(str(prefix))
@py.test.mark.skipif('not hasattr(os, "symlink")')
def test_find_stdlib_follow_symlink(tmpdir):
diff --git a/pypy/objspace/fake/checkmodule.py b/pypy/objspace/fake/checkmodule.py
--- a/pypy/objspace/fake/checkmodule.py
+++ b/pypy/objspace/fake/checkmodule.py
@@ -5,7 +5,6 @@
def checkmodule(*modnames):
config = get_pypy_config(translating=True)
space = FakeObjSpace(config)
- space.setup()
seeobj_w = []
for modname in modnames:
mod = __import__('pypy.module.%s' % modname, None, None, ['__doc__'])
diff --git a/pypy/objspace/fake/objspace.py b/pypy/objspace/fake/objspace.py
--- a/pypy/objspace/fake/objspace.py
+++ b/pypy/objspace/fake/objspace.py
@@ -111,6 +111,7 @@
def __init__(self, config=None):
self._seen_extras = []
ObjSpace.__init__(self, config=config)
+ self.setup()
# Be sure to annotate W_SliceObject constructor.
# In Python2, this is triggered by W_InstanceObject.__getslice__.
diff --git a/rpython/rlib/entrypoint.py b/rpython/rlib/entrypoint.py
--- a/rpython/rlib/entrypoint.py
+++ b/rpython/rlib/entrypoint.py
@@ -57,7 +57,8 @@
# This thing is imported by any target which has any API, so it'll get
# registered
-RPython_StartupCode = rffi.llexternal('RPython_StartupCode', [], lltype.Void)
+RPython_StartupCode = rffi.llexternal('RPython_StartupCode', [], lltype.Void,
+ _nowrapper=True)
@entrypoint('main', [], c_name='rpython_startup_code')
def rpython_startup_code():
More information about the pypy-commit
mailing list