prims.cc (_Jv_NewObjectArray): Use const_cast to initialize length field of array.
authorTom Tromey <tromey@cygnus.com>
Mon, 27 Nov 2000 04:05:23 +0000 (04:05 +0000)
committerTom Tromey <tromey@gcc.gnu.org>
Mon, 27 Nov 2000 04:05:23 +0000 (04:05 +0000)
* prims.cc (_Jv_NewObjectArray): Use const_cast to initialize
length field of array.
(_Jv_NewPrimArray): Likewise.
* gcj/array.h (__JArray): `length' field now const.  Added
constructor.

From-SVN: r37771

libjava/ChangeLog
libjava/gcj/array.h
libjava/prims.cc

index 00e95143bf6498ac71409bb04ceab1e3b27c2057..5c6456327357a246952f37d3b87ba320d42bcad3 100644 (file)
@@ -1,3 +1,11 @@
+2000-11-26  Tom Tromey  <tromey@cygnus.com>
+
+       * prims.cc (_Jv_NewObjectArray): Use const_cast to initialize
+       length field of array.
+       (_Jv_NewPrimArray): Likewise.
+       * gcj/array.h (__JArray): `length' field now const.  Added
+       constructor.
+
 2000-11-26  Anthony Green  <green@redhat.com>
 
        * javax/naming/spi/NamingManager.java,
index b3ba9938228dab83643d06e49427e99902471a96..8d280857ffe5a0a4b5cab0e0684a0204d6c7c733 100644 (file)
@@ -17,8 +17,15 @@ extern "Java" {
 
 class __JArray : public java::lang::Object
 {
+protected:
+  // This is just a hack to work around a warning emitted by the C++
+  // compiler.  We initialize `length' evilly, but it doesn't know
+  // that.
+  __JArray () : length (0)
+  {
+  }
 public:
-  jsize length;
+  const jsize length;
   friend jsize JvGetArrayLength (__JArray*);
 };
 
index b6ac7f87b8159957e891f3b4488f70ca182f1223..c6b8d2030e1e8133d61b217e0ad0ca645e3ef122 100644 (file)
@@ -411,8 +411,10 @@ _Jv_NewObjectArray (jsize count, jclass elementClass, jobject init)
   obj = (jobjectArray) _Jv_AllocArray (size, klass);
   if (__builtin_expect (! obj, false))
     JvThrow (no_memory);
-  obj->length = count;
-  jobject *ptr = elements (obj);
+  // Cast away const.
+  jsize *lp = const_cast<jsize *> (&obj->length);
+  *lp = count;
+  jobject *ptr = elements(obj);
   // We know the allocator returns zeroed memory.  So don't bother
   // zeroing it again.
   if (init)
@@ -446,7 +448,9 @@ _Jv_NewPrimArray (jclass eltype, jint count)
   __JArray *arr = (__JArray*) _Jv_AllocObj (size + elsize * count, klass);
   if (__builtin_expect (! arr, false))
     JvThrow (no_memory);
-  arr->length = count;
+  // Cast away const.
+  jsize *lp = const_cast<jsize *> (&arr->length);
+  *lp = count;
   // Note that we assume we are given zeroed memory by the allocator.
 
   return arr;