* use_class_as_object removed, link_class added where required.
authortwisti <none@none>
Sat, 26 Nov 2005 19:15:45 +0000 (19:15 +0000)
committertwisti <none@none>
Sat, 26 Nov 2005 19:15:45 +0000 (19:15 +0000)
src/native/native.c
src/native/vm/Field.c
src/native/vm/VMClass.c
src/native/vm/VMClassLoader.c
src/native/vm/VMObject.c
src/vm/builtin.c
src/vm/jit/parse.c
src/vm/jit/stacktrace.c
src/vm/jit/x86_64/patcher.c

index f588206ce1ad7b902ec030ac138297c0815072b7..780077666c27740e6732ced031fdb509e4bf853f 100644 (file)
@@ -30,7 +30,7 @@
 
    Changes: Christian Thalinger
 
-   $Id: native.c 3445 2005-10-19 11:28:41Z twisti $
+   $Id: native.c 3801 2005-11-26 19:15:45Z twisti $
 
 */
 
@@ -225,34 +225,6 @@ static functionptr dummynativetable[] = {
 #endif /* defined(ENABLE_STATICVM) */
 
 
-/************* use classinfo structure as java.lang.Class object **************/
-
-bool use_class_as_object(classinfo *c)
-{
-       if (!c->classvftbl) {
-               /* is the class loaded */
-               if (!c->loaded) {
-/*                     if (!class_load(c)) */
-/*                             throw_exception_exit(); */
-                       log_text("use_class_as_object: class_load should not happen");
-                       assert(0);
-               }
-
-               /* is the class linked */
-               if (!c->linked)
-                       if (!link_class(c))
-                               return false;
-
-               assert(class_java_lang_Class);
-
-               c->header.vftbl = class_java_lang_Class->vftbl;
-               c->classvftbl = true;
-       }
-
-       return true;
-}
-
-
 /************************** tables for methods ********************************/
 
 #undef JOWENN_DEBUG
@@ -1093,14 +1065,11 @@ java_objectarray *native_get_parametertypes(methodinfo *m)
 
     /* get classes */
 
-       for (i = 0; i < paramcount; i++) {
+       for (i = 0; i < paramcount; i++)
                if (!resolve_class_from_typedesc(&paramtypes[i], true, false,
                                                                                 (classinfo **) &oa->data[i]))
                        return NULL;
 
-               use_class_as_object((classinfo *) oa->data[i]);
-       }
-
        return oa;
 }
 
@@ -1129,9 +1098,6 @@ java_objectarray *native_get_exceptiontypes(methodinfo *m)
                                                                                   resolveEager, true, false, &c))
                        return NULL;
 
-               if (!use_class_as_object(c))
-                       return NULL;
-
                oa->data[i] = (java_objectheader *) c;
        }
 
@@ -1153,8 +1119,6 @@ classinfo *native_get_returntype(methodinfo *m)
                                                                         &c))
                return NULL;
 
-       use_class_as_object(c);
-
        return c;
 }
 
index 23422e1877dfccea67961d68cc415240e0313b97..ef9050c55052fbd2bc925ba225a1f989e07a754a 100644 (file)
@@ -29,7 +29,7 @@
    Changes: Joseph Wenninger
             Christian Thalinger
 
-   $Id: Field.c 3672 2005-11-15 23:43:17Z twisti $
+   $Id: Field.c 3801 2005-11-26 19:15:45Z twisti $
 
 */
 
@@ -1182,9 +1182,6 @@ JNIEXPORT java_lang_Class* JNICALL Java_java_lang_reflect_Field_getType(JNIEnv *
        if (!resolve_class_from_typedesc(desc, true, false, &ret))
                return NULL;
        
-       if (!use_class_as_object(ret))
-               return NULL;
-
        return (java_lang_Class *) ret;
 }
 
index 76ff721ee14d5cb7829a2727203df476ecaf615b..b7abd08522b06b8401da145c61470c1187ae5b58 100644 (file)
@@ -29,7 +29,7 @@
    Changes: Joseph Wenninger
             Christian Thalinger
 
-   $Id: VMClass.c 3649 2005-11-10 22:05:22Z twisti $
+   $Id: VMClass.c 3801 2005-11-26 19:15:45Z twisti $
 
 */
 
@@ -124,9 +124,6 @@ JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_forName(JNIEnv *env, j
                if (!initialize_class(c))
                        return NULL;
 
-       if (!use_class_as_object(c))
-               return NULL;
-
        return (java_lang_Class *) c;
 }
 
@@ -168,11 +165,6 @@ JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_getComponentType(JNIEn
        else
                comp = primitivetype_table[desc->arraytype].class_primitive;
                
-       /* set vftbl */
-       
-       if (!use_class_as_object(comp))
-               return NULL;
-       
        return (java_lang_Class *) comp;
 }
 
@@ -301,8 +293,9 @@ JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredClasses(JN
                                                                                           &inner))
                                return NULL;
 
-                       if (!use_class_as_object(inner))
-                               return NULL;
+                       if (!inner->linked)
+                               if (!link_class(inner))
+                                       return NULL;
 
                        oa->data[pos++] = (java_objectheader *) inner;
                }
@@ -352,8 +345,9 @@ JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_getDeclaringClass(JNIE
                                                                                                   &outer))
                                        return NULL;
 
-                               if (!use_class_as_object(outer))
-                                       return NULL;
+                               if (!outer->linked)
+                                       if (!link_class(outer))
+                                               return NULL;
 
                                return (java_lang_Class *) outer;
                        }
@@ -434,21 +428,25 @@ JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredFields(JNI
 JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getInterfaces(JNIEnv *env, jclass clazz, java_lang_Class *klass)
 {
        classinfo        *c;
+       classinfo        *ic;
        java_objectarray *oa;
        u4                i;
 
        c = (classinfo *) klass;
 
+       if (!c->linked)
+               if (!link_class(c))
+                       return NULL;
+
        oa = builtin_anewarray(c->interfacescount, class_java_lang_Class);
 
        if (!oa)
                return NULL;
 
        for (i = 0; i < c->interfacescount; i++) {
-               if (!use_class_as_object(c->interfaces[i].cls))
-                       return NULL;
+               ic = c->interfaces[i].cls;
 
-               oa->data[i] = (java_objectheader *) c->interfaces[i].cls;
+               oa->data[i] = (java_objectheader *) ic;
        }
 
        return oa;
@@ -618,9 +616,6 @@ JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_getSuperclass(JNIEnv *
        if (!sc)
                return NULL;
 
-       if (!use_class_as_object(sc))
-               return NULL;
-
        return (java_lang_Class *) sc;
 }
 
@@ -634,6 +629,10 @@ JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isArray(JNIEnv *env, jclass clazz, j
 {
        classinfo *c = (classinfo *) klass;
 
+       if (!c->linked)
+               if (!link_class(c))
+                       return 0;
+
        return (c->vftbl->arraydesc != NULL);
 }
 
@@ -645,13 +644,28 @@ JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isArray(JNIEnv *env, jclass clazz, j
  */
 JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isAssignableFrom(JNIEnv *env, jclass clazz, java_lang_Class *klass, java_lang_Class *c)
 {
-       if (c == NULL) {
+       classinfo *kc;
+       classinfo *cc;
+
+       kc = (classinfo *) klass;
+       cc = (classinfo *) c;
+
+       if (cc == NULL) {
                *exceptionptr = new_nullpointerexception();
                return 0;
        }
 
+       if (!kc->linked)
+               if (!link_class(kc))
+                       return 0;
+
+       if (!cc->linked)
+               if (!link_class(cc))
+                       return 0;
+
        /* XXX this may be wrong for array classes */
-       return builtin_isanysubclass((classinfo *) c, (classinfo *) klass);
+
+       return builtin_isanysubclass(cc, kc);
 }
 
 
@@ -668,6 +682,10 @@ JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isInstance(JNIEnv *env, jclass clazz
        c = (classinfo *) klass;
        ob = (java_objectheader *) o;
 
+       if (!c->linked)
+               if (!link_class(c))
+                       return 0;
+
        return builtin_instanceof(ob, c);
 }
 
index db17a01c91996ce375c9fa929cccd6842c62d6e5..83336ad328f7ff4d311cc65e93d00f9b7f9b85ab 100644 (file)
@@ -30,7 +30,7 @@
             Christian Thalinger
             Edwin Steiner
 
-   $Id: VMClassLoader.c 3559 2005-11-04 09:57:34Z twisti $
+   $Id: VMClassLoader.c 3801 2005-11-26 19:15:45Z twisti $
 
 */
 
@@ -154,9 +154,6 @@ JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClassLoader_defineClass(JNIE
 
        c->pd = pd;
 
-       if (!use_class_as_object(c))
-               return NULL;
-
        /* Store the newly defined class in the class cache. This call also       */
        /* checks whether a class of the same name has already been defined by    */
        /* the same defining loader, and if so, replaces the newly created class  */
@@ -216,14 +213,6 @@ JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClassLoader_getPrimitiveClas
                c = NULL;
        }
 
-#if 0
-       /* XXX TWISTI is this neccessary? */
-       if (!initialize_class(c))
-               return NULL;
-#endif
-
-       use_class_as_object(c);
-
        return (java_lang_Class *) c;
 }
 
@@ -282,8 +271,6 @@ JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClassLoader_loadClass(JNIEnv
 /*     if (resolve) { */
                if (!link_class(c))
                        goto exception;
-
-               use_class_as_object(c);
 /*     } */
 
        return (java_lang_Class *) c;
index 2c6488fa7aafda158eb04f7d85a9e2593fbde44e..01ea02ac5acbef518863e238fbb68cc92712a19a 100644 (file)
@@ -29,7 +29,7 @@
    Changes: Joseph Wenninger
             Christian Thalinger
 
-   $Id: VMObject.c 3079 2005-07-20 15:23:18Z twisti $
+   $Id: VMObject.c 3801 2005-11-26 19:15:45Z twisti $
 
 */
 
@@ -76,8 +76,6 @@ JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMObject_getClass(JNIEnv *env,
 
        c = ((java_objectheader *) obj)->vftbl->class;
 
-       use_class_as_object(c);
-
        return (java_lang_Class *) c;
 }
 
index 51df7578e9b552d271a1fe796678b8603d00e067..7788d2056164c1796853e17df68260d1003337b1 100644 (file)
@@ -36,7 +36,7 @@
    calls instead of machine instructions, using the C calling
    convention.
 
-   $Id: builtin.c 3654 2005-11-11 11:17:33Z twisti $
+   $Id: builtin.c 3801 2005-11-26 19:15:45Z twisti $
 
 */
 
@@ -1693,13 +1693,9 @@ void builtin_monitorenter(java_objectheader *o)
 #if defined(USE_THREADS)
 /*
  * Locks the class object - needed for static synchronized methods.
- * The use_class_as_object call is needed in order to circumvent a
- * possible deadlock with builtin_monitorenter called by another
- * thread calling use_class_as_object.
  */
 void builtin_staticmonitorenter(classinfo *c)
 {
-       use_class_as_object(c);
        builtin_monitorenter(&c->header);
 }
 #endif
index 98d062ae7a0c70140408032a9d1ec5a7b649b064..8fafead3fe722e90e0a8203266e49908f44d79f3 100644 (file)
@@ -31,7 +31,7 @@
             Joseph Wenninger
             Christian Thalinger
 
-   $Id: parse.c 3615 2005-11-07 18:22:11Z twisti $
+   $Id: parse.c 3801 2005-11-26 19:15:45Z twisti $
 
 */
 
@@ -504,12 +504,6 @@ SHOWOPCODE(DEBUG4)
                                                                          true, &c))
                                        return NULL;
 
-                               /* XXX TWISTI: edwin said i should do that */
-
-                               if (c)
-                                       if (!use_class_as_object(c))
-                                               return NULL;
-
                                /* if not resolved, c == NULL */
 
                                LOADCONST_A_CLASS(c, cr);
index a70c7bc54be271e5ecbcb90b57843e365407c8fc..2a318fc87af78185a2972d4de3ca2c089ab3c478 100644 (file)
@@ -28,7 +28,7 @@
 
    Changes: Christian Thalinger
 
-   $Id: stacktrace.c 3779 2005-11-23 22:36:59Z twisti $
+   $Id: stacktrace.c 3801 2005-11-26 19:15:45Z twisti $
 
 */
 
@@ -1079,8 +1079,6 @@ static bool classContextCollector(void **target, stackTraceBuffer *buffer)
                        continue;
                }
 
-               use_class_as_object(current->method->class);
-
                oa->data[i] = (java_objectheader *) current->method->class;
        }
 
@@ -1209,8 +1207,6 @@ static bool getStackCollector(void **target, stackTraceBuffer *buffer)
        for (i = 0, current = &(buffer->start[0]); i < size; i++, current++) {
                c = current->method->class;
 
-               use_class_as_object(c);
-
                classes->data[i] = (java_objectheader *) c;
                str = javastring_new(current->method->name);
 
index 07b15a4d3b558ddcd87ee8eca21b1d57f99cef65..1df94418c7b42506de31f1a7f91e3f6eee5bd955 100644 (file)
@@ -28,7 +28,7 @@
 
    Changes:
 
-   $Id: patcher.c 3708 2005-11-18 00:30:10Z twisti $
+   $Id: patcher.c 3801 2005-11-26 19:15:45Z twisti $
 
 */
 
@@ -318,12 +318,6 @@ bool patcher_aconst(u1 *sp)
                return false;
        }
 
-       if (!use_class_as_object(c)) {
-               PATCHER_MONITOREXIT;
-
-               return false;
-       }
-
        /* patch back original code */
 
        *((u8 *) ra) = mcode;