Author: Matti Picus <matti.pi...@gmail.com> Branch: py3.5 Changeset: r94141:fcce464367d8 Date: 2018-03-27 01:05 +0300 http://bitbucket.org/pypy/pypy/changeset/fcce464367d8/
Log: fix merge, minimize diff to default 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 @@ -1,3 +1,4 @@ +import pytest from pypy.interpreter import gateway from rpython.rtyper.lltypesystem import rffi from pypy.module.cpyext.test.test_cpyext import AppTestCpythonExtensionBase @@ -6,8 +7,6 @@ from pypy.module.cpyext.pyobject import make_ref, from_ref, decref, as_pyobj from pypy.module.cpyext.typeobject import cts, PyTypeObjectPtr -import sys -import pytest class AppTestTypeObject(AppTestCpythonExtensionBase): @@ -243,6 +242,29 @@ module = self.import_module(name='foo') raises(TypeError, module.MetaType, 'other', (module.fooType,), {}) + def test_sre(self): + import sys + for m in ['_sre', 'sre_compile', 'sre_constants', 'sre_parse', 're']: + # clear out these modules + try: + del sys.modules[m] + except KeyError: + pass + module = self.import_module(name='_sre') + import re + assert re.sre_compile._sre is module + s = u"Foo " * 1000 + u"Bar" + prog = re.compile(u"Foo.*Bar") + assert prog.match(s) + m = re.search(u"xyz", u"xyzxyz") + assert m + m = re.search("xyz", "xyzxyz") + assert m + assert "groupdict" in dir(m) + re._cache.clear() + re._cache_repl.clear() + del prog, m + def test_init_error(self): module = self.import_module("foo") raises(ValueError, module.InitErrType) @@ -519,7 +541,7 @@ py_type = rffi.cast(PyTypeObjectPtr, ref) w_dict = from_ref(space, py_type.c_tp_dict) - w_name = space.newunicode(u'a') + w_name = space.newtext('a') space.setitem(w_dict, w_name, space.wrap(1)) assert space.int_w(space.getattr(w_class, w_name)) == 1 space.delitem(w_dict, w_name) @@ -549,6 +571,7 @@ def test_typeslots(self, space): assert cts.macros['Py_tp_doc'] == 56 + class AppTestSlots(AppTestCpythonExtensionBase): def setup_class(cls): AppTestCpythonExtensionBase.setup_class.im_func(cls) @@ -603,16 +626,21 @@ module = self.import_extension('foo', [ ("test_tp_getattro", "METH_VARARGS", ''' - PyObject *obj = PyTuple_GET_ITEM(args, 0); - PyObject *value = PyTuple_GET_ITEM(args, 1); + #if PY_MAJOR_VERSION > 2 + #define PyString_FromString PyUnicode_FromString + #define PyIntObject PyLongObject + #define PyInt_AsLong PyLong_AsLong + #endif + PyObject *name, *obj = PyTuple_GET_ITEM(args, 0); + PyObject *attr, *value = PyTuple_GET_ITEM(args, 1); if (!obj->ob_type->tp_getattro) { PyErr_SetString(PyExc_ValueError, "missing tp_getattro"); return NULL; } - PyObject *name = PyUnicode_FromString("attr1"); - PyObject *attr = obj->ob_type->tp_getattro(obj, name); - if (PyLong_AsLong(attr) != PyLong_AsLong(value)) + name = PyString_FromString("attr1"); + attr = obj->ob_type->tp_getattro(obj, name); + if (PyInt_AsLong(attr) != PyInt_AsLong(value)) { PyErr_SetString(PyExc_ValueError, "tp_getattro returned wrong value"); @@ -620,7 +648,7 @@ } Py_DECREF(name); Py_DECREF(attr); - name = PyUnicode_FromString("attr2"); + name = PyString_FromString("attr2"); attr = obj->ob_type->tp_getattro(obj, name); if (attr == NULL && PyErr_ExceptionMatches(PyExc_AttributeError)) { @@ -644,6 +672,9 @@ module = self.import_extension('foo', [ ("get_foo", "METH_O", ''' + #if PY_MAJOR_VERSION > 2 + #define PyString_FromString PyUnicode_FromString + #endif char* name = "foo"; PyTypeObject *tp = Py_TYPE(args); PyObject *res; @@ -651,7 +682,7 @@ res = (*tp->tp_getattr)(args, name); } else if (tp->tp_getattro != NULL) { - PyObject *w = PyUnicode_FromString(name); + PyObject *w = PyString_FromString(name); res = (*tp->tp_getattro)(args, w); Py_DECREF(w); } @@ -736,17 +767,23 @@ module = self.import_extension('foo', [ ("tp_call", "METH_VARARGS", ''' - PyTypeObject *type = (PyTypeObject *)PyTuple_GET_ITEM(args, 0); - PyObject *obj = PyTuple_GET_ITEM(args, 1); - PyObject *c_args = PyTuple_GET_ITEM(args, 2); - if (!type->tp_call) - { - PyErr_SetNone(PyExc_ValueError); - return NULL; - } - return type->tp_call(obj, c_args, NULL); - ''')]) - + PyTypeObject *type = (PyTypeObject *)PyTuple_GET_ITEM(args, 0); + PyObject *obj = PyTuple_GET_ITEM(args, 1); + PyObject *c_args = PyTuple_GET_ITEM(args, 2); + if (!type->tp_call) + { + PyErr_SetNone(PyExc_ValueError); + return NULL; + } + return type->tp_call(obj, c_args, NULL); + ''' + ) + ]) + class C: + def __call__(self, *args): + return args + ret = module.tp_call(C, C(), ('x', 2)) + assert ret == ('x', 2) class D(type): def __call__(self, *args): return "foo! %r" % (args,) @@ -823,9 +860,13 @@ ''' )], prologue=''' static int + #if PY_MAJOR_VERSION > 2 + #define PyString_FromString PyBytes_FromString + #define PyInt_Check PyLong_Check + #endif mp_ass_subscript(PyObject *self, PyObject *key, PyObject *value) { - if (PyLong_Check(key)) { + if (PyInt_Check(key)) { PyErr_SetNone(PyExc_ZeroDivisionError); return -1; } @@ -876,43 +917,6 @@ res = "foo" in obj assert res is True - def test_sq_ass_slice(self): - module = self.import_extension('foo', [ - ("new_obj", "METH_NOARGS", - ''' - PyObject *obj; - obj = PyObject_New(PyObject, &Foo_Type); - return obj; - ''' - )], prologue=''' - static int - sq_ass_slice(PyObject *self, Py_ssize_t a, Py_ssize_t b, PyObject *o) - { - int expected = (a == 10 && b == 20 && - PyInt_Check(o) && PyInt_AsLong(o) == 42); - if (!expected) { - PyErr_SetString(PyExc_ValueError, "test failed"); - return -1; - } - return 0; - } - PySequenceMethods tp_as_sequence; - static PyTypeObject Foo_Type = { - PyVarObject_HEAD_INIT(NULL, 0) - "foo.foo", - }; - ''', more_init=''' - Foo_Type.tp_flags = Py_TPFLAGS_DEFAULT; - Foo_Type.tp_as_sequence = &tp_as_sequence; - tp_as_sequence.sq_ass_slice = sq_ass_slice; - if (PyType_Ready(&Foo_Type) < 0) INITERROR; - ''') - obj = module.new_obj() - obj[10:20] = 42 - raises(ValueError, "obj[10:20] = 43") - raises(ValueError, "obj[11:20] = 42") - raises(ValueError, "obj[10:21] = 42") - def test_sq_ass_item(self): module = self.import_extension('foo', [ ("new_obj", "METH_NOARGS", @@ -922,6 +926,10 @@ return obj; ''' )], prologue=''' + #if PY_MAJOR_VERSION > 2 + #define PyInt_Check PyLong_Check + #define PyInt_AsLong PyLong_AsLong + #endif static int sq_ass_item(PyObject *self, Py_ssize_t i, PyObject *o) { @@ -965,9 +973,14 @@ PyErr_SetNone(PyExc_ValueError); return NULL; } - return type->tp_iter(obj);'''), + return type->tp_iter(obj); + ''' + ), ("tp_iternext", "METH_VARARGS", ''' + #if PY_MAJOR_VERSION > 2 + #define PyString_FromString PyBytes_FromString + #endif PyTypeObject *type = (PyTypeObject *)PyTuple_GET_ITEM(args, 0); PyObject *obj = PyTuple_GET_ITEM(args, 1); PyObject *result; @@ -980,13 +993,16 @@ /* In py3, returning NULL from tp_iternext means the iterator * is exhausted */ if (!result && !PyErr_Occurred()) - result = PyBytes_FromString("stop!"); - return result;''')]) + result = PyString_FromString("stop!"); + return result; + ''' + ) + ]) l = [1] it = module.tp_iter(list, l) assert type(it) is type(iter([])) assert module.tp_iternext(type(it), it) == 1 - assert module.tp_iternext(type(it), it) == b'stop!' + assert module.tp_iternext(type(it), it) == b"stop!" # class LL(list): def __iter__(self): @@ -1116,31 +1132,35 @@ PyObject_HEAD long ival; } IntLikeObject; - + #if PY_MAJOR_VERSION > 2 + #define PyInt_Check PyLong_Check + #define PyInt_AsLong PyLong_AsLong + #define PyInt_FromLong PyLong_FromLong + #endif static PyObject * intlike_nb_add(PyObject *self, PyObject *other) { long val2, val1 = ((IntLikeObject *)(self))->ival; - if (PyLong_Check(other)) { - long val2 = PyLong_AsLong(other); - return PyLong_FromLong(val1+val2); + if (PyInt_Check(other)) { + long val2 = PyInt_AsLong(other); + return PyInt_FromLong(val1+val2); } val2 = ((IntLikeObject *)(other))->ival; - return PyLong_FromLong(val1+val2); + return PyInt_FromLong(val1+val2); } static PyObject * intlike_nb_pow(PyObject *self, PyObject *other, PyObject * z) { long val2, val1 = ((IntLikeObject *)(self))->ival; - if (PyLong_Check(other)) { - long val2 = PyLong_AsLong(other); - return PyLong_FromLong(val1+val2); + if (PyInt_Check(other)) { + long val2 = PyInt_AsLong(other); + return PyInt_FromLong(val1+val2); } val2 = ((IntLikeObject *)(other))->ival; - return PyLong_FromLong((int)pow(val1,val2)); + return PyInt_FromLong((int)pow(val1,val2)); } PyTypeObject IntLike_Type = { @@ -1493,9 +1513,12 @@ ''' ), ("forty_two", "METH_O", ''' - return PyLong_FromLong(42); + return PyInt_FromLong(42); ''' )], prologue=''' + #if PY_MAJOR_VERSION > 2 + #define PyInt_FromLong PyLong_FromLong + #endif static PyTypeObject Foo_Type = { PyVarObject_HEAD_INIT(NULL, 0) "foo.foo", @@ -1626,9 +1649,10 @@ return PyLong_FromLong(0); '''),]) # copied from object.h - Py_TPPYPYFLAGS_FLOAT_SUBCLASS = (1L<<0) + Py_TPPYPYFLAGS_FLOAT_SUBCLASS = (1<<0) class MyFloat(float): pass assert module.test_pypy_flags(float, Py_TPPYPYFLAGS_FLOAT_SUBCLASS) == 0 - assert module.test_pypy_flags(MyFloat, Py_TPPYPYFLAGS_FLOAT_SUBCLASS) == 0 \ No newline at end of file + assert module.test_pypy_flags(MyFloat, Py_TPPYPYFLAGS_FLOAT_SUBCLASS) == 0 + 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 @@ -19,7 +19,7 @@ Py_TPFLAGS_TUPLE_SUBCLASS, Py_TPFLAGS_UNICODE_SUBCLASS, Py_TPFLAGS_DICT_SUBCLASS, Py_TPFLAGS_BASE_EXC_SUBCLASS, Py_TPFLAGS_TYPE_SUBCLASS, - Py_TPFLAGS_BYTES_SUBCLASS + Py_TPFLAGS_BYTES_SUBCLASS, Py_TPPYPYFLAGS_FLOAT_SUBCLASS, ) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit