Author: Matti Picus <matti.pi...@gmail.com> Branch: py3.5 Changeset: r94787:708b92b46553 Date: 2018-06-29 12:39 -0700 http://bitbucket.org/pypy/pypy/changeset/708b92b46553/
Log: merge default into branch diff --git a/pypy/doc/sandbox.rst b/pypy/doc/sandbox.rst --- a/pypy/doc/sandbox.rst +++ b/pypy/doc/sandbox.rst @@ -3,6 +3,11 @@ PyPy's sandboxing features ========================== +.. warning:: This is not actively maintained. You will likely have to fix + some issues yourself, or otherwise play around on your own. We provide + this documentation for historical reasions, it will not translate or + run on the latest PyPy code base. + Introduction ------------ diff --git a/pypy/module/cpyext/api.py b/pypy/module/cpyext/api.py --- a/pypy/module/cpyext/api.py +++ b/pypy/module/cpyext/api.py @@ -658,7 +658,7 @@ 'PyType_FromSpec', 'Py_IncRef', 'Py_DecRef', 'PyObject_Free', 'PyObject_GC_Del', 'PyType_GenericAlloc', '_PyObject_New', '_PyObject_NewVar', - '_PyObject_GC_New', '_PyObject_GC_NewVar', + '_PyObject_GC_Malloc', '_PyObject_GC_New', '_PyObject_GC_NewVar', 'PyObject_Init', 'PyObject_InitVar', 'PyTuple_New', '_Py_Dealloc', ] @@ -789,6 +789,9 @@ # a pointer to PyObject PyObjectP = rffi.CArrayPtr(PyObject) +# int * +INTP_real = rffi.CArrayPtr(rffi.INT_real) + def configure_types(): for config in (CConfig, CConfig2): for name, TYPE in rffi_platform.configure(config).iteritems(): diff --git a/pypy/module/cpyext/include/object.h b/pypy/module/cpyext/include/object.h --- a/pypy/module/cpyext/include/object.h +++ b/pypy/module/cpyext/include/object.h @@ -372,6 +372,7 @@ PyAPI_FUNC(PyObject *) _PyObject_New(PyTypeObject *); PyAPI_FUNC(PyVarObject *) _PyObject_NewVar(PyTypeObject *, Py_ssize_t); +PyAPI_FUNC(PyObject *) _PyObject_GC_Malloc(size_t); PyAPI_FUNC(PyObject *) _PyObject_GC_New(PyTypeObject *); PyAPI_FUNC(PyVarObject *) _PyObject_GC_NewVar(PyTypeObject *, Py_ssize_t); diff --git a/pypy/module/cpyext/longobject.py b/pypy/module/cpyext/longobject.py --- a/pypy/module/cpyext/longobject.py +++ b/pypy/module/cpyext/longobject.py @@ -1,7 +1,7 @@ from rpython.rtyper.lltypesystem import lltype, rffi from pypy.module.cpyext.api import ( cpython_api, PyObject, build_type_checkers_flags, Py_ssize_t, - CONST_STRING, ADDR, CANNOT_FAIL) + CONST_STRING, ADDR, CANNOT_FAIL, INTP_real) from pypy.interpreter.error import OperationError, oefmt from rpython.rlib.rbigint import rbigint, InvalidSignednessError @@ -120,7 +120,7 @@ num = space.bigint_w(w_long) return num.ulonglongmask() -@cpython_api([PyObject, rffi.CArrayPtr(rffi.INT_real)], lltype.Signed, +@cpython_api([PyObject, INTP_real], lltype.Signed, error=-1) def PyLong_AsLongAndOverflow(space, w_long, overflow_ptr): """ @@ -141,7 +141,7 @@ overflow_ptr[0] = rffi.cast(rffi.INT_real, -1) return -1 -@cpython_api([PyObject, rffi.CArrayPtr(rffi.INT_real)], rffi.LONGLONG, +@cpython_api([PyObject, INTP_real], rffi.LONGLONG, error=-1) def PyLong_AsLongLongAndOverflow(space, w_long, overflow_ptr): """ diff --git a/pypy/module/cpyext/pystrtod.py b/pypy/module/cpyext/pystrtod.py --- a/pypy/module/cpyext/pystrtod.py +++ b/pypy/module/cpyext/pystrtod.py @@ -1,6 +1,6 @@ import errno from pypy.interpreter.error import oefmt -from pypy.module.cpyext.api import cpython_api, CONST_STRING +from pypy.module.cpyext.api import cpython_api, CONST_STRING, INTP_real from pypy.module.cpyext.pyobject import PyObject from rpython.rlib import rdtoa from rpython.rlib import rfloat @@ -80,7 +80,7 @@ if not user_endptr: lltype.free(endptr, flavor='raw') -@cpython_api([rffi.DOUBLE, lltype.Char, rffi.INT_real, rffi.INT_real, rffi.INTP], rffi.CCHARP) +@cpython_api([rffi.DOUBLE, lltype.Char, rffi.INT_real, rffi.INT_real, INTP_real], rffi.CCHARP) def PyOS_double_to_string(space, val, format_code, precision, flags, ptype): """Convert a double val to a string using supplied format_code, precision, and flags. @@ -114,7 +114,7 @@ buffer, rtype = rfloat.double_to_string(val, format_code, intmask(precision), intmask(flags)) - if ptype != lltype.nullptr(rffi.INTP.TO): - ptype[0] = rffi.cast(rffi.INT, DOUBLE_TO_STRING_TYPES_MAP[rtype]) + if ptype != lltype.nullptr(INTP_real.TO): + ptype[0] = rffi.cast(rffi.INT_real, DOUBLE_TO_STRING_TYPES_MAP[rtype]) bufp = rffi.str2charp(buffer) return bufp diff --git a/pypy/module/cpyext/src/object.c b/pypy/module/cpyext/src/object.c --- a/pypy/module/cpyext/src/object.c +++ b/pypy/module/cpyext/src/object.c @@ -60,6 +60,11 @@ return (PyObject*)_PyObject_NewVar(type, 0); } +PyObject * _PyObject_GC_Malloc(size_t size) +{ + return (PyObject *)PyObject_Malloc(size); +} + PyObject * _PyObject_GC_New(PyTypeObject *type) { return _PyObject_New(type); diff --git a/pypy/module/cpyext/test/test_object.py b/pypy/module/cpyext/test/test_object.py --- a/pypy/module/cpyext/test/test_object.py +++ b/pypy/module/cpyext/test/test_object.py @@ -5,7 +5,7 @@ from rpython.rtyper.lltypesystem import rffi from pypy.module.cpyext.pyobject import get_w_obj_and_decref from pypy.module.cpyext.api import ( - Py_LT, Py_LE, Py_NE, Py_EQ, Py_GE, Py_GT) + Py_LT, Py_LE, Py_NE, Py_EQ, Py_GE, Py_GT, INTP_real) from pypy.module.cpyext.object import ( PyObject_IsTrue, PyObject_Not, PyObject_GetAttrString, PyObject_DelAttrString, PyObject_GetAttr, PyObject_DelAttr, diff --git a/pypy/module/cpyext/test/test_pystrtod.py b/pypy/module/cpyext/test/test_pystrtod.py --- a/pypy/module/cpyext/test/test_pystrtod.py +++ b/pypy/module/cpyext/test/test_pystrtod.py @@ -4,7 +4,7 @@ from pypy.module.cpyext.test.test_api import BaseApiTest, raises_w from rpython.rtyper.lltypesystem import rffi from rpython.rtyper.lltypesystem import lltype -from pypy.module.cpyext.pystrtod import PyOS_string_to_double +from pypy.module.cpyext.pystrtod import PyOS_string_to_double, INTP_real class TestPyOS_string_to_double(BaseApiTest): @@ -90,7 +90,7 @@ class TestPyOS_double_to_string(BaseApiTest): def test_format_code(self, api): - ptype = lltype.malloc(rffi.INTP.TO, 1, flavor='raw') + ptype = lltype.malloc(INTP_real.TO, 1, flavor='raw') r = api.PyOS_double_to_string(150.0, 'e', 1, 0, ptype) assert '1.5e+02' == rffi.charp2str(r) type_value = rffi.cast(lltype.Signed, ptype[0]) @@ -99,7 +99,7 @@ lltype.free(ptype, flavor='raw') def test_precision(self, api): - ptype = lltype.malloc(rffi.INTP.TO, 1, flavor='raw') + ptype = lltype.malloc(INTP_real.TO, 1, flavor='raw') r = api.PyOS_double_to_string(3.14159269397, 'g', 5, 0, ptype) assert '3.1416' == rffi.charp2str(r) type_value = rffi.cast(lltype.Signed, ptype[0]) @@ -108,7 +108,7 @@ lltype.free(ptype, flavor='raw') def test_flags_sign(self, api): - ptype = lltype.malloc(rffi.INTP.TO, 1, flavor='raw') + ptype = lltype.malloc(INTP_real.TO, 1, flavor='raw') r = api.PyOS_double_to_string(-3.14, 'g', 3, 1, ptype) assert '-3.14' == rffi.charp2str(r) type_value = rffi.cast(lltype.Signed, ptype[0]) @@ -117,7 +117,7 @@ lltype.free(ptype, flavor='raw') def test_flags_add_dot_0(self, api): - ptype = lltype.malloc(rffi.INTP.TO, 1, flavor='raw') + ptype = lltype.malloc(INTP_real.TO, 1, flavor='raw') r = api.PyOS_double_to_string(3, 'g', 5, 2, ptype) assert '3.0' == rffi.charp2str(r) type_value = rffi.cast(lltype.Signed, ptype[0]) @@ -126,7 +126,7 @@ lltype.free(ptype, flavor='raw') def test_flags_alt(self, api): - ptype = lltype.malloc(rffi.INTP.TO, 1, flavor='raw') + ptype = lltype.malloc(INTP_real.TO, 1, flavor='raw') r = api.PyOS_double_to_string(314., 'g', 3, 4, ptype) assert '314.' == rffi.charp2str(r) type_value = rffi.cast(lltype.Signed, ptype[0]) @@ -135,7 +135,7 @@ lltype.free(ptype, flavor='raw') def test_ptype_nan(self, api): - ptype = lltype.malloc(rffi.INTP.TO, 1, flavor='raw') + ptype = lltype.malloc(INTP_real.TO, 1, flavor='raw') r = api.PyOS_double_to_string(float('nan'), 'g', 3, 4, ptype) assert 'nan' == rffi.charp2str(r) type_value = rffi.cast(lltype.Signed, ptype[0]) @@ -144,7 +144,7 @@ lltype.free(ptype, flavor='raw') def test_ptype_infinity(self, api): - ptype = lltype.malloc(rffi.INTP.TO, 1, flavor='raw') + ptype = lltype.malloc(INTP_real.TO, 1, flavor='raw') r = api.PyOS_double_to_string(1e200 * 1e200, 'g', 0, 0, ptype) assert 'inf' == rffi.charp2str(r) type_value = rffi.cast(lltype.Signed, ptype[0]) @@ -153,8 +153,8 @@ lltype.free(ptype, flavor='raw') def test_ptype_null(self, api): - ptype = lltype.nullptr(rffi.INTP.TO) + ptype = lltype.nullptr(INTP_real.TO) r = api.PyOS_double_to_string(3.14, 'g', 3, 0, ptype) assert '3.14' == rffi.charp2str(r) - assert ptype == lltype.nullptr(rffi.INTP.TO) + assert ptype == lltype.nullptr(INTP_real.TO) rffi.free_charp(r) diff --git a/pypy/module/cpyext/test/test_unicodeobject.py b/pypy/module/cpyext/test/test_unicodeobject.py --- a/pypy/module/cpyext/test/test_unicodeobject.py +++ b/pypy/module/cpyext/test/test_unicodeobject.py @@ -4,7 +4,8 @@ from pypy.module.cpyext.test.test_cpyext import AppTestCpythonExtensionBase from pypy.module.cpyext.unicodeobject import ( Py_UNICODE, PyUnicodeObject, new_empty_unicode) -from pypy.module.cpyext.api import PyObjectP, PyObject, Py_CLEANUP_SUPPORTED +from pypy.module.cpyext.api import (PyObjectP, PyObject, + Py_CLEANUP_SUPPORTED, INTP_real) from pypy.module.cpyext.pyobject import decref, from_ref from rpython.rtyper.lltypesystem import rffi, lltype import sys, py @@ -726,7 +727,7 @@ value = 1 else: value = 0 - pendian = lltype.malloc(INT_realP.TO, 1, flavor='raw') + pendian = lltype.malloc(INTP_real.TO, 1, flavor='raw') pendian[0] = rffi.cast(rffi.INT_real, value) else: pendian = None @@ -739,7 +740,7 @@ rffi.free_charp(strict_charp) if pendian: if realendian is not None: - assert rffi.cast(rffi.INT, realendian) == pendian[0] + assert rffi.cast(rffi.INT_real, realendian) == pendian[0] lltype.free(pendian, flavor='raw') test("\x61\x00\x62\x00\x63\x00\x64\x00", -1) @@ -762,7 +763,7 @@ value = 1 else: value = 0 - pendian = lltype.malloc(INT_realP.TO, 1, flavor='raw') + pendian = lltype.malloc(INTP_real.TO, 1, flavor='raw') pendian[0] = rffi.cast(rffi.INT_real, value) else: pendian = None diff --git a/pypy/module/cpyext/unicodeobject.py b/pypy/module/cpyext/unicodeobject.py --- a/pypy/module/cpyext/unicodeobject.py +++ b/pypy/module/cpyext/unicodeobject.py @@ -6,7 +6,7 @@ from pypy.module.unicodedata import unicodedb from pypy.module.cpyext.api import ( CANNOT_FAIL, Py_ssize_t, build_type_checkers, cpython_api, - bootstrap_function, CONST_STRING, + bootstrap_function, CONST_STRING, INTP_real, CONST_WSTRING, Py_CLEANUP_SUPPORTED, slot_function, cts, parse_dir) from pypy.module.cpyext.pyerrors import PyErr_BadArgument from pypy.module.cpyext.pyobject import ( @@ -768,7 +768,7 @@ if sys.platform == 'win32': make_conversion_functions('MBCS', 'mbcs') -@cpython_api([CONST_STRING, Py_ssize_t, CONST_STRING, INT_realP], PyObject) +@cpython_api([CONST_STRING, Py_ssize_t, CONST_STRING, INTP_real], PyObject) def PyUnicode_DecodeUTF16(space, s, size, llerrors, pbyteorder): """Decode length bytes from a UTF-16 encoded buffer string and return the corresponding Unicode object. errors (if non-NULL) defines the error @@ -822,7 +822,7 @@ return space.newunicode(result) -@cpython_api([CONST_STRING, Py_ssize_t, CONST_STRING, INT_realP], PyObject) +@cpython_api([CONST_STRING, Py_ssize_t, CONST_STRING, INTP_real], PyObject) def PyUnicode_DecodeUTF32(space, s, size, llerrors, pbyteorder): """Decode length bytes from a UTF-32 encoded buffer string and return the corresponding Unicode object. errors (if non-NULL) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit