summaryrefslogtreecommitdiffstatshomepage
path: root/unix/modjni.c
diff options
context:
space:
mode:
authorPaul Sokolovsky <pfalcon@users.sourceforge.net>2015-10-01 01:19:33 -0700
committerPaul Sokolovsky <pfalcon@users.sourceforge.net>2015-10-01 01:20:56 -0700
commitc4489a05433b2878d0598d77bec5d9f6a821ffaa (patch)
tree954154462cea08d4ed51a2d47cd594c92775f6d6 /unix/modjni.c
parent0eba162ab578cbd96dbdcc20d2fcfab80d2d13d4 (diff)
downloadmicropython-c4489a05433b2878d0598d77bec5d9f6a821ffaa.tar.gz
micropython-c4489a05433b2878d0598d77bec5d9f6a821ffaa.zip
unix/modjni: Propagate Java exceptions on list access.
Diffstat (limited to 'unix/modjni.c')
-rw-r--r--unix/modjni.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/unix/modjni.c b/unix/modjni.c
index 04102938a7..3e94c0e67d 100644
--- a/unix/modjni.c
+++ b/unix/modjni.c
@@ -92,6 +92,16 @@ STATIC bool is_object_type(const char *jtypesig) {
return false;
}
+STATIC void check_exception(void) {
+ jobject exc = JJ1(ExceptionOccurred);
+ if (exc) {
+ //JJ1(ExceptionDescribe);
+ mp_obj_t py_e = new_jobject(exc);
+ JJ1(ExceptionClear);
+ nlr_raise(mp_obj_new_exception_arg1(&mp_type_Exception, py_e));
+ }
+}
+
// jclass
STATIC void jclass_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) {
@@ -200,6 +210,9 @@ STATIC mp_obj_t jobject_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value)
} else if (value == MP_OBJ_SENTINEL) {
// load
jobject el = JJ(CallObjectMethod, self->obj, List_get_mid, idx);
+ if (el == NULL) {
+ check_exception();
+ }
return new_jobject(el);
} else {
// store