* src/vm/vm.c (vm_call_method_objectarray): Moved primitive_box into the native
authorMichael Starzinger <michi@complang.tuwien.ac.at>
Sat, 13 Oct 2007 13:18:49 +0000 (15:18 +0200)
committerMichael Starzinger <michi@complang.tuwien.ac.at>
Sat, 13 Oct 2007 13:18:49 +0000 (15:18 +0200)
world.

src/vm/vm.c

index 279d4daf04f5a766210997ac57ba522412475fd4..2a9b9cbc8bf0d20f56e34c34007065eff2436624 100644 (file)
@@ -2498,9 +2498,8 @@ java_handle_t *vm_call_method_objectarray(methodinfo *m, java_handle_t *o,
        }
 
        switch (m->parseddesc->returntype.decltype) {
-       case TYPE_VOID:
-               (void) vm_call_array(m, array);
-               ro = NULL;
+       case PRIMITIVETYPE_VOID:
+               value.a = vm_call_array(m, array);
                break;
 
        case PRIMITIVETYPE_BOOLEAN:
@@ -2509,22 +2508,18 @@ java_handle_t *vm_call_method_objectarray(methodinfo *m, java_handle_t *o,
        case PRIMITIVETYPE_SHORT:
        case PRIMITIVETYPE_INT:
                value.i = vm_call_int_array(m, array);
-               ro = primitive_box(m->parseddesc->returntype.decltype, value);
                break;
 
        case PRIMITIVETYPE_LONG:
                value.l = vm_call_long_array(m, array);
-               ro = primitive_box(m->parseddesc->returntype.decltype, value);
                break;
 
        case PRIMITIVETYPE_FLOAT:
                value.f = vm_call_float_array(m, array);
-               ro = primitive_box(m->parseddesc->returntype.decltype, value);
                break;
 
        case PRIMITIVETYPE_DOUBLE:
                value.d = vm_call_double_array(m, array);
-               ro = primitive_box(m->parseddesc->returntype.decltype, value);
                break;
 
        case TYPE_ADR:
@@ -2543,6 +2538,11 @@ java_handle_t *vm_call_method_objectarray(methodinfo *m, java_handle_t *o,
 
        THREAD_NATIVEWORLD_ENTER;
 
+       /* box the return value if necesarry */
+
+       if (m->parseddesc->returntype.decltype != TYPE_ADR)
+               ro = primitive_box(m->parseddesc->returntype.decltype, value);
+
        /* check for an exception */
 
        xptr = exceptions_get_exception();