PatchSet 7258 
Date: 2006/04/22 12:40:02
Author: robilad
Branch: HEAD
Tag: (none) 
Log:
small compiler warning fix

2006-04-22  Dalibor Topic  <[EMAIL PROTECTED]>

* kaffe/kaffevm/constants.c (readConstantPool): Introduced
new local variable str to hold utf8 strings from class
file. That fixes a compiler warning.

Members: 
        ChangeLog:1.4763->1.4764 
        kaffe/kaffevm/constants.c:INITIAL->1.21 

Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.4763 kaffe/ChangeLog:1.4764
--- kaffe/ChangeLog:1.4763      Sat Apr 22 01:53:39 2006
+++ kaffe/ChangeLog     Sat Apr 22 12:40:02 2006
@@ -1,5 +1,11 @@
 2006-04-22  Dalibor Topic  <[EMAIL PROTECTED]>
 
+       * kaffe/kaffevm/constants.c (readConstantPool): Introduced
+       new local variable str to hold utf8 strings from class 
+       file. That fixes a compiler warning.
+
+2006-04-22  Dalibor Topic  <[EMAIL PROTECTED]>
+
        Replaced utf8ConstNew(*,-1) calls with the helper function
        utf8ConstFromString.
 
===================================================================
Checking out kaffe/kaffe/kaffevm/constants.c
RCS:  /home/cvs/kaffe/kaffe/kaffe/kaffevm/constants.c,v
VERS: 1.21
***************
--- /dev/null   Sun Aug  4 19:57:58 2002
+++ kaffe/kaffe/kaffevm/constants.c     Sat Apr 22 12:48:57 2006
@@ -0,0 +1,235 @@
+/*
+ * constants.c
+ * Constant management.
+ *
+ * Copyright (c) 1996, 1997
+ *     Transvirtual Technologies, Inc.  All rights reserved.
+ *
+ * See the file "license.terms" for information on usage and redistribution 
+ * of this file. 
+ */
+
+#include "config.h"
+#include "config-std.h"
+#include "config-mem.h"
+#include "config-hacks.h"
+#include "gtypes.h"
+#include "access.h"
+#include "object.h"
+#include "constants.h"
+#include "object.h"
+#include "errors.h"
+#include "file.h"
+#include "exception.h"
+#include "classMethod.h"
+#include "utf8const.h"
+#include "debug.h"
+
+/*
+ * XXX move into readClass.c
+ */
+
+/*
+ * Read in constant pool from opened file.
+ */
+bool
+readConstantPool(Hjava_lang_Class* this, classFile* fp, errorInfo *einfo)
+{
+       constants* info = CLASS_CONSTANTS (this);
+       ConstSlot* pool;
+       u1* tags;
+       unsigned int i;
+       unsigned int j;
+       u1 type;
+       u2 len;
+       u2 d2, d2b;
+       u4 d4, d4b;
+       u2 poolsize;
+       const char* className = "unknown";  /* CLASS_CNAME(this) won't work 
until after constant pool is read... */
+
+
+       if (!checkBufSize(fp, 2, className, einfo))
+               return false;
+
+       readu2(&poolsize, fp);
+       DBG(READCLASS,
+           dprintf("constant_pool_count=%d\n", poolsize);
+               );
+
+       /* Allocate space for tags and data */
+       pool = gc_malloc((sizeof(ConstSlot) + sizeof(u1)) * poolsize,
+                        KGC_ALLOC_CONSTANT);
+       if (!pool) {
+               postOutOfMemory(einfo);
+               return false;
+       }
+       tags = (u1*)&pool[poolsize];
+       info->data = pool;
+       info->tags = tags;
+       info->size = poolsize;
+
+       pool[0] = 0;
+       tags[0] = CONSTANT_Unknown;
+       for (i = 1; i < info->size; i++) {
+               const char * str;
+
+               if (! checkBufSize(fp, 1, className, einfo))
+                       goto fail;
+
+               readu1(&type, fp);
+               DBG(READCLASS,
+                   dprintf("Constant[%d] type %d\n", i, type);
+                       );
+               tags[i] = type;
+
+               switch (type) {
+               case CONSTANT_Utf8:
+                       if (! checkBufSize(fp, 2, className, einfo))
+                               goto fail;
+
+                       readu2(&len, fp);
+
+                       if (! checkBufSize(fp, len, className, einfo))
+                               goto fail;
+
+                       str = (const char *) fp->cur;
+
+                       if (!utf8ConstIsValidUtf8(str, len)) {
+                               postExceptionMessage(einfo,
+                                       JAVA_LANG(ClassFormatError), 
+                                       "Invalid UTF-8 constant");
+                               goto fail;
+                       }
+                       pool[i] = (ConstSlot) utf8ConstNew(str, len);
+                       if (!pool[i]) {
+                               postOutOfMemory(einfo);
+                               goto fail;
+                       }
+                       seekm(fp, len);
+                       break;
+               case CONSTANT_Class:
+               case CONSTANT_String:
+                       if (! checkBufSize(fp, 2, className, einfo))
+                               goto fail;
+                       readu2(&d2, fp);
+                       if ( (d2 == 0) || (d2 >= info->size) )
+                       {
+                               postExceptionMessage(
+                                       einfo,
+                                       JAVA_LANG(ClassFormatError),
+                                       "%s (Invalid constant pool index: %d)",
+                                       className,
+                                       d2);
+                               goto fail;
+                       }
+                       pool[i] = d2;
+                       break;
+
+               case CONSTANT_Fieldref:
+               case CONSTANT_Methodref:
+               case CONSTANT_InterfaceMethodref:
+               case CONSTANT_NameAndType:
+                       if (! checkBufSize(fp, 4, className, einfo))
+                               goto fail;
+                       readu2(&d2, fp);
+                       readu2(&d2b, fp);
+                       pool[i] = (d2b << 16) | d2;
+                       break;
+
+               case CONSTANT_Integer:
+               case CONSTANT_Float:
+                       if (! checkBufSize(fp, 4, className, einfo))
+                               goto fail;
+                       readu4(&d4, fp);
+                       pool[i] = d4;
+                       break;
+
+               case CONSTANT_Long:
+                       if (! checkBufSize(fp, 8, className, einfo))
+                               goto fail;
+                       readu4(&d4, fp);
+                       readu4(&d4b, fp);
+#if SIZEOF_VOID_P == 8
+                       pool[i] = WORDS_TO_LONG(d4, d4b);
+                       i++;
+                       pool[i] = 0;
+#else
+                       pool[i] = d4;
+                       i++;
+                       pool[i] = d4b;
+#endif /* SIZEOF_VOID_P == 8 */
+                       tags[i] = CONSTANT_Unknown;
+                       break;
+
+               case CONSTANT_Double:
+                       if (! checkBufSize(fp, 8, className, einfo))
+                               goto fail;
+                       readu4(&d4, fp);
+                       readu4(&d4b, fp);
+
+#if SIZEOF_VOID_P == 8
+#if defined(DOUBLE_ORDER_OPPOSITE)
+                       pool[i] = WORDS_TO_LONG(d4b, d4);
+#else
+                       pool[i] = WORDS_TO_LONG(d4, d4b);
+#endif /* DOUBLE_ORDER_OPPOSITE */
+                       i++;
+                       pool[i] = 0;
+#else
+#if defined(DOUBLE_ORDER_OPPOSITE)
+                       pool[i] = d4b;
+                       i++;
+                       pool[i] = d4;
+#else
+                       pool[i] = d4;
+                       i++;
+                       pool[i] = d4b;
+#endif /* DOUBLE_ORDER_OPPOSITE */
+#endif /* SIZEOF_VOID_P == 8 */
+                       tags[i] = CONSTANT_Unknown;
+                       break;
+
+               default:
+                       postExceptionMessage(einfo, 
+                               JAVA_LANG(ClassFormatError), 
+                                            "Invalid constant type %d in 
class",
+                                            type);
+fail:
+                       info->size = 0;
+                       for (j = 0 ; j < i; ++j) {
+                               if (tags[j] == CONSTANT_Utf8) {
+                                       utf8ConstRelease((Utf8Const*)pool[j]);
+                               }
+                       }
+                       return false;
+               }
+       }
+
+       /* Perform some constant pool optimisations to allow for the
+        * use of pre-compiled classes.
+        */
+       for (i = 1; i < info->size; i++) {
+               switch (info->tags[i]) {
+               case CONSTANT_Class:
+               case CONSTANT_String:
+                       j = CLASS_NAME(i, info);
+                       if (info->tags[j] == CONSTANT_Utf8) {
+                               /* Rewrite so points directly at string */
+                               info->data[i] = info->data[j];
+                               utf8ConstAddRef(WORD2UTF(info->data[j]));
+                       }
+                       else {
+                               /* Set this tag so it will generate an error
+                                * during verification.
+                                */
+                               info->tags[i] = CONSTANT_Error;
+                       }
+                       break;
+
+               default:
+                       /* Ignore the rest */
+                       break;
+               }
+       }
+       return true;
+}

_______________________________________________
kaffe mailing list
kaffe@kaffe.org
http://kaffe.org/cgi-bin/mailman/listinfo/kaffe

Reply via email to