Mo DeJong writes:
> It sounds like there is still some debate as to how the
> primitive classes should be searched for by name, so could
> we agree on this trimmed down patch that does not include
> the part that disables lookups for "int" and such?

Minor nit: it seems clearer to do this version of your first
itypes.c patch..

-Archie

___________________________________________________________________________
Archie Cobbs   *   Whistle Communications, Inc.  *   http://www.whistle.com

Index: itypes.c
===================================================================
RCS file: /cvs/kaffe/kaffe/kaffe/kaffevm/itypes.c,v
retrieving revision 1.17
diff -u -r1.17 itypes.c
--- itypes.c    1999/11/29 23:44:10     1.17
+++ itypes.c    2000/02/03 23:49:21
@@ -131,23 +131,53 @@
 Hjava_lang_Class*
 classFromSig(const char** strp, Hjava_lang_ClassLoader* loader, errorInfo *einfo)
 {
-       Hjava_lang_Class* cl;
+       Hjava_lang_Class* cl = NULL;
        Utf8Const* utf8;
        const char* start;
        const char* end;
 
-       switch (*(*strp)++) {
-       case 'V': return (voidClass);
-       case 'I': return (intClass);
-       case 'Z': return (booleanClass);
-       case 'S': return (shortClass);
-       case 'B': return (byteClass);
-       case 'C': return (charClass);
-       case 'F': return (floatClass);
-       case 'D': return (doubleClass);
-       case 'J': return (longClass);
-       case '[': return (lookupArray(classFromSig(strp, loader, einfo),
-                                     einfo));
+       /* Check for primitive types */
+       switch (*(*strp)) {
+       case 'V':
+               cl = voidClass;
+               break;
+       case 'I':
+               cl = intClass;
+               break;
+       case 'Z':
+               cl = booleanClass;
+               break;
+       case 'S':
+               cl = shortClass;
+               break;
+       case 'B':
+               cl = byteClass;
+               break;
+       case 'C':
+               cl = charClass;
+               break;
+       case 'F':
+               cl = floatClass;
+               break;
+       case 'D':
+               cl = doubleClass;
+               break;
+       case 'J':
+               cl = longClass;
+               break;
+       }
+       if (cl != NULL) {       /* Any trailing junk is an error */
+               if (*++(*strp) != '\0') {
+                       postException(einfo, JAVA_LANG(VerifyError));
+                       return (NULL);
+               }
+               return (cl);
+       }
+
+       /* Non-primitive types */
+       switch (*(*strp)++) {
+       case '[':
+               return (lookupArray(classFromSig(strp, loader, einfo), einfo));
        case 'L':
                start = *strp;
                for (end = start; *end != 0 && *end != ';'; end++)

Reply via email to