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;                                                  \
+            }                                                           \
         }                                                               \
     }