mirror of
https://github.com/corda/corda.git
synced 2025-01-22 12:28:11 +00:00
RUNTIME_ARRAY usage
This commit is contained in:
parent
edbea8ac2b
commit
e6fc4e3bea
@ -2555,7 +2555,7 @@ class MyAssembler: public Assembler {
|
||||
OperandType type;
|
||||
Operand* operand;
|
||||
};
|
||||
Argument* arguments = new Argument[argumentCount];
|
||||
RUNTIME_ARRAY(Argument, arguments, argumentCount);
|
||||
|
||||
va_list a; va_start(a, argumentCount);
|
||||
unsigned footprint = 0;
|
||||
@ -2590,9 +2590,6 @@ class MyAssembler: public Assembler {
|
||||
offset += ceiling(arguments[i].size, TargetBytesPerWord);
|
||||
}
|
||||
}
|
||||
|
||||
delete[] arguments;
|
||||
arguments = 0;
|
||||
}
|
||||
|
||||
virtual void allocateFrame(unsigned footprint) {
|
||||
|
@ -182,7 +182,7 @@ dynamicCall(void* function, uintptr_t* arguments, uint8_t* argumentTypes,
|
||||
unsigned vfpIndex = 0;
|
||||
unsigned vfpBackfillIndex UNUSED = 0;
|
||||
|
||||
uintptr_t* stack = new uintptr_t[(argumentCount * 8) / BytesPerWord]; // is > argumentSize to account for padding
|
||||
RUNTIME_ARRAY(uintptr_t, stack, (argumentCount * 8) / BytesPerWord); // is > argumentSize to account for padding
|
||||
unsigned stackIndex = 0;
|
||||
|
||||
unsigned ai = 0;
|
||||
@ -272,12 +272,10 @@ dynamicCall(void* function, uintptr_t* arguments, uint8_t* argumentTypes,
|
||||
}
|
||||
|
||||
unsigned stackSize = stackIndex*BytesPerWord + ((stackIndex & 1) << 2);
|
||||
auto retVal = vmNativeCall
|
||||
return vmNativeCall
|
||||
(function, stackSize, stack, stackIndex * BytesPerWord,
|
||||
(gprIndex ? gprTable : 0),
|
||||
(vfpIndex ? vfpTable : 0), returnType);
|
||||
delete[] stack;
|
||||
return retVal;
|
||||
}
|
||||
|
||||
} // namespace vm
|
||||
|
@ -342,7 +342,7 @@ makeCodeImage(Thread* t, Zone* zone, BootImage* image, uint8_t* code,
|
||||
|
||||
unsigned count = s.read2() - 1;
|
||||
if (count) {
|
||||
Type* types = new Type[count + 2];
|
||||
RUNTIME_ARRAY(Type, types, count + 2);
|
||||
types[0] = Type_object;
|
||||
types[1] = Type_intptr_t;
|
||||
|
||||
@ -410,9 +410,6 @@ makeCodeImage(Thread* t, Zone* zone, BootImage* image, uint8_t* code,
|
||||
(t, typeMaps, hashMapFind
|
||||
(t, root(t, Machine::PoolMap), c, objectHash, objectEqual), array,
|
||||
objectHash);
|
||||
|
||||
delete[] types;
|
||||
types = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@ -423,7 +420,7 @@ makeCodeImage(Thread* t, Zone* zone, BootImage* image, uint8_t* code,
|
||||
object fields = allFields(t, typeMaps, c, &count, &array);
|
||||
PROTECT(t, fields);
|
||||
|
||||
Field* memberFields = new Field[count + 1];
|
||||
RUNTIME_ARRAY(Field, memberFields, count + 1);
|
||||
|
||||
unsigned memberIndex;
|
||||
unsigned buildMemberOffset;
|
||||
@ -447,7 +444,7 @@ makeCodeImage(Thread* t, Zone* zone, BootImage* image, uint8_t* code,
|
||||
++ memberIndex;
|
||||
}
|
||||
} else {
|
||||
init(new (memberFields) Field, Type_object, 0, BytesPerWord, 0,
|
||||
init(new (&memberFields[0]) Field, Type_object, 0, BytesPerWord, 0,
|
||||
TargetBytesPerWord);
|
||||
|
||||
memberIndex = 1;
|
||||
@ -457,15 +454,15 @@ makeCodeImage(Thread* t, Zone* zone, BootImage* image, uint8_t* code,
|
||||
|
||||
const unsigned StaticHeader = 3;
|
||||
|
||||
Field* staticFields = new Field[count + StaticHeader];
|
||||
RUNTIME_ARRAY(Field, staticFields, count + StaticHeader);
|
||||
|
||||
init(new (staticFields) Field, Type_object, 0, BytesPerWord, 0,
|
||||
init(new (&staticFields[0]) Field, Type_object, 0, BytesPerWord, 0,
|
||||
TargetBytesPerWord);
|
||||
|
||||
init(new (staticFields + 1) Field, Type_intptr_t, BytesPerWord,
|
||||
init(new (&staticFields[1]) Field, Type_intptr_t, BytesPerWord,
|
||||
BytesPerWord, TargetBytesPerWord, TargetBytesPerWord);
|
||||
|
||||
init(new (staticFields + 2) Field, Type_object, BytesPerWord * 2,
|
||||
init(new (&staticFields[2]) Field, Type_object, BytesPerWord * 2,
|
||||
BytesPerWord, TargetBytesPerWord * 2, TargetBytesPerWord);
|
||||
|
||||
unsigned staticIndex = StaticHeader;
|
||||
@ -515,7 +512,7 @@ makeCodeImage(Thread* t, Zone* zone, BootImage* image, uint8_t* code,
|
||||
|
||||
buildStaticOffset = fieldOffset(t, field);
|
||||
|
||||
init(new (staticFields + staticIndex) Field, type,
|
||||
init(new (&staticFields[staticIndex]) Field, type,
|
||||
buildStaticOffset, buildSize, targetStaticOffset,
|
||||
targetSize);
|
||||
|
||||
@ -529,7 +526,7 @@ makeCodeImage(Thread* t, Zone* zone, BootImage* image, uint8_t* code,
|
||||
|
||||
buildMemberOffset = fieldOffset(t, field);
|
||||
|
||||
init(new (memberFields + memberIndex) Field, type,
|
||||
init(new (&memberFields[memberIndex]) Field, type,
|
||||
buildMemberOffset, buildSize, targetMemberOffset,
|
||||
targetSize);
|
||||
|
||||
@ -552,7 +549,7 @@ makeCodeImage(Thread* t, Zone* zone, BootImage* image, uint8_t* code,
|
||||
ceiling(targetMemberOffset, TargetBytesPerWord), memberIndex);
|
||||
|
||||
for (unsigned i = 0; i < memberIndex; ++i) {
|
||||
Field* f = memberFields + i;
|
||||
Field* f = &memberFields[i];
|
||||
|
||||
expect(t, f->buildOffset
|
||||
< map->buildFixedSizeInWords * BytesPerWord);
|
||||
@ -576,7 +573,7 @@ makeCodeImage(Thread* t, Zone* zone, BootImage* image, uint8_t* code,
|
||||
TypeMap::SingletonKind);
|
||||
|
||||
for (unsigned i = 0; i < staticIndex; ++i) {
|
||||
Field* f = staticFields + i;
|
||||
Field* f = &staticFields[i];
|
||||
|
||||
expect(t, f->buildOffset
|
||||
< map->buildFixedSizeInWords * BytesPerWord);
|
||||
@ -589,12 +586,6 @@ makeCodeImage(Thread* t, Zone* zone, BootImage* image, uint8_t* code,
|
||||
hashMapInsert
|
||||
(t, typeMaps, classStaticTable(t, c), array, objectHash);
|
||||
}
|
||||
|
||||
delete[] memberFields;
|
||||
memberFields = 0;
|
||||
|
||||
delete[] staticFields;
|
||||
staticFields = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1343,9 +1334,9 @@ writeBootImage2(Thread* t, OutputStream* bootimageOutput, OutputStream* codeOutp
|
||||
}
|
||||
++ count;
|
||||
|
||||
Field* fields = new Field[count];
|
||||
RUNTIME_ARRAY(Field, fields, count);
|
||||
|
||||
init(new (fields) Field, Type_object, 0, BytesPerWord, 0,
|
||||
init(new (&fields[0]) Field, Type_object, 0, BytesPerWord, 0,
|
||||
TargetBytesPerWord);
|
||||
|
||||
unsigned buildOffset = BytesPerWord;
|
||||
@ -1423,7 +1414,7 @@ writeBootImage2(Thread* t, OutputStream* bootimageOutput, OutputStream* codeOutp
|
||||
++ targetOffset;
|
||||
}
|
||||
|
||||
init(new (fields + j) Field, type, buildOffset, buildSize,
|
||||
init(new (&fields[j]) Field, type, buildOffset, buildSize,
|
||||
targetOffset, targetSize);
|
||||
|
||||
buildOffset += buildSize;
|
||||
@ -1458,7 +1449,7 @@ writeBootImage2(Thread* t, OutputStream* bootimageOutput, OutputStream* codeOutp
|
||||
targetArrayElementSize, arrayElementType);
|
||||
|
||||
for (unsigned j = 0; j < fixedFieldCount; ++j) {
|
||||
Field* f = fields + j;
|
||||
Field* f = &fields[j];
|
||||
|
||||
expect(t, f->buildOffset
|
||||
< map->buildFixedSizeInWords * BytesPerWord);
|
||||
@ -1471,9 +1462,6 @@ writeBootImage2(Thread* t, OutputStream* bootimageOutput, OutputStream* codeOutp
|
||||
hashMapInsert
|
||||
(t, typeMaps, vm::type(t, static_cast<Machine::Type>(i)), array,
|
||||
objectHash);
|
||||
|
||||
delete[] fields;
|
||||
fields = 0;
|
||||
}
|
||||
|
||||
constants = makeCodeImage
|
||||
|
@ -243,6 +243,10 @@ class RuntimeArray {
|
||||
free(body);
|
||||
}
|
||||
|
||||
T& operator[] (const unsigned index) {
|
||||
return body[index];
|
||||
}
|
||||
|
||||
T* body;
|
||||
};
|
||||
|
||||
|
@ -2321,7 +2321,7 @@ interpret3(Thread* t, const int base)
|
||||
object class_ = resolveClassInPool(t, frameMethod(t, frame), index - 1);
|
||||
PROTECT(t, class_);
|
||||
|
||||
int32_t* counts = new int32_t[dimensions];
|
||||
RUNTIME_ARRAY(int32_t, counts, dimensions);
|
||||
for (int i = dimensions - 1; i >= 0; --i) {
|
||||
counts[i] = popInt(t);
|
||||
if (UNLIKELY(counts[i] < 0)) {
|
||||
@ -2338,9 +2338,6 @@ interpret3(Thread* t, const int base)
|
||||
populateMultiArray(t, array, counts, 0, dimensions);
|
||||
|
||||
pushObject(t, array);
|
||||
|
||||
delete[] counts;
|
||||
counts = 0;
|
||||
} goto loop;
|
||||
|
||||
case new_: {
|
||||
|
Loading…
Reference in New Issue
Block a user