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 2017/06/25 13:45:43 UTC
svn commit: r1799796 [2/2] - in /lucene/pylucene/trunk/jcc: ./ _jcc3/
_jcc3/java/io/ _jcc3/java/lang/ _jcc3/java/lang/reflect/ _jcc3/java/util/
jcc3/ jcc3/sources/
Modified: lucene/pylucene/trunk/jcc/jcc3/python.py
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/jcc3/python.py?rev=1799796&r1=1799795&r2=1799796&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/jcc3/python.py (original)
+++ lucene/pylucene/trunk/jcc/jcc3/python.py Sun Jun 25 13:45:41 2017
@@ -115,7 +115,7 @@ def parseArgs(params, current, generics,
return ''
if is_boxed(clsName):
clsNames = clsName.split('.')
- return ', &%s::PY_TYPE(%s)' %(absname(cppnames(clsNames[:-1])), cppname(clsNames[-1]))
+ return ', %s::PY_TYPE(%s)' %(absname(cppnames(clsNames[:-1])), cppname(clsNames[-1]))
return ', %s::initializeClass' %(typename(cls, current, False))
def callarg(cls, i):
@@ -193,14 +193,14 @@ def construct(out, indent, cls, inCase,
cls = cls.getComponentType()
if cls.isArray():
clsNames = 'java.lang.Object'.split('.')
- clsArg = '&%s::PY_TYPE(%s)' %(absname(cppnames(clsNames[:-1])), cppname(clsNames[-1]))
+ clsArg = '%s::PY_TYPE(%s)' %(absname(cppnames(clsNames[:-1])), cppname(clsNames[-1]))
elif cls.isPrimitive():
clsArg = 'PY_TYPE(JArray%s)' %(cls.getName().capitalize())
else:
clsArg = 'PY_TYPE(JArrayObject)'
else:
clsNames = cls.getName().split('.')
- clsArg = '&%s::PY_TYPE(%s)' %(absname(cppnames(clsNames[:-1])), cppname(clsNames[-1]))
+ clsArg = '%s::PY_TYPE(%s)' %(absname(cppnames(clsNames[:-1])), cppname(clsNames[-1]))
line(out, indent, 'self->parameters[%d] = %s;', i, clsArg)
i += 1
@@ -276,7 +276,7 @@ def returnValue(cls, returnType, value,
if clsArg.isArray():
clsArg = Class.forName('java.lang.Object')
clsNames = clsArg.getName().split('.')
- clsArg = '&%s::PY_TYPE(%s)' %(absname(cppnames(clsNames[:-1])), cppname(clsNames[-1]))
+ clsArg = '%s::PY_TYPE(%s)' %(absname(cppnames(clsNames[:-1])), cppname(clsNames[-1]))
clsArgs.append(clsArg)
elif TypeVariable.instance_(clsArg):
gd = TypeVariable.cast_(clsArg).getGenericDeclaration()
@@ -368,7 +368,7 @@ def call(out, indent, cls, inCase, metho
if isExtension and name == 'clone' and Modifier.isNative(modifiers):
line(out)
line(out, indent, '%s object(result.this$);', typename(cls, cls, False))
- line(out, indent, 'if (PyObject_TypeCheck(arg, &PY_TYPE(FinalizerProxy)) &&')
+ line(out, indent, 'if (PyObject_TypeCheck(arg, PY_TYPE(FinalizerProxy)) &&')
line(out, indent, ' PyObject_TypeCheck(((t_fp *) arg)->object, Py_TYPE(self)))')
line(out, indent, '{')
line(out, indent + 1, 'PyObject *_arg = ((t_fp *) arg)->object;')
@@ -543,7 +543,7 @@ def extension(env, out, indent, cls, nam
line(out, indent, 'return (jobject) NULL;')
-def python(env, out_h, out, cls, superCls, names, superNames,
+def python(env, out_h, out, cls, superClasses, names, superNames,
constructors, methods, protectedMethods,
methodNames, fields, instanceFields,
mapping, sequence, rename, declares, typeset, moduleName, generics,
@@ -557,7 +557,9 @@ def python(env, out_h, out, cls, superCl
for name in names[:-1]:
line(out_h, indent, 'namespace %s {', cppname(name))
indent += 1
- line(out_h, indent, '%sextern PyTypeObject PY_TYPE(%s);',
+ line(out_h, indent, '%sextern PyType_Def PY_TYPE_DEF(%s);',
+ _dll_export, names[-1])
+ line(out_h, indent, '%sextern PyTypeObject *PY_TYPE(%s);',
_dll_export, names[-1])
if generics:
@@ -639,8 +641,9 @@ def python(env, out_h, out, cls, superCl
else:
constructorName = 'abstract_init'
- if superCls:
+ if superClasses:
superMethods = set([method.getName()
+ for superCls in superClasses
for method in superCls.getMethods()])
else:
superMethods = ()
@@ -658,8 +661,8 @@ def python(env, out_h, out, cls, superCl
isNative = Modifier.isNative(modifiers)
isStatic = Modifier.isStatic(modifiers)
- if (isExtension and not isStatic and superCls and isNative):
- superMethod = find_method(superCls, name, params)
+ if (isExtension and not isStatic and superClasses and isNative):
+ superMethod = find_method(superClasses[0], name, params)
if isExtension and isNative and not isStatic:
extMethods.setdefault(name, []).append(method)
@@ -903,7 +906,7 @@ def python(env, out_h, out, cls, superCl
if instanceFields or propMethods or isExtension or clsParams:
tp_getset = 't_%s__fields_' %(names[-1])
else:
- tp_getset = '0'
+ tp_getset = None
if iteratorMethod:
if iteratorExt:
@@ -933,64 +936,68 @@ def python(env, out_h, out, cls, superCl
returnType = nextMethod.getReturnType()
tp_iternext = '((PyObject *(*)(t_%s *)) get_%snext< t_%s,%s,%s >)' %(names[-1], clsParams and 'generic_' or '', names[-1], wrapper_typename(returnType, cls), typename(returnType, cls, False))
else:
- tp_iter = '0'
- tp_iternext = '0'
+ tp_iter = None
+ tp_iternext = None
if mappingMethod:
method, cardinality = mappingMethod
if cardinality > 1:
- getName = 't_%s_%s_map_' %(names[-1], method.getName())
+ mp_subscript = 't_%s_%s_map_' %(names[-1], method.getName())
line(out, indent, 'static PyObject *%s(t_%s *self, PyObject *key);',
- getName, names[-1])
+ mp_subscript, names[-1])
else:
- getName = 't_%s_%s' %(names[-1], method.getName())
- line(out)
- line(out, indent, 'static PyMappingMethods t_%s_as_mapping = {',
- names[-1])
- line(out, indent + 1, '0,')
- line(out, indent + 1, '(binaryfunc) %s,', getName)
- line(out, indent + 1, '0,')
- line(out, indent, '};')
- tp_as_mapping = '&t_%s_as_mapping' %(names[-1])
+ mp_subscript = 't_%s_%s' %(names[-1], method.getName())
else:
- tp_as_mapping = '0'
+ mp_subscript = None
- if sequenceLenMethod or sequenceGetMethod:
- if sequenceLenMethod:
- method, cardinality = sequenceLenMethod
- lenName = 't_%s_%s_seq_' %(names[-1], method.getName())
- line(out, indent, 'static int %s(t_%s *self);', lenName, names[-1])
- else:
- lenName = '0'
-
- if sequenceGetMethod:
- method, cardinality = sequenceGetMethod
- getName = 't_%s_%s_seq_' %(names[-1], method.getName())
- line(out, indent, 'static PyObject *%s(t_%s *self, int n);',
- getName, names[-1])
- else:
- getName = '0'
-
- line(out)
- line(out, indent, 'static PySequenceMethods t_%s_as_sequence = {',
- names[-1])
- line(out, indent + 1, '(lenfunc) %s,', lenName)
- line(out, indent + 1, '0,')
- line(out, indent + 1, '0,')
- line(out, indent + 1, '(ssizeargfunc) %s', getName)
- line(out, indent, '};')
- tp_as_sequence = '&t_%s_as_sequence' %(names[-1])
+ if sequenceLenMethod:
+ method, cardinality = sequenceLenMethod
+ sq_length = 't_%s_%s_seq_' %(names[-1], method.getName())
+ line(out, indent, 'static int %s(t_%s *self);',
+ sq_length, names[-1])
else:
- tp_as_sequence = '0'
+ sq_length = None
- if len(superNames) > 1:
- base = '::'.join((absname(cppnames(superNames[:-1])), superNames[-1]))
+ if sequenceGetMethod:
+ method, cardinality = sequenceGetMethod
+ sq_item = 't_%s_%s_seq_' %(names[-1], method.getName())
+ line(out, indent, 'static PyObject *%s(t_%s *self, int n);',
+ sq_item, names[-1])
else:
- base = superNames[-1]
+ sq_item = None
+
+ line(out)
+ line(out, indent, 'static PyType_Slot PY_TYPE_SLOTS(%s)[] = {', names[-1])
+ line(out, indent + 1, '{ Py_tp_methods, t_%s__methods_ },', names[-1])
+ line(out, indent + 1, '{ Py_tp_init, (void *) %s },', constructorName)
+ if tp_getset is not None:
+ line(out, indent + 1, '{ Py_tp_getset, %s },', tp_getset)
+ if tp_iter is not None:
+ line(out, indent + 1, '{ Py_tp_iter, (void *) %s },', tp_iter)
+ line(out, indent + 1, '{ Py_tp_iternext, (void *) %s },', tp_iternext)
+ if mp_subscript is not None:
+ line(out, indent + 1, '{ Py_mp_subscript, (void *) %s },', mp_subscript)
+ if sq_length is not None:
+ line(out, indent + 1, '{ Py_sq_length, (void *) %s },', sq_length)
+ if sq_item is not None:
+ line(out, indent + 1, '{ Py_sq_item, (void *) %s },', sq_item)
+ line(out, indent + 1, '{ 0, NULL }')
+ line(out, indent, '};')
+
+ line(out)
+ line(out, indent, 'static PyType_Def *PY_TYPE_BASES(%s)[] = {', names[-1])
+ for superName in superNames:
+ if len(superName) > 1:
+ base = '::'.join((absname(cppnames(superName[:-1])), superName[-1]))
+ else:
+ base = superName[-1]
+ line(out, indent + 1, '&PY_TYPE_DEF(%s),', base)
+ line(out, indent + 1, 'NULL')
+ line(out, indent, '};')
+
line(out)
- line(out, indent, 'DECLARE_TYPE(%s, t_%s, %s, %s, %s, %s, %s, %s, %s, %s);',
- names[-1], names[-1], base, cppname(names[-1]), constructorName,
- tp_iter, tp_iternext, tp_getset, tp_as_mapping, tp_as_sequence)
+ line(out, indent, 'DEFINE_TYPE(%s, t_%s, %s);',
+ names[-1], names[-1], cppname(names[-1]))
if clsParams:
clsArgs = []
@@ -1040,20 +1047,21 @@ def python(env, out_h, out, cls, superCl
line(out)
line(out, indent, 'void t_%s::install(PyObject *module)', names[-1])
line(out, indent, '{')
- line(out, indent + 1, 'installType(&PY_TYPE(%s), module, "%s", %d);',
- names[-1], rename or names[-1], isExtension and 1 or 0)
+ line(out, indent + 1,
+ 'installType(&PY_TYPE(%s), &PY_TYPE_DEF(%s), module, "%s", %d);',
+ names[-1], names[-1], rename or names[-1], isExtension and 1 or 0)
for inner in cls.getDeclaredClasses():
if inner in typeset:
if Modifier.isStatic(inner.getModifiers()):
innerName = inner.getName().split('.')[-1]
- line(out, indent + 1, 'PyDict_SetItemString(PY_TYPE(%s).tp_dict, "%s", make_descriptor(&PY_TYPE(%s)));',
+ line(out, indent + 1, 'PyDict_SetItemString(PY_TYPE(%s)->tp_dict, "%s", make_descriptor(&PY_TYPE_DEF(%s)));',
names[-1], innerName[len(names[-1])+1:], innerName)
line(out, indent, '}')
line(out)
line(out, indent, 'void t_%s::initialize(PyObject *module)', names[-1])
line(out, indent, '{')
- line(out, indent + 1, 'PyDict_SetItemString(PY_TYPE(%s).tp_dict, "class_", make_descriptor(%s::initializeClass, %s));',
+ line(out, indent + 1, 'PyDict_SetItemString(PY_TYPE(%s)->tp_dict, "class_", make_descriptor(%s::initializeClass, %s));',
names[-1], cppname(names[-1]), generics and 1 or 0)
if is_unboxed(cls.getName()):
@@ -1063,8 +1071,8 @@ def python(env, out_h, out, cls, superCl
wrapfn_ = "t_%s::wrap_jobject" %(names[-1])
boxfn_ = "boxObject"
- line(out, indent + 1, 'PyDict_SetItemString(PY_TYPE(%s).tp_dict, "wrapfn_", make_descriptor(%s));', names[-1], wrapfn_)
- line(out, indent + 1, 'PyDict_SetItemString(PY_TYPE(%s).tp_dict, "boxfn_", make_descriptor(%s));', names[-1], boxfn_)
+ line(out, indent + 1, 'PyDict_SetItemString(PY_TYPE(%s)->tp_dict, "wrapfn_", make_descriptor(%s));', names[-1], wrapfn_)
+ line(out, indent + 1, 'PyDict_SetItemString(PY_TYPE(%s)->tp_dict, "boxfn_", make_descriptor(%s));', names[-1], boxfn_)
if isExtension:
line(out, indent + 1, 'jclass cls = env->getClass(%s::initializeClass);',
@@ -1093,7 +1101,7 @@ def python(env, out_h, out, cls, superCl
cppFieldName += RENAME_FIELD_SUFFIX
value = '%s::%s' %(cppname(names[-1]), cppFieldName)
value = fieldValue(cls, value, fieldType)
- line(out, indent + 1, 'PyDict_SetItemString(PY_TYPE(%s).tp_dict, "%s", make_descriptor(%s));',
+ line(out, indent + 1, 'PyDict_SetItemString(PY_TYPE(%s)->tp_dict, "%s", make_descriptor(%s));',
names[-1], fieldName, value)
line(out, indent, '}')
@@ -1211,7 +1219,7 @@ def python(env, out_h, out, cls, superCl
line(out, indent + 1, 'return callSuper(type, "%s"%s, %d);',
name, args, cardinality)
else:
- line(out, indent + 1, 'return callSuper(&PY_TYPE(%s), (PyObject *) self, "%s"%s, %d);',
+ line(out, indent + 1, 'return callSuper(PY_TYPE(%s), (PyObject *) self, "%s"%s, %d);',
names[-1], name, args, cardinality)
else:
line(out, indent + 1, 'PyErr_SetArgsError(%s, "%s"%s);',
@@ -1547,7 +1555,8 @@ def module(out, allInOne, classes, impor
line(out)
line(out, 0, 'PyObject *initJCC(PyObject *module);')
line(out, 0, 'void __install__(PyObject *module);')
- line(out, 0, 'extern PyTypeObject PY_TYPE(JObject), PY_TYPE(ConstVariableDescriptor), PY_TYPE(FinalizerClass), PY_TYPE(FinalizerProxy);')
+ line(out, 0, 'extern PyTypeObject *PY_TYPE(JObject), *PY_TYPE(ConstVariableDescriptor), *PY_TYPE(FinalizerClass), *PY_TYPE(FinalizerProxy);')
+ line(out, 0, 'extern PyType_Def PY_TYPE_DEF(JObject);')
line(out, 0, 'extern void _install_jarray(PyObject *);')
line(out)
line(out, 0, 'extern "C" {')
@@ -1566,10 +1575,11 @@ def module(out, allInOne, classes, impor
line(out)
line(out, 2, 'initJCC(module);')
line(out)
- line(out, 2, 'INSTALL_TYPE(JObject, module);')
- line(out, 2, 'INSTALL_TYPE(ConstVariableDescriptor, module);')
- line(out, 2, 'INSTALL_TYPE(FinalizerClass, module);')
- line(out, 2, 'INSTALL_TYPE(FinalizerProxy, module);')
+ line(out, 2, 'INSTALL_STATIC_TYPE(JObject, module);')
+ line(out, 2, 'PY_TYPE_DEF(JObject).type = PY_TYPE(JObject);')
+ line(out, 2, 'INSTALL_STATIC_TYPE(ConstVariableDescriptor, module);')
+ line(out, 2, 'INSTALL_STATIC_TYPE(FinalizerClass, module);')
+ line(out, 2, 'INSTALL_STATIC_TYPE(FinalizerProxy, module);')
line(out, 2, '_install_jarray(module);')
line(out, 2, '__install__(module);')
line(out)
Modified: lucene/pylucene/trunk/jcc/jcc3/sources/JArray.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/jcc3/sources/JArray.cpp?rev=1799796&r1=1799795&r2=1799796&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/jcc3/sources/JArray.cpp (original)
+++ lucene/pylucene/trunk/jcc/jcc3/sources/JArray.cpp Sun Jun 25 13:45:41 2017
@@ -413,7 +413,7 @@ static PyObject *cast_(PyTypeObject *typ
if (!PyArg_ParseTuple(args, "O", &arg))
return NULL;
- if (!PyObject_TypeCheck(arg, &PY_TYPE(Object)))
+ if (!PyObject_TypeCheck(arg, PY_TYPE(Object)))
{
PyErr_SetObject(PyExc_TypeError, arg);
return NULL;
@@ -455,7 +455,7 @@ static PyObject *instance_(PyTypeObject
if (!PyArg_ParseTuple(args, "O", &arg))
return NULL;
- if (!PyObject_TypeCheck(arg, &PY_TYPE(Object)))
+ if (!PyObject_TypeCheck(arg, PY_TYPE(Object)))
Py_RETURN_FALSE;
Class argCls = ((t_Object *) arg)->object.getClass();
@@ -603,7 +603,7 @@ public:
(richcmpfunc) (PyObject *(*)(U *, PyObject *, int)) richcompare<U>;
type_object.tp_iter = (getiterfunc) (PyObject *(*)(U *)) iter<U>;
type_object.tp_methods = methods;
- type_object.tp_base = &PY_TYPE(Object);
+ type_object.tp_base = PY_TYPE(Object);
type_object.tp_init =
(initproc) (int (*)(U *, PyObject *, PyObject *)) init<T,U>;
type_object.tp_new = (newfunc) _new;
@@ -636,11 +636,11 @@ template<> int init< jobject,_t_jobjecta
if (clsObj == NULL)
cls = env->findClass("java/lang/Object");
- else if (PyObject_TypeCheck(clsObj, &PY_TYPE(Class)))
+ else if (PyObject_TypeCheck(clsObj, PY_TYPE(Class)))
cls = (jclass) ((t_Class *) clsObj)->object.this$;
else if (PyType_Check(clsObj))
{
- if (PyType_IsSubtype((PyTypeObject *) clsObj, &PY_TYPE(JObject)))
+ if (PyType_IsSubtype((PyTypeObject *) clsObj, PY_TYPE(JObject)))
{
PyObject *cobj = PyObject_GetAttrString(clsObj, "wrapfn_");
@@ -730,7 +730,7 @@ template<> PyObject *cast_<jobject>(PyTy
if (!PyArg_ParseTuple(args, "O|O", &arg, &clsArg))
return NULL;
- if (!PyObject_TypeCheck(arg, &PY_TYPE(Object)))
+ if (!PyObject_TypeCheck(arg, PY_TYPE(Object)))
{
PyErr_SetObject(PyExc_TypeError, arg);
return NULL;
@@ -751,7 +751,7 @@ template<> PyObject *cast_<jobject>(PyTy
PyErr_SetObject(PyExc_TypeError, clsArg);
return NULL;
}
- else if (!PyType_IsSubtype((PyTypeObject *) clsArg, &PY_TYPE(JObject)))
+ else if (!PyType_IsSubtype((PyTypeObject *) clsArg, PY_TYPE(JObject)))
{
PyErr_SetObject(PyExc_ValueError, clsArg);
return NULL;
@@ -793,7 +793,7 @@ template<> PyObject *cast_<jobject>(PyTy
template<> PyObject *wrapfn_<jobject>(const jobject &object) {
PyObject *cobj = PyObject_GetAttrString(
- (PyObject *) &PY_TYPE(Object), "wrapfn_");
+ (PyObject *) PY_TYPE(Object), "wrapfn_");
PyObject *(*wrapfn)(const jobject&) = NULL;
if (cobj == NULL)
@@ -818,7 +818,7 @@ template<> PyObject *instance_<jobject>(
if (!PyArg_ParseTuple(args, "O|O", &arg, &clsArg))
return NULL;
- if (!PyObject_TypeCheck(arg, &PY_TYPE(Object)))
+ if (!PyObject_TypeCheck(arg, PY_TYPE(Object)))
Py_RETURN_FALSE;
Class argCls = ((t_Object *) arg)->object.getClass();
@@ -833,7 +833,7 @@ template<> PyObject *instance_<jobject>(
PyErr_SetObject(PyExc_TypeError, clsArg);
return NULL;
}
- else if (!PyType_IsSubtype((PyTypeObject *) clsArg, &PY_TYPE(JObject)))
+ else if (!PyType_IsSubtype((PyTypeObject *) clsArg, PY_TYPE(JObject)))
{
PyErr_SetObject(PyExc_ValueError, clsArg);
return NULL;
@@ -868,7 +868,7 @@ template<> PyObject *assignable_<jobject
if (!PyArg_ParseTuple(args, "O|O", &arg, &clsArg))
return NULL;
- if (!PyObject_TypeCheck(arg, &PY_TYPE(Object)))
+ if (!PyObject_TypeCheck(arg, PY_TYPE(Object)))
Py_RETURN_FALSE;
Class argCls = ((t_Object *) arg)->object.getClass();
@@ -883,7 +883,7 @@ template<> PyObject *assignable_<jobject
PyErr_SetObject(PyExc_TypeError, clsArg);
return NULL;
}
- else if (!PyType_IsSubtype((PyTypeObject *) clsArg, &PY_TYPE(JObject)))
+ else if (!PyType_IsSubtype((PyTypeObject *) clsArg, PY_TYPE(JObject)))
{
PyErr_SetObject(PyExc_ValueError, clsArg);
return NULL;
Modified: lucene/pylucene/trunk/jcc/jcc3/sources/JArray.h
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/jcc3/sources/JArray.h?rev=1799796&r1=1799795&r2=1799796&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/jcc3/sources/JArray.h (original)
+++ lucene/pylucene/trunk/jcc/jcc3/sources/JArray.h Sun Jun 25 13:45:41 2017
@@ -197,7 +197,7 @@ template<> class JArray<jobject> : publi
if (PyBytes_Check(obj) || PyUnicode_Check(obj))
jobj = env->fromPyString(obj);
- else if (!PyObject_TypeCheck(obj, &PY_TYPE(JObject)))
+ else if (!PyObject_TypeCheck(obj, PY_TYPE(JObject)))
{
PyErr_SetObject(PyExc_TypeError, obj);
return -1;
Modified: lucene/pylucene/trunk/jcc/jcc3/sources/JCCEnv.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/jcc3/sources/JCCEnv.cpp?rev=1799796&r1=1799795&r2=1799796&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/jcc3/sources/JCCEnv.cpp (original)
+++ lucene/pylucene/trunk/jcc/jcc3/sources/JCCEnv.cpp Sun Jun 25 13:45:41 2017
@@ -512,7 +512,7 @@ bool JCCEnv::restorePythonException(jthr
{
jfieldID fid = vm_env->GetFieldID(pycls, "py_error_state", "J");
PyObject *state = (PyObject *) vm_env->GetLongField(throwable, fid);
-
+
if (state != NULL)
{
PyObject *type = PyTuple_GET_ITEM(state, 0);
Modified: lucene/pylucene/trunk/jcc/jcc3/sources/JObject.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/jcc3/sources/JObject.cpp?rev=1799796&r1=1799795&r2=1799796&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/jcc3/sources/JObject.cpp (original)
+++ lucene/pylucene/trunk/jcc/jcc3/sources/JObject.cpp Sun Jun 25 13:45:41 2017
@@ -49,7 +49,8 @@ static PyGetSetDef t_JObject_properties[
{ NULL, NULL, NULL, NULL, NULL }
};
-PyTypeObject PY_TYPE(JObject) = {
+
+static PyTypeObject JObject_type = {
PyVarObject_HEAD_INIT(NULL, 0)
"jcc.JObject", /* tp_name */
sizeof(t_JObject), /* tp_basicsize */
@@ -91,6 +92,10 @@ PyTypeObject PY_TYPE(JObject) = {
(newfunc)t_JObject_new, /* tp_new */
};
+// used only to hold a pointer to JObject_type once JObject type installed
+// so that Object type can be installed using JObject's spec (to get its base)
+PyType_Def PY_TYPE_DEF(JObject) = {};
+PyTypeObject *PY_TYPE(JObject) = &JObject_type;
static void t_JObject_dealloc(t_JObject *self)
{
@@ -115,7 +120,7 @@ static PyObject *t_JObject_richcmp(t_JOb
switch (op) {
case Py_EQ:
case Py_NE:
- if (PyObject_TypeCheck(arg, &PY_TYPE(JObject)))
+ if (PyObject_TypeCheck(arg, PY_TYPE(JObject)))
b = self->object == ((t_JObject *) arg)->object;
if (op == Py_EQ)
Py_RETURN_BOOL(b);
Modified: lucene/pylucene/trunk/jcc/jcc3/sources/JObject.h
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/jcc3/sources/JObject.h?rev=1799796&r1=1799795&r2=1799796&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/jcc3/sources/JObject.h (original)
+++ lucene/pylucene/trunk/jcc/jcc3/sources/JObject.h Sun Jun 25 13:45:41 2017
@@ -83,6 +83,9 @@ public:
return *this;
}
+protected:
+ JObject() {}
+
private:
int id; // zero when this$ is a weak ref */
};
@@ -99,7 +102,7 @@ public:
JObject object;
};
-extern PyTypeObject PY_TYPE(JObject);
+DECLARE_TYPE(JObject);
#endif /* PYTHON */
Modified: lucene/pylucene/trunk/jcc/jcc3/sources/functions.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/jcc3/sources/functions.cpp?rev=1799796&r1=1799795&r2=1799796&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/jcc3/sources/functions.cpp (original)
+++ lucene/pylucene/trunk/jcc/jcc3/sources/functions.cpp Sun Jun 25 13:45:41 2017
@@ -431,14 +431,14 @@ int _parseArgs(PyObject **args, unsigned
if (obj == Py_None)
ok = 1;
- else if (PyObject_TypeCheck(obj, &PY_TYPE(Object)) &&
+ else if (PyObject_TypeCheck(obj, PY_TYPE(Object)) &&
vm_env->IsInstanceOf(((t_Object *) obj)->object.this$, cls))
ok = 1;
- else if (PyObject_TypeCheck(obj, &PY_TYPE(FinalizerProxy)))
+ else if (PyObject_TypeCheck(obj, PY_TYPE(FinalizerProxy)))
{
PyObject *o = ((t_fp *) obj)->object;
- if (PyObject_TypeCheck(o, &PY_TYPE(Object)) &&
+ if (PyObject_TypeCheck(o, PY_TYPE(Object)) &&
vm_env->IsInstanceOf(((t_Object *) o)->object.this$, cls))
ok = 1;
}
@@ -457,14 +457,14 @@ int _parseArgs(PyObject **args, unsigned
if (arg == Py_None)
ok = 1;
- else if (PyObject_TypeCheck(arg, &PY_TYPE(Object)) &&
+ else if (PyObject_TypeCheck(arg, PY_TYPE(Object)) &&
vm_env->IsInstanceOf(((t_Object *) arg)->object.this$, cls))
ok = 1;
- else if (PyObject_TypeCheck(arg, &PY_TYPE(FinalizerProxy)))
+ else if (PyObject_TypeCheck(arg, PY_TYPE(FinalizerProxy)))
{
PyObject *o = ((t_fp *) arg)->object;
- if (PyObject_TypeCheck(o, &PY_TYPE(Object)) &&
+ if (PyObject_TypeCheck(o, PY_TYPE(Object)) &&
vm_env->IsInstanceOf(((t_Object *) o)->object.this$, cls))
ok = 1;
}
@@ -475,13 +475,13 @@ int _parseArgs(PyObject **args, unsigned
}
}
}
- else if (PyObject_TypeCheck(arg, &PY_TYPE(Object)) &&
+ else if (PyObject_TypeCheck(arg, PY_TYPE(Object)) &&
vm_env->IsInstanceOf(((t_Object *) arg)->object.this$, cls))
break;
- else if (PyObject_TypeCheck(arg, &PY_TYPE(FinalizerProxy)))
+ else if (PyObject_TypeCheck(arg, PY_TYPE(FinalizerProxy)))
{
arg = ((t_fp *) arg)->object;
- if (PyObject_TypeCheck(arg, &PY_TYPE(Object)) &&
+ if (PyObject_TypeCheck(arg, PY_TYPE(Object)) &&
vm_env->IsInstanceOf(((t_Object *) arg)->object.this$, cls))
break;
}
@@ -954,7 +954,7 @@ int _parseArgs(PyObject **args, unsigned
{
Object *obj = va_arg(list, Object *);
- if (PyObject_TypeCheck(arg, &PY_TYPE(FinalizerProxy)))
+ if (PyObject_TypeCheck(arg, PY_TYPE(FinalizerProxy)))
arg = ((t_fp *) arg)->object;
#ifdef _java_generics
@@ -1411,7 +1411,7 @@ void throwPythonError(void)
Py_XDECREF(traceback);
exc = je;
- if (exc && PyObject_TypeCheck(exc, &PY_TYPE(Throwable)))
+ if (exc && PyObject_TypeCheck(exc, PY_TYPE(Throwable)))
{
jobject jobj = ((t_Throwable *) exc)->object.this$;
@@ -1527,10 +1527,10 @@ PyObject *callSuper(PyTypeObject *type,
PyObject *castCheck(PyObject *obj, getclassfn initializeClass,
int reportError)
{
- if (PyObject_TypeCheck(obj, &PY_TYPE(FinalizerProxy)))
+ if (PyObject_TypeCheck(obj, PY_TYPE(FinalizerProxy)))
obj = ((t_fp *) obj)->object;
- if (!PyObject_TypeCheck(obj, &PY_TYPE(Object)))
+ if (!PyObject_TypeCheck(obj, PY_TYPE(Object)))
{
if (reportError)
PyErr_SetObject(PyExc_TypeError, obj);
@@ -1577,9 +1577,9 @@ static bool setArrayObj(jobjectArray arr
jobj = env->fromPyString(obj);
deleteLocal = true;
}
- else if (PyObject_TypeCheck(obj, &PY_TYPE(JObject)))
+ else if (PyObject_TypeCheck(obj, PY_TYPE(JObject)))
jobj = ((t_JObject *) obj)->object.this$;
- else if (PyObject_TypeCheck(obj, &PY_TYPE(FinalizerProxy)))
+ else if (PyObject_TypeCheck(obj, PY_TYPE(FinalizerProxy)))
jobj = ((t_JObject *) ((t_fp *) obj)->object)->object.this$;
else if (obj == Py_True || obj == Py_False)
{
@@ -1701,18 +1701,43 @@ jobjectArray fromPySequence(jclass cls,
return array;
}
-void installType(PyTypeObject *type, PyObject *module, char *name,
- int isExtension)
+PyTypeObject *makeType(PyType_Def *def)
{
- if (PyType_Ready(type) == 0)
+ if (def->type == NULL)
{
- Py_INCREF(type);
+ int count = 0;
+
+ for (PyType_Def **base = def->bases; *base != NULL; ++base)
+ count += 1;
+
+ PyObject *bases = PyTuple_New(count);
+
+ for (int i = 0; i < count; ++i)
+ PyTuple_SET_ITEM(bases, i, (PyObject *) makeType(def->bases[i]));
+
+ def->type = (PyTypeObject *)
+ PyType_FromSpecWithBases(&def->spec, bases);
+ Py_DECREF(bases);
+ }
+
+ return def->type;
+}
+
+void installType(PyTypeObject **type, PyType_Def *def,
+ PyObject *module, char *name, int isExtension)
+{
+ if (*type == NULL)
+ {
+ *type = makeType(def);
+ Py_INCREF(*type);
+
if (isExtension)
{
- Py_TYPE(type) = &PY_TYPE(FinalizerClass);
- Py_INCREF(&PY_TYPE(FinalizerClass));
+ Py_TYPE(*type) = PY_TYPE(FinalizerClass);
+ Py_INCREF(PY_TYPE(FinalizerClass));
}
- PyModule_AddObject(module, name, (PyObject *) type);
+
+ PyModule_AddObject(module, name, (PyObject *) *type);
}
}
@@ -1739,7 +1764,7 @@ PyObject *unboxBoolean(const jobject& ob
if (!env->isInstanceOf(obj, java::lang::Boolean::initializeClass))
{
PyErr_SetObject(PyExc_TypeError,
- (PyObject *) &java::lang::PY_TYPE(Boolean));
+ (PyObject *) java::lang::PY_TYPE(Boolean));
return NULL;
}
@@ -1759,7 +1784,7 @@ PyObject *unboxByte(const jobject &obj)
if (!env->isInstanceOf(obj, java::lang::Byte::initializeClass))
{
PyErr_SetObject(PyExc_TypeError,
- (PyObject *) &java::lang::PY_TYPE(Byte));
+ (PyObject *) java::lang::PY_TYPE(Byte));
return NULL;
}
@@ -1776,7 +1801,7 @@ PyObject *unboxCharacter(const jobject &
if (!env->isInstanceOf(obj, java::lang::Character::initializeClass))
{
PyErr_SetObject(PyExc_TypeError,
- (PyObject *) &java::lang::PY_TYPE(Character));
+ (PyObject *) java::lang::PY_TYPE(Character));
return NULL;
}
@@ -1793,7 +1818,7 @@ PyObject *unboxDouble(const jobject &obj
if (!env->isInstanceOf(obj, java::lang::Double::initializeClass))
{
PyErr_SetObject(PyExc_TypeError,
- (PyObject *) &java::lang::PY_TYPE(Double));
+ (PyObject *) java::lang::PY_TYPE(Double));
return NULL;
}
@@ -1810,7 +1835,7 @@ PyObject *unboxFloat(const jobject &obj)
if (!env->isInstanceOf(obj, java::lang::Float::initializeClass))
{
PyErr_SetObject(PyExc_TypeError,
- (PyObject *) &java::lang::PY_TYPE(Float));
+ (PyObject *) java::lang::PY_TYPE(Float));
return NULL;
}
@@ -1827,7 +1852,7 @@ PyObject *unboxInteger(const jobject &ob
if (!env->isInstanceOf(obj, java::lang::Integer::initializeClass))
{
PyErr_SetObject(PyExc_TypeError,
- (PyObject *) &java::lang::PY_TYPE(Integer));
+ (PyObject *) java::lang::PY_TYPE(Integer));
return NULL;
}
@@ -1844,7 +1869,7 @@ PyObject *unboxLong(const jobject &obj)
if (!env->isInstanceOf(obj, java::lang::Long::initializeClass))
{
PyErr_SetObject(PyExc_TypeError,
- (PyObject *) &java::lang::PY_TYPE(Long));
+ (PyObject *) java::lang::PY_TYPE(Long));
return NULL;
}
@@ -1861,7 +1886,7 @@ PyObject *unboxShort(const jobject &obj)
if (!env->isInstanceOf(obj, java::lang::Short::initializeClass))
{
PyErr_SetObject(PyExc_TypeError,
- (PyObject *) &java::lang::PY_TYPE(Short));
+ (PyObject *) java::lang::PY_TYPE(Short));
return NULL;
}
@@ -1878,7 +1903,7 @@ PyObject *unboxString(const jobject &obj
if (!env->isInstanceOf(obj, java::lang::String::initializeClass))
{
PyErr_SetObject(PyExc_TypeError,
- (PyObject *) &java::lang::PY_TYPE(String));
+ (PyObject *) java::lang::PY_TYPE(String));
return NULL;
}
@@ -1896,7 +1921,7 @@ static int boxJObject(PyTypeObject *type
if (obj != NULL)
*obj = Object(NULL);
}
- else if (PyObject_TypeCheck(arg, &PY_TYPE(Object)))
+ else if (PyObject_TypeCheck(arg, PY_TYPE(Object)))
{
if (type != NULL && !is_instance_of(arg, type))
return -1;
@@ -1904,10 +1929,10 @@ static int boxJObject(PyTypeObject *type
if (obj != NULL)
*obj = ((t_Object *) arg)->object;
}
- else if (PyObject_TypeCheck(arg, &PY_TYPE(FinalizerProxy)))
+ else if (PyObject_TypeCheck(arg, PY_TYPE(FinalizerProxy)))
{
arg = ((t_fp *) arg)->object;
- if (PyObject_TypeCheck(arg, &PY_TYPE(Object)))
+ if (PyObject_TypeCheck(arg, PY_TYPE(Object)))
{
if (type != NULL && !is_instance_of(arg, type))
return -1;
Modified: lucene/pylucene/trunk/jcc/jcc3/sources/functions.h
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/jcc3/sources/functions.h?rev=1799796&r1=1799795&r2=1799796&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/jcc3/sources/functions.h (original)
+++ lucene/pylucene/trunk/jcc/jcc3/sources/functions.h Sun Jun 25 13:45:41 2017
@@ -90,7 +90,7 @@ java::lang::String p2j(PyObject *object)
PyObject *j2p(const java::lang::String& js);
PyObject *c2p(jchar c);
-PyObject *make_descriptor(PyTypeObject *value);
+PyObject *make_descriptor(PyType_Def *value);
PyObject *make_descriptor(getclassfn initializeClass);
PyObject *make_descriptor(getclassfn initializeClass, int generics);
PyObject *make_descriptor(PyObject *value);
@@ -250,7 +250,7 @@ template<class T, class U, class V> PyOb
PyErr_SetNone(PyExc_StopIteration);
return NULL;
}
-
+
jclass cls = env->getClass(java::lang::String::initializeClass);
if (env->get_vm_env()->IsInstanceOf(next.this$, cls))
return env->fromJString((jstring) next.this$, 0);
@@ -271,15 +271,16 @@ jobjectArray fromPySequence(jclass cls,
jobjectArray fromPySequence(jclass cls, PyObject **args, int length);
PyObject *castCheck(PyObject *obj, getclassfn initializeClass,
int reportError);
-void installType(PyTypeObject *type, PyObject *module, char *name,
- int isExtension);
+PyTypeObject *makeType(PyType_Def *def);
+void installType(PyTypeObject **type, PyType_Def *spec, PyObject *module,
+ char *name, int isExtension);
#ifdef _java_generics
PyObject *typeParameters(PyTypeObject *types[], size_t size);
#endif
-extern PyTypeObject PY_TYPE(FinalizerClass);
-extern PyTypeObject PY_TYPE(FinalizerProxy);
+extern PyTypeObject *PY_TYPE(FinalizerClass);
+extern PyTypeObject *PY_TYPE(FinalizerProxy);
typedef struct {
PyObject_HEAD
Modified: lucene/pylucene/trunk/jcc/jcc3/sources/jcc.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/jcc3/sources/jcc.cpp?rev=1799796&r1=1799795&r2=1799796&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/jcc3/sources/jcc.cpp (original)
+++ lucene/pylucene/trunk/jcc/jcc3/sources/jcc.cpp Sun Jun 25 13:45:41 2017
@@ -83,7 +83,7 @@ static PyMethodDef t_jccenv_methods[] =
{ NULL, NULL, 0, NULL }
};
-PyTypeObject PY_TYPE(JCCEnv) = {
+static PyTypeObject JCCEnv_type = {
PyVarObject_HEAD_INIT(NULL, 0)
"jcc.JCCEnv", /* tp_name */
sizeof(t_jccenv), /* tp_basicsize */
@@ -123,6 +123,7 @@ PyTypeObject PY_TYPE(JCCEnv) = {
0, /* tp_alloc */
0, /* tp_new */
};
+PyTypeObject *PY_TYPE(JCCEnv) = &JCCEnv_type;
static void t_jccenv_dealloc(t_jccenv *self)
{
@@ -316,7 +317,7 @@ _DLL_EXPORT PyObject *getVMEnv(PyObject
{
if (env->vm != NULL)
{
- t_jccenv *jccenv = (t_jccenv *) PY_TYPE(JCCEnv).tp_alloc(&PY_TYPE(JCCEnv), 0);
+ t_jccenv *jccenv = (t_jccenv *) PY_TYPE(JCCEnv)->tp_alloc(PY_TYPE(JCCEnv), 0);
jccenv->env = env;
return (PyObject *) jccenv;
@@ -343,7 +344,7 @@ _DLL_EXPORT PyObject *initJCC(PyObject *
if (_once_only)
{
PyEval_InitThreads();
- INSTALL_TYPE(JCCEnv, module);
+ INSTALL_STATIC_TYPE(JCCEnv, module);
if (env == NULL)
env = new JCCEnv(NULL, NULL);
@@ -538,7 +539,7 @@ _DLL_EXPORT PyObject *initVM(PyObject *s
for (unsigned int i = 0; i < nOptions; i++)
delete vm_options[i].optionString;
- t_jccenv *jccenv = (t_jccenv *) PY_TYPE(JCCEnv).tp_alloc(&PY_TYPE(JCCEnv), 0);
+ t_jccenv *jccenv = (t_jccenv *) PY_TYPE(JCCEnv)->tp_alloc(PY_TYPE(JCCEnv), 0);
jccenv->env = env;
#ifdef _jcc_lib
Modified: lucene/pylucene/trunk/jcc/jcc3/sources/macros.h
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/jcc3/sources/macros.h?rev=1799796&r1=1799795&r2=1799796&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/jcc3/sources/macros.h (original)
+++ lucene/pylucene/trunk/jcc/jcc3/sources/macros.h Sun Jun 25 13:45:41 2017
@@ -63,56 +63,36 @@
#define DECLARE_GETSET_FIELD(type, name) \
{ #name, (getter) type##_get__##name, (setter) type##_set__##name, "", NULL }
-#define PY_TYPE(name) name##$$Type
+struct PyType_Def {
+ PyType_Spec spec;
+ PyTypeObject *type;
+ PyType_Def **bases; // NULL terminated array
+};
-#define DECLARE_TYPE(name, t_name, base, javaClass, \
- init, iter, iternext, getset, mapping, sequence) \
-PyTypeObject PY_TYPE(name) = { \
- PyVarObject_HEAD_INIT(NULL, 0) \
- /* tp_name */ #name, \
- /* tp_basicsize */ sizeof(t_name), \
- /* tp_itemsize */ 0, \
- /* tp_dealloc */ 0, \
- /* tp_print */ 0, \
- /* tp_getattr */ 0, \
- /* tp_setattr */ 0, \
- /* tp_compare */ 0, \
- /* tp_repr */ 0, \
- /* tp_as_number */ 0, \
- /* tp_as_sequence */ sequence, \
- /* tp_as_mapping */ mapping, \
- /* tp_hash */ 0, \
- /* tp_call */ 0, \
- /* tp_str */ 0, \
- /* tp_getattro */ 0, \
- /* tp_setattro */ 0, \
- /* tp_as_buffer */ 0, \
- /* tp_flags */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, \
- /* tp_doc */ #t_name" objects", \
- /* tp_traverse */ 0, \
- /* tp_clear */ 0, \
- /* tp_richcompare */ 0, \
- /* tp_weaklistoffset */ 0, \
- /* tp_iter */ (getiterfunc) iter, \
- /* tp_iternext */ (iternextfunc) iternext, \
- /* tp_methods */ t_name##__methods_, \
- /* tp_members */ 0, \
- /* tp_getset */ getset, \
- /* tp_base */ &PY_TYPE(base), \
- /* tp_dict */ 0, \
- /* tp_descr_get */ 0, \
- /* tp_descr_set */ 0, \
- /* tp_dictoffset */ 0, \
- /* tp_init */ (initproc)init, \
- /* tp_alloc */ 0, \
- /* tp_new */ 0, \
+#define PY_TYPE(name) name##$$Type
+#define PY_TYPE_DEF(name) name##$$TypeDef
+#define PY_TYPE_BASES(name) name##$$TypeBases
+#define PY_TYPE_SLOTS(name) name##$$TypeSlots
+
+#define DEFINE_TYPE(name, t_name, javaClass) \
+PyType_Def PY_TYPE_DEF(name) = { \
+ { \
+ #name, \
+ sizeof(t_name), \
+ 0, \
+ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, \
+ PY_TYPE_SLOTS(name) \
+ }, \
+ NULL, \
+ PY_TYPE_BASES(name), \
}; \
+PyTypeObject *PY_TYPE(name) = NULL; \
PyObject *t_name::wrap_Object(const javaClass& object) \
{ \
if (!!object) \
{ \
t_name *self = \
- (t_name *) PY_TYPE(name).tp_alloc(&PY_TYPE(name), 0); \
+ (t_name *) PY_TYPE(name)->tp_alloc(PY_TYPE(name), 0); \
if (self) \
self->object = object; \
return (PyObject *) self; \
@@ -126,11 +106,11 @@ PyObject *t_name::wrap_jobject(const job
if (!env->isInstanceOf(object, javaClass::initializeClass)) \
{ \
PyErr_SetObject(PyExc_TypeError, \
- (PyObject *) &PY_TYPE(name)); \
+ (PyObject *) PY_TYPE(name)); \
return NULL; \
} \
t_name *self = (t_name *) \
- PY_TYPE(name).tp_alloc(&PY_TYPE(name), 0); \
+ PY_TYPE(name)->tp_alloc(PY_TYPE(name), 0); \
if (self) \
self->object = javaClass(object); \
return (PyObject *) self; \
@@ -138,12 +118,18 @@ PyObject *t_name::wrap_jobject(const job
Py_RETURN_NONE; \
} \
+#define DECLARE_TYPE(name) \
+ extern PyType_Def PY_TYPE_DEF(name); \
+ extern PyTypeObject *PY_TYPE(name)
#define INSTALL_TYPE(name, module) \
- if (PyType_Ready(&PY_TYPE(name)) == 0) \
+ installType(&PY_TYPE(name), &PY_TYPE_DEF(name), module, #name, 0)
+
+#define INSTALL_STATIC_TYPE(name, module) \
+ if (PyType_Ready(PY_TYPE(name)) == 0) \
{ \
- Py_INCREF(&PY_TYPE(name)); \
- PyModule_AddObject(module, #name, (PyObject *) &PY_TYPE(name)); \
+ Py_INCREF(PY_TYPE(name)); \
+ PyModule_AddObject(module, #name, (PyObject *) PY_TYPE(name)); \
}
Modified: lucene/pylucene/trunk/jcc/jcc3/sources/types.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/jcc3/sources/types.cpp?rev=1799796&r1=1799795&r2=1799796&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/jcc3/sources/types.cpp (original)
+++ lucene/pylucene/trunk/jcc/jcc3/sources/types.cpp Sun Jun 25 13:45:41 2017
@@ -49,7 +49,7 @@ static PyObject *t_fp_seq_inplace_concat
static PyObject *t_fp_seq_inplace_repeat(t_fp *self, Py_ssize_t n);
-PyTypeObject PY_TYPE(FinalizerClass) = {
+static PyTypeObject FinalizerClass_type = {
PyVarObject_HEAD_INIT(NULL, 0)
"jcc.FinalizerClass", /* tp_name */
PyType_Type.tp_basicsize, /* tp_basicsize */
@@ -89,6 +89,7 @@ PyTypeObject PY_TYPE(FinalizerClass) = {
0, /* tp_alloc */
0, /* tp_new */
};
+PyTypeObject *PY_TYPE(FinalizerClass) = &FinalizerClass_type;
static PyMappingMethods t_fp_as_mapping = {
(lenfunc)t_fp_map_length, /* mp_length */
@@ -109,7 +110,7 @@ static PySequenceMethods t_fp_as_sequenc
(ssizeargfunc)t_fp_seq_inplace_repeat, /* sq_inplace_repeat */
};
-PyTypeObject PY_TYPE(FinalizerProxy) = {
+static PyTypeObject FinalizerProxy_type = {
PyVarObject_HEAD_INIT(NULL, 0)
"jcc.FinalizerProxy", /* tp_name */
sizeof(t_fp), /* tp_basicsize */
@@ -150,6 +151,7 @@ PyTypeObject PY_TYPE(FinalizerProxy) = {
0, /* tp_alloc */
0, /* tp_new */
};
+PyTypeObject *PY_TYPE(FinalizerProxy) = &FinalizerProxy_type;
static PyObject *t_fc_call(PyObject *self, PyObject *args, PyObject *kwds)
{
@@ -157,7 +159,7 @@ static PyObject *t_fc_call(PyObject *sel
if (obj)
{
- t_fp *fp = (t_fp *) PY_TYPE(FinalizerProxy).tp_alloc(&PY_TYPE(FinalizerProxy), 0);
+ t_fp *fp = (t_fp *) PY_TYPE(FinalizerProxy)->tp_alloc(PY_TYPE(FinalizerProxy), 0);
fp->object = obj; /* released by t_fp_clear() */
obj = (PyObject *) fp;
@@ -292,7 +294,7 @@ static PyMethodDef t_descriptor_methods[
};
-PyTypeObject PY_TYPE(ConstVariableDescriptor) = {
+static PyTypeObject ConstVariableDescriptor_type = {
PyVarObject_HEAD_INIT(NULL, 0)
"jcc.ConstVariableDescriptor", /* tp_name */
sizeof(t_descriptor), /* tp_basicsize */
@@ -332,6 +334,7 @@ PyTypeObject PY_TYPE(ConstVariableDescri
0, /* tp_alloc */
0, /* tp_new */
};
+PyTypeObject *PY_TYPE(ConstVariableDescriptor) = &ConstVariableDescriptor_type;
static void t_descriptor_dealloc(t_descriptor *self)
{
@@ -342,15 +345,17 @@ static void t_descriptor_dealloc(t_descr
self->ob_base.ob_type->tp_free((PyObject *) self);
}
-PyObject *make_descriptor(PyTypeObject *value)
+PyObject *make_descriptor(PyType_Def *value)
{
t_descriptor *self = (t_descriptor *)
- PY_TYPE(ConstVariableDescriptor).tp_alloc(&PY_TYPE(ConstVariableDescriptor), 0);
+ PY_TYPE(ConstVariableDescriptor)->tp_alloc(PY_TYPE(ConstVariableDescriptor), 0);
if (self)
{
- Py_INCREF(value);
- self->access.value = (PyObject *) value;
+ PyTypeObject *type = makeType(value);
+
+ Py_INCREF(type);
+ self->access.value = (PyObject *) type;
self->flags = DESCRIPTOR_VALUE;
}
@@ -360,7 +365,7 @@ PyObject *make_descriptor(PyTypeObject *
PyObject *make_descriptor(getclassfn initializeClass)
{
t_descriptor *self = (t_descriptor *)
- PY_TYPE(ConstVariableDescriptor).tp_alloc(&PY_TYPE(ConstVariableDescriptor), 0);
+ PY_TYPE(ConstVariableDescriptor)->tp_alloc(PY_TYPE(ConstVariableDescriptor), 0);
if (self)
{
@@ -384,7 +389,7 @@ PyObject *make_descriptor(getclassfn ini
PyObject *make_descriptor(PyObject *value)
{
t_descriptor *self = (t_descriptor *)
- PY_TYPE(ConstVariableDescriptor).tp_alloc(&PY_TYPE(ConstVariableDescriptor), 0);
+ PY_TYPE(ConstVariableDescriptor)->tp_alloc(PY_TYPE(ConstVariableDescriptor), 0);
if (self)
{
@@ -410,7 +415,7 @@ PyObject *make_descriptor(boxfn fn)
PyObject *make_descriptor(jboolean b)
{
t_descriptor *self = (t_descriptor *)
- PY_TYPE(ConstVariableDescriptor).tp_alloc(&PY_TYPE(ConstVariableDescriptor), 0);
+ PY_TYPE(ConstVariableDescriptor)->tp_alloc(PY_TYPE(ConstVariableDescriptor), 0);
if (self)
{
@@ -425,7 +430,7 @@ PyObject *make_descriptor(jboolean b)
PyObject *make_descriptor(jbyte value)
{
t_descriptor *self = (t_descriptor *)
- PY_TYPE(ConstVariableDescriptor).tp_alloc(&PY_TYPE(ConstVariableDescriptor), 0);
+ PY_TYPE(ConstVariableDescriptor)->tp_alloc(PY_TYPE(ConstVariableDescriptor), 0);
if (self)
{
@@ -439,7 +444,7 @@ PyObject *make_descriptor(jbyte value)
PyObject *make_descriptor(jchar value)
{
t_descriptor *self = (t_descriptor *)
- PY_TYPE(ConstVariableDescriptor).tp_alloc(&PY_TYPE(ConstVariableDescriptor), 0);
+ PY_TYPE(ConstVariableDescriptor)->tp_alloc(PY_TYPE(ConstVariableDescriptor), 0);
if (self)
{
@@ -453,7 +458,7 @@ PyObject *make_descriptor(jchar value)
PyObject *make_descriptor(jdouble value)
{
t_descriptor *self = (t_descriptor *)
- PY_TYPE(ConstVariableDescriptor).tp_alloc(&PY_TYPE(ConstVariableDescriptor), 0);
+ PY_TYPE(ConstVariableDescriptor)->tp_alloc(PY_TYPE(ConstVariableDescriptor), 0);
if (self)
{
@@ -467,7 +472,7 @@ PyObject *make_descriptor(jdouble value)
PyObject *make_descriptor(jfloat value)
{
t_descriptor *self = (t_descriptor *)
- PY_TYPE(ConstVariableDescriptor).tp_alloc(&PY_TYPE(ConstVariableDescriptor), 0);
+ PY_TYPE(ConstVariableDescriptor)->tp_alloc(PY_TYPE(ConstVariableDescriptor), 0);
if (self)
{
@@ -481,7 +486,7 @@ PyObject *make_descriptor(jfloat value)
PyObject *make_descriptor(jint value)
{
t_descriptor *self = (t_descriptor *)
- PY_TYPE(ConstVariableDescriptor).tp_alloc(&PY_TYPE(ConstVariableDescriptor), 0);
+ PY_TYPE(ConstVariableDescriptor)->tp_alloc(PY_TYPE(ConstVariableDescriptor), 0);
if (self)
{
@@ -495,7 +500,7 @@ PyObject *make_descriptor(jint value)
PyObject *make_descriptor(jlong value)
{
t_descriptor *self = (t_descriptor *)
- PY_TYPE(ConstVariableDescriptor).tp_alloc(&PY_TYPE(ConstVariableDescriptor), 0);
+ PY_TYPE(ConstVariableDescriptor)->tp_alloc(PY_TYPE(ConstVariableDescriptor), 0);
if (self)
{
@@ -509,7 +514,7 @@ PyObject *make_descriptor(jlong value)
PyObject *make_descriptor(jshort value)
{
t_descriptor *self = (t_descriptor *)
- PY_TYPE(ConstVariableDescriptor).tp_alloc(&PY_TYPE(ConstVariableDescriptor), 0);
+ PY_TYPE(ConstVariableDescriptor)->tp_alloc(PY_TYPE(ConstVariableDescriptor), 0);
if (self)
{