From: <bi...@us...> - 2008-09-10 23:18:06
|
Revision: 3265 http://oorexx.svn.sourceforge.net/oorexx/?rev=3265&view=rev Author: bigrixx Date: 2008-09-10 23:18:16 +0000 (Wed, 10 Sep 2008) Log Message: ----------- Fix array class size regressions Modified Paths: -------------- main/trunk/interpreter/classes/ArrayClass.cpp main/trunk/interpreter/classes/ArrayClass.hpp Modified: main/trunk/interpreter/classes/ArrayClass.cpp =================================================================== --- main/trunk/interpreter/classes/ArrayClass.cpp 2008-09-10 22:28:09 UTC (rev 3264) +++ main/trunk/interpreter/classes/ArrayClass.cpp 2008-09-10 23:18:16 UTC (rev 3265) @@ -2038,7 +2038,7 @@ { /* If no argument is passed */ /* create an empty array. */ - temp = new (ARRAY_DEFAULT_SIZE, arrayClass) RexxArray; + temp = new ((size_t)0, ARRAY_DEFAULT_SIZE, arrayClass) RexxArray; ProtectedObject p(temp); temp->sendMessage(OREF_INIT); /* call any rexx init's */ return temp; @@ -2624,22 +2624,22 @@ return aref; } -void *RexxArray::operator new(size_t newSize, size_t size, RexxClass *arrayClass) +void *RexxArray::operator new(size_t newSize, size_t size, size_t maxSize, RexxClass *arrayClass) /******************************************************************************/ /* Function: Low level array creation */ /******************************************************************************/ { size_t bytes; RexxArray *newArray; - size_t maxSize; /* is hintsize lower than minimal */ - if (size <= ARRAY_MIN_SIZE) + if (maxSize <= ARRAY_MIN_SIZE) { /* allocation array size? */ maxSize = ARRAY_MIN_SIZE; /* yes, we will actually min size */ } - else + // if the max is smaller than the size, just use the max size. + if (maxSize < size) { - maxSize = size; /* nope, hintSize is allocat size */ + maxSize = size; } /* compute size of new array obj */ bytes = newSize + (sizeof(RexxObject *) * (maxSize - 1)); Modified: main/trunk/interpreter/classes/ArrayClass.hpp =================================================================== --- main/trunk/interpreter/classes/ArrayClass.hpp 2008-09-10 22:28:09 UTC (rev 3264) +++ main/trunk/interpreter/classes/ArrayClass.hpp 2008-09-10 23:18:16 UTC (rev 3265) @@ -75,7 +75,7 @@ void * operator new(size_t, RexxObject *, RexxObject *, RexxObject *); void * operator new(size_t, RexxObject *, RexxObject *, RexxObject *, RexxObject *); void * operator new(size_t, size_t, RexxObject **); - void * operator new(size_t, size_t, RexxClass *cls = TheArrayClass); + void * operator new(size_t, size_t, size_t, RexxClass *cls = TheArrayClass); inline void operator delete(void *) {;} inline void operator delete(void *, void *) {;} @@ -85,7 +85,7 @@ inline void operator delete(void *, RexxObject *, RexxObject *, RexxObject *) {;} inline void operator delete(void *, RexxObject *, RexxObject *, RexxObject *, RexxObject *) {;} inline void operator delete(void *, size_t, RexxObject **) {;} - inline void operator delete(void *, size_t, RexxClass *cls) {;} + inline void operator delete(void *, size_t, size_t, RexxClass *cls) {;} inline void operator delete(void *, RexxObject **) { ; } inline RexxArray(RESTORETYPE restoreType) { ; }; @@ -182,11 +182,12 @@ static RexxClass *classInstance; static RexxArray *nullArray; + static const size_t ARRAY_MIN_SIZE; + static const size_t ARRAY_DEFAULT_SIZE; // default size for ooRexx allocation + protected: static const size_t MAX_FIXEDARRAY_SIZE; - static const size_t ARRAY_MIN_SIZE; - static const size_t ARRAY_DEFAULT_SIZE; // default size for ooRexx allocation size_t arraySize; /* current size of array */ size_t maximumSize; /* Maximum size array can grow */ @@ -199,12 +200,12 @@ inline RexxArray *new_externalArray(size_t s, RexxClass *c) { - return new (s, c) RexxArray; + return new (s, RexxArray::ARRAY_DEFAULT_SIZE, c) RexxArray; } inline RexxArray *new_array(size_t s) { - return new (s, TheArrayClass) RexxArray; + return new (s, RexxArray::ARRAY_MIN_SIZE, TheArrayClass) RexxArray; } inline RexxArray *new_array(RexxObject *o1) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |