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 2010/04/06 22:07:33 UTC
svn commit: r931300 - in /lucene/pylucene/trunk/jcc: CHANGES jcc/python.py
jcc/sources/functions.cpp jcc/sources/functions.h
Author: vajda
Date: Tue Apr 6 20:07:33 2010
New Revision: 931300
URL: http://svn.apache.org/viewvc?rev=931300&view=rev
Log:
- added support for auto-boxing CharSequence from python strings
Modified:
lucene/pylucene/trunk/jcc/CHANGES
lucene/pylucene/trunk/jcc/jcc/python.py
lucene/pylucene/trunk/jcc/jcc/sources/functions.cpp
lucene/pylucene/trunk/jcc/jcc/sources/functions.h
Modified: lucene/pylucene/trunk/jcc/CHANGES
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/CHANGES?rev=931300&r1=931299&r2=931300&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/CHANGES (original)
+++ lucene/pylucene/trunk/jcc/CHANGES Tue Apr 6 20:07:33 2010
@@ -12,6 +12,7 @@ Version 2.5 ->
- fixed bug with not heeding type parameter for --sequence get method
- parameterized return values are now unboxed
- improved auto-boxing of primitive type parameters
+ - added support for auto-boxing CharSequence from python strings
-
Version 2.4 -> 2.5
Modified: lucene/pylucene/trunk/jcc/jcc/python.py
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/jcc/python.py?rev=931300&r1=931299&r2=931300&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/jcc/python.py (original)
+++ lucene/pylucene/trunk/jcc/jcc/python.py Tue Apr 6 20:07:33 2010
@@ -52,15 +52,23 @@ CALLARGS = { 'boolean': ('O', '(%s ? Py_
'short': ('i', '(int) %s', False),
'java.lang.String': ('O', 'env->fromJString((jstring) %s, 0)', True) }
-BOXED = set(('java.lang.Boolean',
- 'java.lang.Byte',
- 'java.lang.Character',
- 'java.lang.Double',
- 'java.lang.Float',
- 'java.lang.Integer',
- 'java.lang.Long',
- 'java.lang.Short',
- 'java.lang.String'))
+BOXED = { 'java.lang.Boolean': (True, True),
+ 'java.lang.Byte': (True, True),
+ 'java.lang.Character': (True, True),
+ 'java.lang.CharSequence': (True, False),
+ 'java.lang.Double': (True, True),
+ 'java.lang.Float': (True, True),
+ 'java.lang.Integer': (True, True),
+ 'java.lang.Long': (True, True),
+ 'java.lang.Short': (True, True),
+ 'java.lang.String': (True, True) }
+
+
+def is_boxed(clsName):
+ return BOXED.get(clsName, (False, False))[0]
+
+def is_unboxed(clsName):
+ return BOXED.get(clsName, (False, False))[1]
def getTypeParameters(cls):
@@ -107,7 +115,7 @@ def parseArgs(params, current, generics,
return array + 's'
if clsName == 'java.lang.Object':
return array + 'o'
- if clsName in BOXED:
+ if is_boxed(clsName):
return array + 'O'
if generics and getTypeParameters(cls):
return array + 'K'
@@ -130,7 +138,7 @@ def parseArgs(params, current, generics,
if (cls.isPrimitive() or
clsName in ('java.lang.String', 'java.lang.Object')):
return ''
- if clsName in BOXED:
+ if is_boxed(clsName):
clsNames = clsName.split('.')
return ', &%s::%s$$Type' %('::'.join(cppnames(clsNames[:-1])), cppname(clsNames[-1]))
return ', %s::initializeClass' %(typename(cls, current, False))
@@ -1015,7 +1023,7 @@ def python(env, out_h, out, cls, superCl
line(out, indent + 1, 'PyDict_SetItemString(%s$$Type.tp_dict, "class_", make_descriptor(%s::initializeClass, %s));',
names[-1], cppname(names[-1]), generics and 1 or 0)
- if cls.getName() in BOXED:
+ if is_unboxed(cls.getName()):
wrapfn_ = "unbox%s" %(names[-1])
boxfn_ = "box%s" %(names[-1])
else:
Modified: lucene/pylucene/trunk/jcc/jcc/sources/functions.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/jcc/sources/functions.cpp?rev=931300&r1=931299&r2=931300&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/jcc/sources/functions.cpp (original)
+++ lucene/pylucene/trunk/jcc/jcc/sources/functions.cpp Tue Apr 6 20:07:33 2010
@@ -1610,6 +1610,28 @@ int boxCharacter(PyTypeObject *type, PyO
return 0;
}
+int boxCharSequence(PyTypeObject *type, PyObject *arg, java::lang::Object *obj)
+{
+ int result = boxJObject(type, arg, obj);
+
+ if (result <= 0)
+ return result;
+
+ if (PyString_Check(arg) || PyUnicode_Check(arg))
+ {
+ if (obj != NULL)
+ {
+ *obj = p2j(arg);
+ if (PyErr_Occurred())
+ return -1;
+ }
+ }
+ else
+ return -1;
+
+ return 0;
+}
+
int boxDouble(PyTypeObject *type, PyObject *arg, java::lang::Object *obj)
{
int result = boxJObject(type, arg, obj);
Modified: lucene/pylucene/trunk/jcc/jcc/sources/functions.h
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/jcc/sources/functions.h?rev=931300&r1=931299&r2=931300&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/jcc/sources/functions.h (original)
+++ lucene/pylucene/trunk/jcc/jcc/sources/functions.h Tue Apr 6 20:07:33 2010
@@ -85,6 +85,7 @@ PyObject *unboxString(const jobject& obj
int boxBoolean(PyTypeObject *type, PyObject *arg, java::lang::Object *obj);
int boxByte(PyTypeObject *type, PyObject *arg, java::lang::Object *obj);
int boxCharacter(PyTypeObject *type, PyObject *arg, java::lang::Object *obj);
+int boxCharSequence(PyTypeObject *type, PyObject *arg, java::lang::Object *obj);
int boxDouble(PyTypeObject *type, PyObject *arg, java::lang::Object *obj);
int boxFloat(PyTypeObject *type, PyObject *arg, java::lang::Object *obj);
int boxInteger(PyTypeObject *type, PyObject *arg, java::lang::Object *obj);