prims.cc (_Jv_NewObjectArray): Use const_cast to initialize length field of array.

* 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
This commit is contained in:
Tom Tromey 2000-11-27 04:05:23 +00:00 committed by Tom Tromey
parent 18205ca3b6
commit 2721806e98
3 changed files with 23 additions and 4 deletions

View 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,

View 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*);
};

View 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;