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/05/19 06:44:16 UTC
svn commit: r946024 - in /lucene/pylucene/trunk/jcc: _jcc/java/lang/
_jcc/java/lang/reflect/ jcc/ jcc/sources/
Author: vajda
Date: Wed May 19 04:44:16 2010
New Revision: 946024
URL: http://svn.apache.org/viewvc?rev=946024&view=rev
Log:
reworked jcc exceptions to be ints
Modified:
lucene/pylucene/trunk/jcc/_jcc/java/lang/Class.cpp
lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Modifier.cpp
lucene/pylucene/trunk/jcc/jcc/python.py
lucene/pylucene/trunk/jcc/jcc/sources/JArray.h
lucene/pylucene/trunk/jcc/jcc/sources/JCCEnv.cpp
lucene/pylucene/trunk/jcc/jcc/sources/JCCEnv.h
lucene/pylucene/trunk/jcc/jcc/sources/functions.cpp
lucene/pylucene/trunk/jcc/jcc/sources/functions.h
lucene/pylucene/trunk/jcc/jcc/sources/macros.h
Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/Class.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/Class.cpp?rev=946024&r1=946023&r2=946024&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/Class.cpp (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/Class.cpp Wed May 19 04:44:16 2010
@@ -406,8 +406,13 @@ namespace java {
String name = String(env->fromUTF(className));
return t_Class::wrap_Object(Class::forName(name));
- } catch (JCCEnv::exception e) {
- return PyErr_SetJavaError(e.throwable);
+ } catch (int e) {
+ switch (e) {
+ case _EXC_JAVA:
+ return PyErr_SetJavaError();
+ default:
+ throw;
+ }
}
}
@@ -518,8 +523,13 @@ namespace java {
int isAssignableFrom = self->object.isAssignableFrom(cls);
Py_RETURN_BOOL(isAssignableFrom);
- } catch (JCCEnv::exception e) {
- return PyErr_SetJavaError(e.throwable);
+ } catch (int e) {
+ switch (e) {
+ case _EXC_JAVA:
+ return PyErr_SetJavaError();
+ default:
+ throw;
+ }
}
}
Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Modifier.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Modifier.cpp?rev=946024&r1=946023&r2=946024&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Modifier.cpp (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Modifier.cpp Wed May 19 04:44:16 2010
@@ -156,14 +156,11 @@ namespace java {
return NULL;
}
- try {
- int mod = PyInt_AsLong(arg);
- int isPublic = Modifier::isPublic(mod);
-
- Py_RETURN_BOOL(isPublic);
- } catch (JCCEnv::exception e) {
- return PyErr_SetJavaError(e.throwable);
- }
+ int mod = PyInt_AsLong(arg);
+ int isPublic;
+
+ OBJ_CALL(isPublic = Modifier::isPublic(mod));
+ Py_RETURN_BOOL(isPublic);
}
static PyObject *t_Modifier_isStatic(PyTypeObject *type, PyObject *arg)
@@ -174,14 +171,11 @@ namespace java {
return NULL;
}
- try {
- int mod = PyInt_AsLong(arg);
- int isStatic = Modifier::isStatic(mod);
-
- Py_RETURN_BOOL(isStatic);
- } catch (JCCEnv::exception e) {
- return PyErr_SetJavaError(e.throwable);
- }
+ int mod = PyInt_AsLong(arg);
+ int isStatic;
+
+ OBJ_CALL(isStatic = Modifier::isStatic(mod));
+ Py_RETURN_BOOL(isStatic);
}
static PyObject *t_Modifier_isNative(PyTypeObject *type, PyObject *arg)
@@ -192,14 +186,11 @@ namespace java {
return NULL;
}
- try {
- int mod = PyInt_AsLong(arg);
- int isNative = Modifier::isNative(mod);
-
- Py_RETURN_BOOL(isNative);
- } catch (JCCEnv::exception e) {
- return PyErr_SetJavaError(e.throwable);
- }
+ int mod = PyInt_AsLong(arg);
+ int isNative;
+
+ OBJ_CALL(isNative = Modifier::isNative(mod));
+ Py_RETURN_BOOL(isNative);
}
static PyObject *t_Modifier_isFinal(PyTypeObject *type, PyObject *arg)
@@ -210,14 +201,11 @@ namespace java {
return NULL;
}
- try {
- int mod = PyInt_AsLong(arg);
- int isFinal = Modifier::isFinal(mod);
-
- Py_RETURN_BOOL(isFinal);
- } catch (JCCEnv::exception e) {
- return PyErr_SetJavaError(e.throwable);
- }
+ int mod = PyInt_AsLong(arg);
+ int isFinal;
+
+ OBJ_CALL(isFinal = Modifier::isFinal(mod));
+ Py_RETURN_BOOL(isFinal);
}
static PyObject *t_Modifier_isAbstract(PyTypeObject *type, PyObject *arg)
@@ -228,14 +216,11 @@ namespace java {
return NULL;
}
- try {
- int mod = PyInt_AsLong(arg);
- int isAbstract = Modifier::isAbstract(mod);
-
- Py_RETURN_BOOL(isAbstract);
- } catch (JCCEnv::exception e) {
- return PyErr_SetJavaError(e.throwable);
- }
+ int mod = PyInt_AsLong(arg);
+ int isAbstract;
+
+ OBJ_CALL(isAbstract = Modifier::isAbstract(mod));
+ Py_RETURN_BOOL(isAbstract);
}
static PyObject *t_Modifier_isPrivate(PyTypeObject *type, PyObject *arg)
@@ -246,14 +231,11 @@ namespace java {
return NULL;
}
- try {
- int mod = PyInt_AsLong(arg);
- int isPrivate = Modifier::isPrivate(mod);
-
- Py_RETURN_BOOL(isPrivate);
- } catch (JCCEnv::exception e) {
- return PyErr_SetJavaError(e.throwable);
- }
+ int mod = PyInt_AsLong(arg);
+ int isPrivate;
+
+ OBJ_CALL(isPrivate = Modifier::isPrivate(mod));
+ Py_RETURN_BOOL(isPrivate);
}
static PyObject *t_Modifier_isProtected(PyTypeObject *type, PyObject *arg)
@@ -264,14 +246,11 @@ namespace java {
return NULL;
}
- try {
- int mod = PyInt_AsLong(arg);
- int isProtected = Modifier::isProtected(mod);
-
- Py_RETURN_BOOL(isProtected);
- } catch (JCCEnv::exception e) {
- return PyErr_SetJavaError(e.throwable);
- }
+ int mod = PyInt_AsLong(arg);
+ int isProtected;
+
+ OBJ_CALL(isProtected = Modifier::isProtected(mod));
+ Py_RETURN_BOOL(isProtected);
}
}
}
Modified: lucene/pylucene/trunk/jcc/jcc/python.py
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/jcc/python.py?rev=946024&r1=946023&r2=946024&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/jcc/python.py (original)
+++ lucene/pylucene/trunk/jcc/jcc/python.py Wed May 19 04:44:16 2010
@@ -1466,9 +1466,13 @@ def package(out, allInOne, cppdir, names
if not names:
line(out, indent + 1, 'return env;')
indent -= 1
- line(out, indent + 1, '} catch (JCCEnv::exception e) {')
- line(out, indent + 2, 'PyErr_SetJavaError(e.throwable);')
- line(out, indent + 2, 'return NULL;')
+ line(out, indent + 1, '} catch (int e) {')
+ line(out, indent + 2, 'switch(e) {')
+ line(out, indent + 2, ' case _EXC_JAVA:')
+ line(out, indent + 3, 'return PyErr_SetJavaError();')
+ line(out, indent + 2, ' default:')
+ line(out, indent + 3, 'throw;')
+ line(out, indent + 2, '}')
line(out, indent + 1, '}')
line(out, indent, '}')
@@ -1793,9 +1797,9 @@ def compile(env, jccPath, output, module
for import_ in imports
]
args['define_macros'] += [
- ("_dll_%s" %(import_.__name__), '_declspec(dllimport)')
+ ("_dll_%s" %(import_.__name__), '__declspec(dllimport)')
for import_ in imports
- ] + [("_dll_%s" %(moduleName), '_declspec(dllexport)')]
+ ] + [("_dll_%s" %(moduleName), '__declspec(dllexport)')]
else:
raise NotImplementedError, "shared mode on %s" %(sys.platform)
Modified: lucene/pylucene/trunk/jcc/jcc/sources/JArray.h
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/jcc/sources/JArray.h?rev=946024&r1=946023&r2=946024&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/jcc/sources/JArray.h (original)
+++ lucene/pylucene/trunk/jcc/jcc/sources/JArray.h Wed May 19 04:44:16 2010
@@ -20,7 +20,7 @@
#include "macros.h"
extern jobjectArray fromPySequence(jclass cls, PyObject *sequence);
-extern PyObject *PyErr_SetJavaError(jthrowable throwable);
+extern PyObject *PyErr_SetJavaError();
extern PyTypeObject *PY_TYPE(JArrayObject);
extern PyTypeObject *PY_TYPE(JArrayString);
@@ -189,9 +189,14 @@ template<> class JArray<jobject> : publi
try {
env->setObjectArrayElement((jobjectArray) this$, n, jobj);
- } catch (JCCEnv::exception e) {
- PyErr_SetJavaError(e.throwable);
- return -1;
+ } catch (int e) {
+ switch (e) {
+ case _EXC_JAVA:
+ PyErr_SetJavaError();
+ return -1;
+ default:
+ throw;
+ }
}
return 0;
Modified: lucene/pylucene/trunk/jcc/jcc/sources/JCCEnv.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/jcc/sources/JCCEnv.cpp?rev=946024&r1=946023&r2=946024&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/jcc/sources/JCCEnv.cpp (original)
+++ lucene/pylucene/trunk/jcc/jcc/sources/JCCEnv.cpp Wed May 19 04:44:16 2010
@@ -215,11 +215,11 @@ jclass JCCEnv::findClass(const char *cla
PythonGIL gil;
PyErr_SetString(PyExc_RuntimeError, "attachCurrentThread() must be called first");
- throw pythonError(NULL);
+ throw _EXC_PYTHON;
}
#else
else
- throw exception(NULL);
+ throw _EXC_JAVA;
#endif
}
#ifdef PYTHON
@@ -228,11 +228,11 @@ jclass JCCEnv::findClass(const char *cla
PythonGIL gil;
PyErr_SetString(PyExc_RuntimeError, "initVM() must be called first");
- throw pythonError(NULL);
+ throw _EXC_PYTHON;
}
#else
else
- throw exception(NULL);
+ throw _EXC_JAVA;
#endif
reportException();
@@ -345,11 +345,11 @@ jobject JCCEnv::newObject(getclassfn ini
PythonGIL gil;
PyErr_SetString(PyExc_RuntimeError, "attachCurrentThread() must be called first");
- throw pythonError(NULL);
+ throw _EXC_PYTHON;
}
#else
else
- throw exception(NULL);
+ throw _EXC_JAVA;
#endif
reportException();
@@ -405,8 +405,6 @@ void JCCEnv::reportException() const
if (!env->handlers)
vm_env->ExceptionDescribe();
- vm_env->ExceptionClear();
-
#ifdef PYTHON
PythonGIL gil;
@@ -418,11 +416,11 @@ void JCCEnv::reportException() const
jobject cls = (jobject) vm_env->GetObjectClass(throwable);
if (vm_env->IsSameObject(cls, _thr))
- throw pythonError(throwable);
+ throw _EXC_PYTHON;
}
#endif
- throw exception(throwable);
+ throw _EXC_JAVA;
}
}
Modified: lucene/pylucene/trunk/jcc/jcc/sources/JCCEnv.h
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/jcc/sources/JCCEnv.h?rev=946024&r1=946023&r2=946024&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/jcc/sources/JCCEnv.h (original)
+++ lucene/pylucene/trunk/jcc/jcc/sources/JCCEnv.h Wed May 19 04:44:16 2010
@@ -67,9 +67,12 @@ extern JCCEnv *env;
#endif
+#define _EXC_PYTHON ((int) 0)
+#define _EXC_JAVA ((int) 1)
+
typedef jclass (*getclassfn)(void);
-class countedRef {
+class _DLL_EXPORT countedRef {
public:
jobject global;
int count;
@@ -106,24 +109,6 @@ public:
std::multimap<int, countedRef> refs;
int handlers;
- class exception {
- public:
- jthrowable throwable;
- exception(jthrowable throwable) {
- this->throwable = throwable;
- }
- };
-
-#ifdef PYTHON
- class pythonError {
- public:
- jthrowable throwable;
- pythonError(jthrowable throwable) {
- this->throwable = throwable;
- }
- };
-#endif
-
explicit JCCEnv(JavaVM *vm, JNIEnv *env);
virtual ~JCCEnv() {};
Modified: lucene/pylucene/trunk/jcc/jcc/sources/functions.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/jcc/sources/functions.cpp?rev=946024&r1=946023&r2=946024&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/jcc/sources/functions.cpp (original)
+++ lucene/pylucene/trunk/jcc/jcc/sources/functions.cpp Wed May 19 04:44:16 2010
@@ -81,11 +81,15 @@ PyObject *findClass(PyObject *self, PyOb
if (cls)
return t_Class::wrap_Object(Class(cls));
- } catch (JCCEnv::pythonError) {
- return NULL;
- } catch (JCCEnv::exception e) {
- PyErr_SetJavaError(e.throwable);
- return NULL;
+ } catch (int e) {
+ switch (e) {
+ case _EXC_PYTHON:
+ return NULL;
+ case _EXC_JAVA:
+ return PyErr_SetJavaError();
+ default:
+ throw;
+ }
}
Py_RETURN_NONE;
@@ -213,11 +217,16 @@ int _parseArgs(PyObject **args, unsigned
try {
getclassfn initializeClass = va_arg(list, getclassfn);
cls = (*initializeClass)();
- } catch (JCCEnv::pythonError) {
- return -1;
- } catch (JCCEnv::exception e) {
- PyErr_SetJavaError(e.throwable);
- return -1;
+ } catch (int e) {
+ switch (e) {
+ case _EXC_PYTHON:
+ return -1;
+ case _EXC_JAVA:
+ PyErr_SetJavaError();
+ return -1;
+ default:
+ throw;
+ }
}
break;
}
@@ -1016,9 +1025,14 @@ PyObject *PyErr_SetArgsError(PyTypeObjec
return NULL;
}
-PyObject *PyErr_SetJavaError(jthrowable throwable)
+PyObject *PyErr_SetJavaError()
{
- PyObject *err = t_Throwable::wrap_Object(Throwable(throwable));
+ JNIEnv *vm_env = env->get_vm_env();
+ jthrowable throwable = vm_env->ExceptionOccurred();
+ PyObject *err;
+
+ vm_env->ExceptionClear();
+ err = t_Throwable::wrap_Object(Throwable(throwable));
PyErr_SetObject(PyExc_JavaError, err);
Py_DECREF(err);
@@ -1229,11 +1243,16 @@ jobjectArray fromPySequence(jclass cls,
try {
array = env->newObjectArray(cls, length);
- } catch (JCCEnv::pythonError) {
- return NULL;
- } catch (JCCEnv::exception e) {
- PyErr_SetJavaError(e.throwable);
- return NULL;
+ } catch (int e) {
+ switch (e) {
+ case _EXC_PYTHON:
+ return NULL;
+ case _EXC_JAVA:
+ PyErr_SetJavaError();
+ return NULL;
+ default:
+ throw;
+ }
}
JNIEnv *vm_env = env->get_vm_env();
@@ -1269,9 +1288,14 @@ jobjectArray fromPySequence(jclass cls,
env->setObjectArrayElement(array, i, jobj);
if (fromString)
vm_env->DeleteLocalRef(jobj);
- } catch (JCCEnv::exception e) {
- PyErr_SetJavaError(e.throwable);
- return NULL;
+ } catch (int e) {
+ switch (e) {
+ case _EXC_JAVA:
+ PyErr_SetJavaError();
+ return NULL;
+ default:
+ throw;
+ }
}
}
Modified: lucene/pylucene/trunk/jcc/jcc/sources/functions.h
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/jcc/sources/functions.h?rev=946024&r1=946023&r2=946024&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/jcc/sources/functions.h (original)
+++ lucene/pylucene/trunk/jcc/jcc/sources/functions.h Wed May 19 04:44:16 2010
@@ -36,7 +36,7 @@ typedef int (*boxfn)(PyTypeObject *, PyO
PyObject *PyErr_SetArgsError(char *name, PyObject *args);
PyObject *PyErr_SetArgsError(PyObject *self, char *name, PyObject *args);
PyObject *PyErr_SetArgsError(PyTypeObject *type, char *name, PyObject *args);
-PyObject *PyErr_SetJavaError(jthrowable throwable);
+PyObject *PyErr_SetJavaError();
extern PyObject *PyExc_JavaError;
extern PyObject *PyExc_InvalidArgsError;
Modified: lucene/pylucene/trunk/jcc/jcc/sources/macros.h
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/jcc/sources/macros.h?rev=946024&r1=946023&r2=946024&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/jcc/sources/macros.h (original)
+++ lucene/pylucene/trunk/jcc/jcc/sources/macros.h Wed May 19 04:44:16 2010
@@ -20,10 +20,15 @@
try { \
PythonThreadState state(1); \
action; \
- } catch (JCCEnv::pythonError) { \
- return NULL; \
- } catch (JCCEnv::exception e) { \
- return PyErr_SetJavaError(e.throwable); \
+ } catch (int e) { \
+ switch (e) { \
+ case _EXC_PYTHON: \
+ return NULL; \
+ case _EXC_JAVA: \
+ return PyErr_SetJavaError(); \
+ default: \
+ throw; \
+ } \
} \
}
@@ -32,11 +37,16 @@
try { \
PythonThreadState state(1); \
action; \
- } catch (JCCEnv::pythonError) { \
- return -1; \
- } catch (JCCEnv::exception e) { \
- PyErr_SetJavaError(e.throwable); \
- return -1; \
+ } catch (int e) { \
+ switch (e) { \
+ case _EXC_PYTHON: \
+ return -1; \
+ case _EXC_JAVA: \
+ PyErr_SetJavaError(); \
+ return -1; \
+ default: \
+ throw; \
+ } \
} \
}