Author: Matti Picus <[email protected]>
Branch: py3.5
Changeset: r94324:1be242f4be56
Date: 2018-04-14 20:47 +0300
http://bitbucket.org/pypy/pypy/changeset/1be242f4be56/
Log: merge default into py3.5
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
@@ -40,6 +40,8 @@
sure things are ported back to the trunk and to the branch as
necessary.
+* Make sure the RPython builds on the buildbot pass with no failures
+
* Maybe bump the SOABI number in module/imp/importing. This has many
implications, so make sure the PyPy community agrees to the change.
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
@@ -3,16 +3,6 @@
==========================
.. this is a revision shortly after release-pypy-6.0.0
-.. startrev: 2e04adf1b89f
+.. startrev: f22145c34985
-.. branch: cpyext-subclass-setattr
-Fix for python-level classes that inherit from C-API types, previously the
-`w_obj` was not necessarily preserved throughout the lifetime of the `pyobj`
-which led to cases where instance attributes were lost. Fixes issue #2793
-
-
-.. branch: pyparser-improvements-2
-
-Improve line offsets that are reported by SyntaxError. Improve error messages
-for a few situations, including mismatched parenthesis.
diff --git a/pypy/doc/whatsnew-pypy2-6.0.0.rst
b/pypy/doc/whatsnew-pypy2-6.0.0.rst
--- a/pypy/doc/whatsnew-pypy2-6.0.0.rst
+++ b/pypy/doc/whatsnew-pypy2-6.0.0.rst
@@ -101,3 +101,15 @@
Work around possible bugs in upstream ioctl users, like CPython allocate at
least 1024 bytes for the arg in calls to ``ioctl(fd, request, arg)``. Fixes
issue #2776
+
+.. branch: cpyext-subclass-setattr
+
+Fix for python-level classes that inherit from C-API types, previously the
+`w_obj` was not necessarily preserved throughout the lifetime of the `pyobj`
+which led to cases where instance attributes were lost. Fixes issue #2793
+
+
+.. branch: pyparser-improvements-2
+
+Improve line offsets that are reported by SyntaxError. Improve error messages
+for a few situations, including mismatched parenthesis.
diff --git a/pypy/module/cpyext/setobject.py b/pypy/module/cpyext/setobject.py
--- a/pypy/module/cpyext/setobject.py
+++ b/pypy/module/cpyext/setobject.py
@@ -1,4 +1,4 @@
-from pypy.interpreter.error import oefmt
+from pypy.interpreter.error import OperationError, oefmt
from rpython.rtyper.lltypesystem import rffi, lltype
from pypy.module.cpyext.api import (cpython_api, Py_ssize_t, CANNOT_FAIL,
build_type_checkers)
@@ -64,8 +64,13 @@
instance of set or its subtype."""
if not PySet_Check(space, w_s):
PyErr_BadInternalCall(space)
- space.call_method(space.w_set, 'discard', w_s, w_obj)
- return 0
+ try:
+ space.call_method(space.w_set, 'remove', w_s, w_obj)
+ except OperationError as e:
+ if e.match(space, space.w_KeyError):
+ return 0
+ raise
+ return 1
@cpython_api([PyObject], PyObject)
diff --git a/pypy/module/cpyext/test/test_setobject.py
b/pypy/module/cpyext/test/test_setobject.py
--- a/pypy/module/cpyext/test/test_setobject.py
+++ b/pypy/module/cpyext/test/test_setobject.py
@@ -28,7 +28,11 @@
assert api.PySet_Size(w_set) == 4
api.PySet_Add(w_set, space.wrap(6))
assert api.PySet_Size(w_set) == 5
- api.PySet_Discard(w_set, space.wrap(6))
+ res = api.PySet_Discard(w_set, space.wrap(6))
+ assert res == 1
+ assert api.PySet_Size(w_set) == 4
+ res = api.PySet_Discard(w_set, space.wrap(6))
+ assert res == 0
assert api.PySet_Size(w_set) == 4
def test_set_contains(self, space, api):
diff --git a/pypy/tool/release/force-builds.py
b/pypy/tool/release/force-builds.py
--- a/pypy/tool/release/force-builds.py
+++ b/pypy/tool/release/force-builds.py
@@ -31,6 +31,9 @@
'pypy-c-jit-linux-s390x',
'build-pypy-c-jit-linux-armhf-raspbian',
'build-pypy-c-jit-linux-armel',
+ 'rpython-linux-x86-32',
+ 'rpython-linux-x86-64'
+ 'rpython-win-x86-32'
]
def get_user():
diff --git a/rpython/rlib/rgc.py b/rpython/rlib/rgc.py
--- a/rpython/rlib/rgc.py
+++ b/rpython/rlib/rgc.py
@@ -644,7 +644,10 @@
def get_rpy_type_index(gcref):
from rpython.rlib.rarithmetic import intmask
Class = gcref._x.__class__
- return intmask(id(Class))
+ i = intmask(id(Class))
+ if i < 0:
+ i = ~i # always return a positive number, at least
+ return i
def cast_gcref_to_int(gcref):
# This is meant to be used on cast_instance_to_gcref results.
diff --git a/rpython/rlib/rvmprof/src/shared/_vmprof.c
b/rpython/rlib/rvmprof/src/shared/_vmprof.c
--- a/rpython/rlib/rvmprof/src/shared/_vmprof.c
+++ b/rpython/rlib/rvmprof/src/shared/_vmprof.c
@@ -36,6 +36,8 @@
register PY_STACK_FRAME_T * callee_saved asm("rbx");
#elif defined(X86_32)
register PY_STACK_FRAME_T * callee_saved asm("edi");
+#elif defined(__arm__)
+ register PY_STACK_FRAME_T * callee_saved asm("r4");
#else
# error "platform not supported"
#endif
@@ -45,6 +47,8 @@
"movq %1, %0\t\n"
#elif defined(X86_32)
"mov %1, %0\t\n"
+#elif defined(__arm__)
+ "mov %1, %0\t\n"
#else
# error "platform not supported"
#endif
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
@@ -16,7 +16,7 @@
#ifdef VMP_SUPPORTS_NATIVE_PROFILING
-#ifdef VMPROF_LINUX
+#if defined(VMPROF_LINUX) || defined(VMPROF_BSD)
#include "unwind/vmprof_unwind.h"
typedef mcontext_t unw_context_t;
@@ -510,13 +510,15 @@
static const char * vmprof_error = NULL;
static void * libhandle = NULL;
-
#ifdef VMPROF_LINUX
+#include <link.h>
#define LIBUNWIND "libunwind.so"
#ifdef __i386__
#define PREFIX "x86"
+#define LIBUNWIND_SUFFIX ""
#elif __x86_64__
#define PREFIX "x86_64"
+#define LIBUNWIND_SUFFIX "-x86_64"
#endif
#define U_PREFIX "_U"
#define UL_PREFIX "_UL"
@@ -524,10 +526,41 @@
int vmp_native_enable(void) {
#ifdef VMPROF_LINUX
+ void * oldhandle = NULL;
+ struct link_map * map = NULL;
if (libhandle == NULL) {
+ // on linux, the wheel includes the libunwind shared object.
+ libhandle = dlopen(NULL, RTLD_NOW);
+ if (libhandle != NULL) {
+ // load the link map, it will contain an entry to
+ // .libs_vmprof/libunwind-...so, this is the file that is
+ // distributed with the wheel.
+ if (dlinfo(libhandle, RTLD_DI_LINKMAP, &map) != 0) {
+ (void)dlclose(libhandle);
+ libhandle = NULL;
+ goto bail_out;
+ }
+ // grab the new handle
+ do {
+ if (strstr(map->l_name, ".libs_vmprof/libunwind"
LIBUNWIND_SUFFIX) != NULL) {
+ oldhandle = libhandle;
+ libhandle = dlopen(map->l_name, RTLD_LAZY|RTLD_LOCAL);
+ (void)dlclose(oldhandle);
+ oldhandle = NULL;
+ goto loaded_libunwind;
+ }
+ map = map->l_next;
+ } while (map != NULL);
+ // did not find .libs_vmprof/libunwind...
+ (void)dlclose(libhandle);
+ libhandle = NULL;
+ }
+
+ // fallback! try to load the system's libunwind.so
if ((libhandle = dlopen(LIBUNWIND, RTLD_LAZY | RTLD_LOCAL)) == NULL) {
goto bail_out;
}
+loaded_libunwind:
if ((unw_get_reg = dlsym(libhandle, UL_PREFIX PREFIX "_get_reg")) ==
NULL) {
goto bail_out;
}
diff --git a/rpython/rlib/rvmprof/src/shared/vmprof_common.h
b/rpython/rlib/rvmprof/src/shared/vmprof_common.h
--- a/rpython/rlib/rvmprof/src/shared/vmprof_common.h
+++ b/rpython/rlib/rvmprof/src/shared/vmprof_common.h
@@ -23,6 +23,10 @@
#include <syscall.h>
#endif
+#ifdef VMPROF_BSD
+#include <sys/syscall.h>
+#endif
+
#define MAX_FUNC_NAME 1024
#ifdef VMPROF_UNIX
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit