You are viewing a plain text version of this content. The canonical link for it is here.
Posted to pylucene-commits@lucene.apache.org by va...@apache.org on 2018/10/15 17:51:37 UTC
svn commit: r1843929 - /lucene/pylucene/trunk/jcc/jcc3/sources/JArray.cpp
Author: vajda
Date: Mon Oct 15 17:51:37 2018
New Revision: 1843929
URL: http://svn.apache.org/viewvc?rev=1843929&view=rev
Log:
JArray iterator now heap type as well
Modified:
lucene/pylucene/trunk/jcc/jcc3/sources/JArray.cpp
Modified: lucene/pylucene/trunk/jcc/jcc3/sources/JArray.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/jcc3/sources/JArray.cpp?rev=1843929&r1=1843928&r2=1843929&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/jcc3/sources/JArray.cpp (original)
+++ lucene/pylucene/trunk/jcc/jcc3/sources/JArray.cpp Mon Oct 15 17:51:37 2018
@@ -574,33 +574,32 @@ public:
class iterator_type {
public:
- PyTypeObject type_object;
+ PyTypeObject *type_object;
void install(char *name, PyObject *module)
{
- type_object.tp_name = name;
+ PyType_Slot slots[] = {
+ { Py_tp_dealloc, (void *) _t_iterator<U>::dealloc },
+ { Py_tp_doc, (void *) "JArrayIterator<T> wrapper type" },
+ { Py_tp_iter, (void *) PyObject_SelfIter },
+ { Py_tp_iternext, (void *) _t_iterator<U>::iternext },
+ { 0, NULL }
+ };
- if (PyType_Ready(&type_object) == 0)
- {
- Py_INCREF((PyObject *) &type_object);
- PyModule_AddObject(module, name, (PyObject *) &type_object);
- }
+ PyType_Spec spec = {
+ name,
+ sizeof(_t_iterator<U>),
+ 0,
+ Py_TPFLAGS_DEFAULT,
+ slots
+ };
- _t_iterator<U>::JArrayIterator = &type_object;
- }
+ type_object = (PyTypeObject *) PyType_FromSpec(&spec);
- iterator_type()
- {
- memset(&type_object, 0, sizeof(type_object));
+ if (type_object != NULL)
+ PyModule_AddObject(module, name, (PyObject *) type_object);
- Py_REFCNT(&type_object) = 1;
- Py_TYPE(&type_object) = NULL;
- type_object.tp_basicsize = sizeof(_t_iterator<U>);
- type_object.tp_dealloc = (destructor) _t_iterator<U>::dealloc;
- type_object.tp_flags = Py_TPFLAGS_DEFAULT;
- type_object.tp_doc = "JArrayIterator<T> wrapper type";
- type_object.tp_iter = (getiterfunc) PyObject_SelfIter;
- type_object.tp_iternext = (iternextfunc) _t_iterator<U>::iternext;
+ _t_iterator<U>::JArrayIterator = type_object;
}
};
@@ -668,7 +667,7 @@ public:
PyObject *bases = PyTuple_Pack(1, PY_TYPE(Object));
- type_object = (PyTypeObject*) PyType_FromSpecWithBases(&spec, bases);
+ type_object = (PyTypeObject *) PyType_FromSpecWithBases(&spec, bases);
Py_DECREF(bases);
if (type_object != NULL)