>From e764c6b1a0299bf3fc7dc31c39389099c87e36bc Mon Sep 17 00:00:00 2001
From: Vegard Nossum <vegard.nos...@gmail.com>
Date: Fri, 26 Jun 2009 14:11:31 +0200
Subject: [PATCH] vm/object: set class->object for array allocations

This is the proper solution for the workaround:

commit 85d16d96051c2d9a246aa427405c003d13ba9ef8
Author: Pekka Enberg <penb...@cs.helsinki.fi>
Date:   Fri Jun 26 13:09:39 2009 +0300

    vm: Fix array check and array store check crashes

which can be reverted now.
---
 vm/object.c |   41 +++++++++++++++++++++++++++++++++++++++--
 1 files changed, 39 insertions(+), 2 deletions(-)

diff --git a/vm/object.c b/vm/object.c
index 60153a8..bb34b86 100644
--- a/vm/object.c
+++ b/vm/object.c
@@ -35,10 +35,47 @@ struct vm_object *vm_object_alloc_native_array(int type, 
int count)
 
        /* XXX: Use the right size... */
        res = zalloc(sizeof(*res) + 8 * count);
-       if (res) {
-               res->array_length = count;
+       if (!res) {
+               NOT_IMPLEMENTED;
+               return NULL;
+       }
+
+       switch (type) {
+       case T_BOOLEAN:
+               res->class = classloader_load("[Z");
+               break;
+       case T_CHAR:
+               res->class = classloader_load("[C");
+               break;
+       case T_FLOAT:
+               res->class = classloader_load("[F");
+               break;
+       case T_DOUBLE:
+               res->class = classloader_load("[D");
+               break;
+       case T_BYTE:
+               res->class = classloader_load("[B");
+               break;
+       case T_SHORT:
+               res->class = classloader_load("[S");
+               break;
+       case T_INT:
+               res->class = classloader_load("[I");
+               break;
+       case T_LONG:
+               res->class = classloader_load("[J");
+               break;
+       default:
+               NOT_IMPLEMENTED;
        }
 
+       if (!res->class) {
+               NOT_IMPLEMENTED;
+               return NULL;
+       }
+
+       res->array_length = count;
+
        if (pthread_mutex_init(&res->mutex, NULL))
                NOT_IMPLEMENTED;
 
-- 
1.6.0.4



------------------------------------------------------------------------------
_______________________________________________
Jatovm-devel mailing list
Jatovm-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jatovm-devel

Reply via email to