* src/vmcore/class.c (class_primitive_get): New function.
authortwisti <none@none>
Thu, 7 Jun 2007 17:43:29 +0000 (17:43 +0000)
committertwisti <none@none>
Thu, 7 Jun 2007 17:43:29 +0000 (17:43 +0000)
* src/vmcore/class.h (class_primitive_get): Added.

* src/vmcore/linker.c (primitivetype_table): Changed layout.
(link_primitivetype_table): Store UTF-8 name in table.

* src/vmcore/linker.h (primitivetypeinfo): Changed layout, added
cname, changed name to UTF-8.

src/vmcore/class.c
src/vmcore/class.h
src/vmcore/linker.c
src/vmcore/linker.h

index af8da72e00f3c3cfbfc7ef02c1b6dc27efd37d08..3d29b5e0427cc98981b40064e7d339b4fe75b4e2 100644 (file)
@@ -22,7 +22,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   $Id: class.c 8024 2007-06-06 17:23:42Z twisti $
+   $Id: class.c 8042 2007-06-07 17:43:29Z twisti $
 
 */
 
@@ -1384,6 +1384,30 @@ bool class_is_primitive(classinfo *c)
 }
 
 
+/* class_primitive_get *********************************************************
+
+   Returns the primitive class of the given class name.
+
+*******************************************************************************/
+
+classinfo *class_primitive_get(utf *name)
+{
+       s4 i;
+
+       /* search table of primitive classes */
+
+       for (i = 0; i < PRIMITIVETYPE_COUNT; i++)
+               if (primitivetype_table[i].name == name)
+                       return primitivetype_table[i].class_primitive;
+
+       vm_abort("class_primitive_get: unknown primitive type");
+
+       /* keep compiler happy */
+
+       return NULL;
+}
+
+
 /* class_issubclass ************************************************************
 
    Checks if sub is a descendant of super.
index b8ee495aaef53ecec399cef92a6c3034f975851c..769d63c3f51c178663254e91b68db329fd672324 100644 (file)
@@ -22,7 +22,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   $Id: class.h 8024 2007-06-06 17:23:42Z twisti $
+   $Id: class.h 8042 2007-06-07 17:43:29Z twisti $
 
 */
 
@@ -337,7 +337,8 @@ methodinfo *class_resolvemethod(classinfo *c, utf *name, utf *dest);
 methodinfo *class_resolveclassmethod(classinfo *c, utf *name, utf *dest, classinfo *referer, bool throwexception);
 methodinfo *class_resolveinterfacemethod(classinfo *c, utf *name, utf *dest, classinfo *referer, bool throwexception);
 
-bool class_is_primitive(classinfo *c);
+classinfo *class_primitive_get(utf *name);
+bool       class_is_primitive(classinfo *c);
 
 bool class_issubclass(classinfo *sub, classinfo *super);
 bool class_isanysubclass(classinfo *sub, classinfo *super);
index c68a638488823244a62b344df27359fb33528e06..ca56093ca744ebf9f2d7970ed49d04adb843a728 100644 (file)
@@ -22,7 +22,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   $Id: linker.c 7965 2007-05-24 13:25:41Z michi $
+   $Id: linker.c 8042 2007-06-07 17:43:29Z twisti $
 
 */
 
@@ -90,20 +90,20 @@ java_objectheader *linker_classrenumber_lock;
 *******************************************************************************/
 
 primitivetypeinfo primitivetype_table[PRIMITIVETYPE_COUNT] = {
-       { NULL, NULL, "java/lang/Integer",   'I', "int"     , "[I", NULL, NULL },
-       { NULL, NULL, "java/lang/Long",      'J', "long"    , "[J", NULL, NULL },
-       { NULL, NULL, "java/lang/Float",     'F', "float"   , "[F", NULL, NULL },
-       { NULL, NULL, "java/lang/Double",    'D', "double"  , "[D", NULL, NULL },
-       { NULL, NULL, NULL,                   0 , NULL      , NULL, NULL, NULL },
-       { NULL, NULL, "java/lang/Byte",      'B', "byte"    , "[B", NULL, NULL },
-       { NULL, NULL, "java/lang/Character", 'C', "char"    , "[C", NULL, NULL },
-       { NULL, NULL, "java/lang/Short",     'S', "short"   , "[S", NULL, NULL },
-       { NULL, NULL, "java/lang/Boolean",   'Z', "boolean" , "[Z", NULL, NULL },
-       { NULL, NULL, NULL,                   0 , NULL      , NULL, NULL, NULL },
+       { "int"     , NULL, NULL, NULL, "java/lang/Integer",   'I', "[I", NULL, NULL },
+       { "long"    , NULL, NULL, NULL, "java/lang/Long",      'J', "[J", NULL, NULL },
+       { "float"   , NULL, NULL, NULL, "java/lang/Float",     'F', "[F", NULL, NULL },
+       { "double"  , NULL, NULL, NULL, "java/lang/Double",    'D', "[D", NULL, NULL },
+       { NULL      , NULL, NULL, NULL, NULL,                   0 , NULL, NULL, NULL },
+       { "byte"    , NULL, NULL, NULL, "java/lang/Byte",      'B', "[B", NULL, NULL },
+       { "char"    , NULL, NULL, NULL, "java/lang/Character", 'C', "[C", NULL, NULL },
+       { "short"   , NULL, NULL, NULL, "java/lang/Short",     'S', "[S", NULL, NULL },
+       { "boolean" , NULL, NULL, NULL, "java/lang/Boolean",   'Z', "[Z", NULL, NULL },
+       { NULL      , NULL, NULL, NULL, NULL,                   0 , NULL, NULL, NULL },
 #if defined(ENABLE_JAVASE)
-       { NULL, NULL, "java/lang/Void",      'V', "void"    , NULL, NULL, NULL }
+       { "void"    , NULL, NULL, NULL, "java/lang/Void",      'V', NULL, NULL, NULL }
 #else
-       { NULL, NULL, NULL,                   0 , NULL      , NULL, NULL, NULL },
+       { NULL      , NULL, NULL, NULL, NULL,                   0 , NULL, NULL, NULL },
 #endif
 };
 
@@ -329,6 +329,7 @@ bool linker_init(void)
 
 static bool link_primitivetype_table(void)
 {  
+       utf       *name;
        classinfo *c;
        utf       *u;
        s4         i;
@@ -336,12 +337,18 @@ static bool link_primitivetype_table(void)
        for (i = 0; i < PRIMITIVETYPE_COUNT; i++) {
                /* skip dummies */
 
-               if (!primitivetype_table[i].name)
+               if (primitivetype_table[i].cname == NULL)
                        continue;
-               
+
+               /* create UTF-8 name */
+
+               name = utf_new_char(primitivetype_table[i].cname);
+
+               primitivetype_table[i].name = name;
+
                /* create primitive class */
 
-               c = class_create_classinfo(utf_new_char(primitivetype_table[i].name));
+               c = class_create_classinfo(name);
 
                /* primitive classes don't have a super class */
 
index f2b5b7e808f8cecb9c5e5f0d78c31b4f742cd0b8..149c6083a7ef5b60e5186eab4db7d1f4310bb5ef 100644 (file)
@@ -22,7 +22,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   $Id: linker.h 7675 2007-04-05 14:23:04Z michi $
+   $Id: linker.h 8042 2007-06-07 17:43:29Z twisti $
 */
 
 
@@ -137,11 +137,12 @@ struct arraydescriptor {
 /* primitivetypeinfo **********************************************************/
 
 struct primitivetypeinfo {
+       char      *cname;                    /* char name of primitive class      */
+       utf       *name;                     /* name of primitive class           */
        classinfo *class_wrap;               /* class for wrapping primitive type */
        classinfo *class_primitive;          /* primitive class                   */
        char      *wrapname;                 /* name of class for wrapping        */
        char       typesig;                  /* one character type signature      */
-       char      *name;                     /* name of primitive class           */
        char      *arrayname;                /* name of primitive array class     */
        classinfo *arrayclass;               /* primitive array class             */
        vftbl_t   *arrayvftbl;               /* vftbl of primitive array class    */