[pypy-commit] pypy cppyy-packaging: merge default into cppyy-packaging
wlav
pypy.commits at gmail.com
Thu Jul 5 21:30:58 EDT 2018
Author: Wim Lavrijsen <WLavrijsen at lbl.gov>
Branch: cppyy-packaging
Changeset: r94810:935c38f271a8
Date: 2018-07-05 17:37 -0700
http://bitbucket.org/pypy/pypy/changeset/935c38f271a8/
Log: merge default into cppyy-packaging
diff --git a/lib-python/2.7/code.py b/lib-python/2.7/code.py
--- a/lib-python/2.7/code.py
+++ b/lib-python/2.7/code.py
@@ -104,6 +104,12 @@
except SystemExit:
raise
except:
+ if softspace(sys.stdout, 0):
+ print
+ try:
+ sys.stdout.flush()
+ except:
+ pass
self.showtraceback()
else:
if softspace(sys.stdout, 0):
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/interpreter/test/test_raise.py b/pypy/interpreter/test/test_raise.py
--- a/pypy/interpreter/test/test_raise.py
+++ b/pypy/interpreter/test/test_raise.py
@@ -280,3 +280,15 @@
def __new__(cls, *args):
return object()
raises(TypeError, "raise MyException")
+
+ def test_with_exit_True(self):
+ class X:
+ def __enter__(self):
+ pass
+ def __exit__(self, *args):
+ return True
+ def g():
+ with X():
+ return 42
+ assert False, "unreachable"
+ assert g() == 42
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
@@ -643,7 +643,7 @@
'_PyTraceMalloc_Track', '_PyTraceMalloc_Untrack', 'PyMem_Malloc',
'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', 'PyInt_FromLong',
'PyTuple_New', '_Py_Dealloc',
]
@@ -772,6 +772,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
@@ -383,6 +383,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.objspace.std.longobject import W_LongObject
from pypy.interpreter.error import OperationError, oefmt
from pypy.module.cpyext.intobject import PyInt_AsUnsignedLongMask
@@ -112,7 +112,7 @@
num = space.bigint_w(w_long)
return num.ulonglongmask()
- at cpython_api([PyObject, rffi.CArrayPtr(rffi.INT_real)], lltype.Signed,
+ at cpython_api([PyObject, INTP_real], lltype.Signed,
error=-1)
def PyLong_AsLongAndOverflow(space, w_long, overflow_ptr):
"""
@@ -133,7 +133,7 @@
overflow_ptr[0] = rffi.cast(rffi.INT_real, -1)
return -1
- at cpython_api([PyObject, rffi.CArrayPtr(rffi.INT_real)], rffi.LONGLONG,
+ at cpython_api([PyObject, INTP_real], rffi.LONGLONG,
error=-1)
def PyLong_AsLongLongAndOverflow(space, w_long, overflow_ptr):
"""
diff --git a/pypy/module/cpyext/object.py b/pypy/module/cpyext/object.py
--- a/pypy/module/cpyext/object.py
+++ b/pypy/module/cpyext/object.py
@@ -1,7 +1,7 @@
from rpython.rtyper.lltypesystem import rffi, lltype
from pypy.module.cpyext.api import (
cpython_api, generic_cpy_call, CANNOT_FAIL, Py_ssize_t, Py_ssize_tP,
- PyVarObject, size_t, slot_function,
+ PyVarObject, size_t, slot_function, INTP_real,
Py_TPFLAGS_HEAPTYPE, Py_LT, Py_LE, Py_EQ, Py_NE, Py_GT,
Py_GE, CONST_STRING, FILEP, fwrite, c_only)
from pypy.module.cpyext.pyobject import (
@@ -221,14 +221,14 @@
expression cmp(o1, o2)."""
return space.int_w(space.cmp(w_o1, w_o2))
- at cpython_api([PyObject, PyObject, rffi.INTP], rffi.INT_real, error=-1)
+ at cpython_api([PyObject, PyObject, INTP_real], rffi.INT_real, error=-1)
def PyObject_Cmp(space, w_o1, w_o2, result):
"""Compare the values of o1 and o2 using a routine provided by o1, if one
exists, otherwise with a routine provided by o2. The result of the
comparison is returned in result. Returns -1 on failure. This is the
equivalent of the Python statement result = cmp(o1, o2)."""
res = space.int_w(space.cmp(w_o1, w_o2))
- result[0] = rffi.cast(rffi.INT, res)
+ result[0] = rffi.cast(rffi.INT_real, res)
return 0
@cpython_api([PyObject, PyObject, rffi.INT_real], PyObject)
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')
- at cpython_api([rffi.DOUBLE, lltype.Char, rffi.INT_real, rffi.INT_real, rffi.INTP], rffi.CCHARP)
+ at 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, lltype
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,
@@ -205,7 +205,7 @@
def test_cmp(self, space, api):
w = space.wrap
- with lltype.scoped_alloc(rffi.INTP.TO, 1) as ptr:
+ with lltype.scoped_alloc(INTP_real.TO, 1) as ptr:
assert api.PyObject_Cmp(w(42), w(72), ptr) == 0
assert ptr[0] == -1
assert api.PyObject_Cmp(w("a"), w("a"), ptr) == 0
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,7 @@
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
+from pypy.module.cpyext.api import PyObjectP, PyObject, INTP_real
from pypy.module.cpyext.pyobject import decref, from_ref
from rpython.rtyper.lltypesystem import rffi, lltype
import sys, py
@@ -464,8 +464,8 @@
value = 1
else:
value = 0
- pendian = lltype.malloc(rffi.INTP.TO, 1, flavor='raw')
- pendian[0] = rffi.cast(rffi.INT, value)
+ pendian = lltype.malloc(INTP_real.TO, 1, flavor='raw')
+ pendian[0] = rffi.cast(rffi.INT_real, value)
else:
pendian = None
@@ -477,7 +477,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)
@@ -500,8 +500,8 @@
value = 1
else:
value = 0
- pendian = lltype.malloc(rffi.INTP.TO, 1, flavor='raw')
- pendian[0] = rffi.cast(rffi.INT, value)
+ 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
@@ -3,7 +3,7 @@
from pypy.module.unicodedata import unicodedb
from pypy.module.cpyext.api import (
CANNOT_FAIL, Py_ssize_t, build_type_checkers_flags, cpython_api,
- bootstrap_function, CONST_STRING,
+ bootstrap_function, CONST_STRING, INTP_real,
CONST_WSTRING, slot_function, cts, parse_dir)
from pypy.module.cpyext.pyerrors import PyErr_BadArgument
from pypy.module.cpyext.pyobject import (
@@ -526,7 +526,7 @@
if sys.platform == 'win32':
make_conversion_functions('MBCS', 'mbcs')
- at cpython_api([CONST_STRING, Py_ssize_t, CONST_STRING, rffi.INTP], PyObject)
+ at 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
@@ -576,11 +576,11 @@
None, # errorhandler
byteorder)
if pbyteorder is not None:
- pbyteorder[0] = rffi.cast(rffi.INT, byteorder)
+ pbyteorder[0] = rffi.cast(rffi.INT_real, byteorder)
return space.newunicode(result)
- at cpython_api([CONST_STRING, Py_ssize_t, CONST_STRING, rffi.INTP], PyObject)
+ at 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)
@@ -632,7 +632,7 @@
None, # errorhandler
byteorder)
if pbyteorder is not None:
- pbyteorder[0] = rffi.cast(rffi.INT, byteorder)
+ pbyteorder[0] = rffi.cast(rffi.INT_real, byteorder)
return space.newunicode(result)
diff --git a/pypy/module/sys/app.py b/pypy/module/sys/app.py
--- a/pypy/module/sys/app.py
+++ b/pypy/module/sys/app.py
@@ -11,6 +11,11 @@
# Flush stdout as well, both files may refer to the same file
try:
+ if sys.stdout.softspace:
+ print
+ except:
+ pass
+ try:
sys.stdout.flush()
except:
pass
diff --git a/pypy/module/sys/test/test_sysmodule.py b/pypy/module/sys/test/test_sysmodule.py
--- a/pypy/module/sys/test/test_sysmodule.py
+++ b/pypy/module/sys/test/test_sysmodule.py
@@ -256,6 +256,30 @@
print repr(err.getvalue())
assert err.getvalue().endswith("ValueError: %s\n" % expectedoutput)
+ def test_excepthook_flushes_stdout(self):
+ import sys, cStringIO
+ savestdout = sys.stdout
+ out = cStringIO.StringIO()
+ sys.stdout = out
+
+ eh = sys.__excepthook__
+
+ try:
+ raise ValueError(42)
+ except ValueError as exc:
+ print "hello" # with end-of-line
+ eh(*sys.exc_info())
+ try:
+ raise ValueError(42)
+ except ValueError as exc:
+ print 123, 456, # no end-of-line here
+ assert sys.stdout.softspace
+ eh(*sys.exc_info())
+ assert not sys.stdout.softspace
+
+ sys.stdout = savestdout
+ assert out.getvalue() == 'hello\n123 456\n' # with a final \n added
+
# FIXME: testing the code for a lost or replaced excepthook in
# Python/pythonrun.c::PyErr_PrintEx() is tricky.
diff --git a/pypy/module/test_lib_pypy/test_code_extra.py b/pypy/module/test_lib_pypy/test_code_extra.py
new file mode 100644
--- /dev/null
+++ b/pypy/module/test_lib_pypy/test_code_extra.py
@@ -0,0 +1,19 @@
+import py
+import sys
+import cStringIO
+import code
+
+
+def test_flush_stdout_on_error():
+ runner = code.InteractiveInterpreter()
+ old_stdout = sys.stdout
+ try:
+ mystdout = cStringIO.StringIO()
+ sys.stdout = mystdout
+ runner.runcode(compile("print 5,;0/0", "<interactive>", "exec"))
+ finally:
+ sys.stdout = old_stdout
+
+ if '__pypy__' not in sys.builtin_module_names:
+ py.test.skip('pypy only test')
+ assert mystdout.getvalue() == "5\n"
diff --git a/rpython/rlib/rvmprof/dummy.py b/rpython/rlib/rvmprof/dummy.py
--- a/rpython/rlib/rvmprof/dummy.py
+++ b/rpython/rlib/rvmprof/dummy.py
@@ -23,4 +23,4 @@
pass
def stop_sampling(self):
- pass
+ return -1
More information about the pypy-commit
mailing list