prims.cc (_Jv_NewObjectArray): Use palcement new to create array.
* prims.cc (_Jv_NewObjectArray): Use palcement new to create array. (_Jv_NewPrimArray): Likewise. Include <new>. * gcj/array.h (__JArray): `length' field now const. Added constructor. (class JArray): Added constructor. From-SVN: r37718
This commit is contained in:
parent
81d87b4e64
commit
ad86a903a2
@ -1,3 +1,13 @@
|
||||
2000-11-24 Tom Tromey <tromey@cygnus.com>
|
||||
|
||||
* prims.cc (_Jv_NewObjectArray): Use palcement new to create
|
||||
array.
|
||||
(_Jv_NewPrimArray): Likewise.
|
||||
Include <new>.
|
||||
* gcj/array.h (__JArray): `length' field now const. Added
|
||||
constructor.
|
||||
(class JArray): Added constructor.
|
||||
|
||||
2000-11-23 Mark Wielaard <mark@klomp.org>
|
||||
|
||||
* name-finder.cc (lookup): Check for a NULL _Jv_argv before attempting
|
||||
|
@ -1,6 +1,6 @@
|
||||
// array.h - Header file for CNI arrays. -*- c++ -*-
|
||||
|
||||
/* Copyright (C) 1998, 1999 Free Software Foundation
|
||||
/* Copyright (C) 1998, 1999, 2000 Free Software Foundation
|
||||
|
||||
This file is part of libgcj.
|
||||
|
||||
@ -17,11 +17,21 @@ extern "Java" {
|
||||
|
||||
class __JArray : public java::lang::Object
|
||||
{
|
||||
protected:
|
||||
// FIXME: this is a hack to work around a bug in the g++ Java
|
||||
// support. If we add a constructor with a jsize argument to
|
||||
// JArray<T>, then g++ complains.
|
||||
__JArray () : length (0)
|
||||
{
|
||||
}
|
||||
public:
|
||||
// FIXME: we'd like this to be `const' but that causes problems with
|
||||
// the C++ compiler.
|
||||
jsize length;
|
||||
const jsize length;
|
||||
friend jsize JvGetArrayLength (__JArray*);
|
||||
|
||||
// This probably shouldn't be public.
|
||||
__JArray (jsize l) : length (l)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
template<class T>
|
||||
|
@ -67,6 +67,9 @@ details. */
|
||||
#include <ltdl.h>
|
||||
#endif
|
||||
|
||||
// We use placement new.
|
||||
#include <new>
|
||||
|
||||
// We allocate a single OutOfMemoryError exception which we keep
|
||||
// around for use if we run out of memory.
|
||||
static java::lang::OutOfMemoryError *no_memory;
|
||||
@ -411,8 +414,9 @@ _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);
|
||||
// Use placement new to initialize length field.
|
||||
new (obj) __JArray (count);
|
||||
jobject *ptr = elements(obj);
|
||||
// We know the allocator returns zeroed memory. So don't bother
|
||||
// zeroing it again.
|
||||
if (init)
|
||||
@ -446,7 +450,8 @@ _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;
|
||||
// Use placement new to initialize length field.
|
||||
new (arr) __JArray (count);
|
||||
// Note that we assume we are given zeroed memory by the allocator.
|
||||
|
||||
return arr;
|
||||
|
Loading…
Reference in New Issue
Block a user