summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--vm/CheckJni.cpp4
-rw-r--r--vm/Debugger.cpp6
-rw-r--r--vm/Jni.cpp4
-rw-r--r--vm/ReferenceTable.cpp2
-rw-r--r--vm/Thread.h4
-rw-r--r--vm/UtfString.cpp9
-rw-r--r--vm/compiler/codegen/arm/CodegenDriver.cpp20
-rw-r--r--vm/compiler/codegen/arm/armv5te/ArchVariant.cpp6
-rw-r--r--vm/compiler/codegen/arm/armv7-a-neon/ArchVariant.cpp6
-rw-r--r--vm/compiler/codegen/arm/armv7-a/ArchVariant.cpp6
-rw-r--r--vm/compiler/codegen/x86/ia32/ArchVariant.cpp6
-rw-r--r--vm/mterp/Mterp.cpp1
-rw-r--r--vm/mterp/c/OP_APUT_OBJECT.cpp4
-rw-r--r--vm/mterp/common/asm-constants.h4
-rw-r--r--vm/mterp/out/InterpC-allstubs.cpp4
-rw-r--r--vm/mterp/out/InterpC-portable.cpp4
-rw-r--r--vm/native/java_lang_System.cpp4
-rw-r--r--vm/native/sun_misc_Unsafe.cpp2
-rw-r--r--vm/oo/Array.cpp16
-rw-r--r--vm/oo/Array.h2
-rw-r--r--vm/oo/Object.h6
21 files changed, 57 insertions, 63 deletions
diff --git a/vm/CheckJni.cpp b/vm/CheckJni.cpp
index a891db9bb..a18bfd67f 100644
--- a/vm/CheckJni.cpp
+++ b/vm/CheckJni.cpp
@@ -1031,7 +1031,7 @@ static void* createGuardedPACopy(JNIEnv* env, const jarray jarr, jboolean* isCop
ScopedJniThreadState ts(env);
ArrayObject* arrObj = (ArrayObject*) dvmDecodeIndirectRef(env, jarr);
- PrimitiveType primType = arrObj->obj.clazz->elementClass->primitiveType;
+ PrimitiveType primType = arrObj->clazz->elementClass->primitiveType;
int len = arrObj->length * dvmPrimitiveTypeWidth(primType);
void* result = GuardedCopy::create(arrObj->contents, len, true);
if (isCopy != NULL) {
@@ -1067,7 +1067,7 @@ static void* releaseGuardedPACopy(JNIEnv* env, jarray jarr, void* dataBuf, int m
}
/* pointer is to the array contents; back up to the array object */
- result -= offsetof(ArrayObject, contents);
+ result -= OFFSETOF_MEMBER(ArrayObject, contents);
return result;
}
diff --git a/vm/Debugger.cpp b/vm/Debugger.cpp
index a9c8b98f3..fe1bedb8d 100644
--- a/vm/Debugger.cpp
+++ b/vm/Debugger.cpp
@@ -913,7 +913,7 @@ u1 dvmDbgGetArrayElementTag(ObjectId arrayId)
{
ArrayObject* arrayObj = (ArrayObject*) objectIdToObject(arrayId);
- ClassObject* arrayClass = arrayObj->obj.clazz;
+ ClassObject* arrayClass = arrayObj->clazz;
u1 tag = basicTagFromDescriptor(arrayClass->descriptor + 1);
if (!isTagPrimitive(tag)) {
/* try to refine it */
@@ -1001,7 +1001,7 @@ bool dvmDbgOutputArray(ObjectId arrayId, int firstIndex, int count,
return false;
}
- tag = basicTagFromDescriptor(arrayObj->obj.clazz->descriptor + 1);
+ tag = basicTagFromDescriptor(arrayObj->clazz->descriptor + 1);
if (isTagPrimitive(tag)) {
int width = dvmDbgGetTagWidth(tag);
@@ -1052,7 +1052,7 @@ bool dvmDbgSetArrayElements(ObjectId arrayId, int firstIndex, int count,
return false;
}
- tag = basicTagFromDescriptor(arrayObj->obj.clazz->descriptor + 1);
+ tag = basicTagFromDescriptor(arrayObj->clazz->descriptor + 1);
if (isTagPrimitive(tag)) {
int width = dvmDbgGetTagWidth(tag);
diff --git a/vm/Jni.cpp b/vm/Jni.cpp
index 6ddff9b5e..e3ef617c4 100644
--- a/vm/Jni.cpp
+++ b/vm/Jni.cpp
@@ -619,7 +619,7 @@ static void pinPrimitiveArray(ArrayObject* arrayObj) {
if (count > kPinComplainThreshold) {
LOGW("JNI: pin count on array %p (%s) is now %d",
- arrayObj, arrayObj->obj.clazz->descriptor, count);
+ arrayObj, arrayObj->clazz->descriptor, count);
/* keep going */
}
}
@@ -2377,7 +2377,7 @@ static void throwArrayRegionOutOfBounds(ArrayObject* arrayObj, jsize start,
{
dvmThrowExceptionFmt(gDvm.exArrayIndexOutOfBoundsException,
"%s offset=%d length=%d %s.length=%d",
- arrayObj->obj.clazz->descriptor, start, len, arrayIdentifier,
+ arrayObj->clazz->descriptor, start, len, arrayIdentifier,
arrayObj->length);
}
diff --git a/vm/ReferenceTable.cpp b/vm/ReferenceTable.cpp
index 92bc930c7..adf3383b6 100644
--- a/vm/ReferenceTable.cpp
+++ b/vm/ReferenceTable.cpp
@@ -157,7 +157,7 @@ bool dvmRemoveFromReferenceTable(ReferenceTable* pRef, Object** bottom,
static size_t getElementCount(const Object* obj)
{
const ArrayObject* arrayObj = (ArrayObject*) obj;
- if (arrayObj == NULL || arrayObj->obj.clazz == NULL || !dvmIsArray(arrayObj))
+ if (arrayObj == NULL || arrayObj->clazz == NULL || !dvmIsArray(arrayObj))
return 0;
return arrayObj->length;
}
diff --git a/vm/Thread.h b/vm/Thread.h
index 2f0a29d69..57ae24fad 100644
--- a/vm/Thread.h
+++ b/vm/Thread.h
@@ -141,8 +141,8 @@ struct Thread {
* sure it's even possible with the way mutexes are currently used.)
*/
- volatile int suspendCount;
- volatile int dbgSuspendCount;
+ int suspendCount;
+ int dbgSuspendCount;
u1* cardTable;
diff --git a/vm/UtfString.cpp b/vm/UtfString.cpp
index c76649c5d..17ce40ad5 100644
--- a/vm/UtfString.cpp
+++ b/vm/UtfString.cpp
@@ -205,13 +205,10 @@ static inline u4 computeUtf16Hash(const u2* utf16Str, size_t len)
}
u4 dvmComputeStringHash(const StringObject* strObj) {
- ArrayObject* chars = (ArrayObject*) dvmGetFieldObject((Object*) strObj,
+ const ArrayObject* chars = (ArrayObject*) dvmGetFieldObject((Object*) strObj,
STRING_FIELDOFF_VALUE);
- int offset, len;
-
- len = dvmGetFieldInt((Object*) strObj, STRING_FIELDOFF_COUNT);
- offset = dvmGetFieldInt((Object*) strObj, STRING_FIELDOFF_OFFSET);
-
+ int len = dvmGetFieldInt((Object*) strObj, STRING_FIELDOFF_COUNT);
+ int offset = dvmGetFieldInt((Object*) strObj, STRING_FIELDOFF_OFFSET);
return computeUtf16Hash((u2*)(void*)chars->contents + offset, len);
}
diff --git a/vm/compiler/codegen/arm/CodegenDriver.cpp b/vm/compiler/codegen/arm/CodegenDriver.cpp
index d170c8b4c..1a8ac4203 100644
--- a/vm/compiler/codegen/arm/CodegenDriver.cpp
+++ b/vm/compiler/codegen/arm/CodegenDriver.cpp
@@ -404,8 +404,8 @@ static void genArrayGet(CompilationUnit *cUnit, MIR *mir, OpSize size,
RegLocation rlDest, int scale)
{
RegisterClass regClass = dvmCompilerRegClassBySize(size);
- int lenOffset = offsetof(ArrayObject, length);
- int dataOffset = offsetof(ArrayObject, contents);
+ int lenOffset = OFFSETOF_MEMBER(ArrayObject, length);
+ int dataOffset = OFFSETOF_MEMBER(ArrayObject, contents);
RegLocation rlResult;
rlArray = loadValue(cUnit, rlArray, kCoreReg);
rlIndex = loadValue(cUnit, rlIndex, kCoreReg);
@@ -473,8 +473,8 @@ static void genArrayPut(CompilationUnit *cUnit, MIR *mir, OpSize size,
RegLocation rlSrc, int scale)
{
RegisterClass regClass = dvmCompilerRegClassBySize(size);
- int lenOffset = offsetof(ArrayObject, length);
- int dataOffset = offsetof(ArrayObject, contents);
+ int lenOffset = OFFSETOF_MEMBER(ArrayObject, length);
+ int dataOffset = OFFSETOF_MEMBER(ArrayObject, contents);
int regPtr;
rlArray = loadValue(cUnit, rlArray, kCoreReg);
@@ -547,8 +547,8 @@ static void genArrayObjectPut(CompilationUnit *cUnit, MIR *mir,
RegLocation rlArray, RegLocation rlIndex,
RegLocation rlSrc, int scale)
{
- int lenOffset = offsetof(ArrayObject, length);
- int dataOffset = offsetof(ArrayObject, contents);
+ int lenOffset = OFFSETOF_MEMBER(ArrayObject, length);
+ int dataOffset = OFFSETOF_MEMBER(ArrayObject, contents);
dvmCompilerFlushAllRegs(cUnit);
@@ -2076,7 +2076,7 @@ static bool handleFmt12x(CompilationUnit *cUnit, MIR *mir)
storeValue(cUnit, rlDest, rlResult);
break;
case OP_ARRAY_LENGTH: {
- int lenOffset = offsetof(ArrayObject, length);
+ int lenOffset = OFFSETOF_MEMBER(ArrayObject, length);
rlSrc = loadValue(cUnit, rlSrc, kCoreReg);
genNullCheck(cUnit, rlSrc.sRegLow, rlSrc.lowReg,
mir->offset, NULL);
@@ -3576,7 +3576,7 @@ static bool genInlinedStringIsEmpty(CompilationUnit *cUnit, MIR *mir)
static bool genInlinedStringCharAt(CompilationUnit *cUnit, MIR *mir)
{
- int contents = offsetof(ArrayObject, contents);
+ int contents = OFFSETOF_MEMBER(ArrayObject, contents);
RegLocation rlObj = dvmCompilerGetSrc(cUnit, mir, 0);
RegLocation rlIdx = dvmCompilerGetSrc(cUnit, mir, 1);
RegLocation rlDest = inlinedTarget(cUnit, mir, false);
@@ -3939,7 +3939,7 @@ static void genHoistedChecksForCountUpLoop(CompilationUnit *cUnit, MIR *mir)
* ssa name.
*/
DecodedInstruction *dInsn = &mir->dalvikInsn;
- const int lenOffset = offsetof(ArrayObject, length);
+ const int lenOffset = OFFSETOF_MEMBER(ArrayObject, length);
const int maxC = dInsn->arg[0];
int regLength;
RegLocation rlArray = cUnit->regLocation[mir->dalvikInsn.vA];
@@ -3986,7 +3986,7 @@ static void genHoistedChecksForCountUpLoop(CompilationUnit *cUnit, MIR *mir)
static void genHoistedChecksForCountDownLoop(CompilationUnit *cUnit, MIR *mir)
{
DecodedInstruction *dInsn = &mir->dalvikInsn;
- const int lenOffset = offsetof(ArrayObject, length);
+ const int lenOffset = OFFSETOF_MEMBER(ArrayObject, length);
const int regLength = dvmCompilerAllocTemp(cUnit);
const int maxC = dInsn->arg[0];
RegLocation rlArray = cUnit->regLocation[mir->dalvikInsn.vA];
diff --git a/vm/compiler/codegen/arm/armv5te/ArchVariant.cpp b/vm/compiler/codegen/arm/armv5te/ArchVariant.cpp
index 57a8c8a1d..5b2e1bf10 100644
--- a/vm/compiler/codegen/arm/armv5te/ArchVariant.cpp
+++ b/vm/compiler/codegen/arm/armv5te/ArchVariant.cpp
@@ -63,9 +63,9 @@ bool dvmCompilerArchVariantInit(void)
/* Codegen-specific assumptions */
assert(offsetof(ClassObject, vtable) < 128 &&
(offsetof(ClassObject, vtable) & 0x3) == 0);
- assert(offsetof(ArrayObject, length) < 128 &&
- (offsetof(ArrayObject, length) & 0x3) == 0);
- assert(offsetof(ArrayObject, contents) < 256);
+ assert(OFFSETOF_MEMBER(ArrayObject, length) < 128 &&
+ (OFFSETOF_MEMBER(ArrayObject, length) & 0x3) == 0);
+ assert(OFFSETOF_MEMBER(ArrayObject, contents) < 256);
/* Up to 5 args are pushed on top of FP - sizeofStackSaveArea */
assert(sizeof(StackSaveArea) < 236);
diff --git a/vm/compiler/codegen/arm/armv7-a-neon/ArchVariant.cpp b/vm/compiler/codegen/arm/armv7-a-neon/ArchVariant.cpp
index 59d7c95cd..6234747b2 100644
--- a/vm/compiler/codegen/arm/armv7-a-neon/ArchVariant.cpp
+++ b/vm/compiler/codegen/arm/armv7-a-neon/ArchVariant.cpp
@@ -58,9 +58,9 @@ bool dvmCompilerArchVariantInit(void)
/* Codegen-specific assumptions */
assert(offsetof(ClassObject, vtable) < 128 &&
(offsetof(ClassObject, vtable) & 0x3) == 0);
- assert(offsetof(ArrayObject, length) < 128 &&
- (offsetof(ArrayObject, length) & 0x3) == 0);
- assert(offsetof(ArrayObject, contents) < 256);
+ assert(OFFSETOF_MEMBER(ArrayObject, length) < 128 &&
+ (OFFSETOF_MEMBER(ArrayObject, length) & 0x3) == 0);
+ assert(OFFSETOF_MEMBER(ArrayObject, contents) < 256);
/* Up to 5 args are pushed on top of FP - sizeofStackSaveArea */
assert(sizeof(StackSaveArea) < 236);
diff --git a/vm/compiler/codegen/arm/armv7-a/ArchVariant.cpp b/vm/compiler/codegen/arm/armv7-a/ArchVariant.cpp
index 245ff78c8..d68d150da 100644
--- a/vm/compiler/codegen/arm/armv7-a/ArchVariant.cpp
+++ b/vm/compiler/codegen/arm/armv7-a/ArchVariant.cpp
@@ -59,9 +59,9 @@ bool dvmCompilerArchVariantInit(void)
/* Codegen-specific assumptions */
assert(offsetof(ClassObject, vtable) < 128 &&
(offsetof(ClassObject, vtable) & 0x3) == 0);
- assert(offsetof(ArrayObject, length) < 128 &&
- (offsetof(ArrayObject, length) & 0x3) == 0);
- assert(offsetof(ArrayObject, contents) < 256);
+ assert(OFFSETOF_MEMBER(ArrayObject, length) < 128 &&
+ (OFFSETOF_MEMBER(ArrayObject, length) & 0x3) == 0);
+ assert(OFFSETOF_MEMBER(ArrayObject, contents) < 256);
/* Up to 5 args are pushed on top of FP - sizeofStackSaveArea */
assert(sizeof(StackSaveArea) < 236);
diff --git a/vm/compiler/codegen/x86/ia32/ArchVariant.cpp b/vm/compiler/codegen/x86/ia32/ArchVariant.cpp
index 4dd528ead..6992c167a 100644
--- a/vm/compiler/codegen/x86/ia32/ArchVariant.cpp
+++ b/vm/compiler/codegen/x86/ia32/ArchVariant.cpp
@@ -63,9 +63,9 @@ bool dvmCompilerArchVariantInit(void)
/* Codegen-specific assumptions */
assert(offsetof(ClassObject, vtable) < 128 &&
(offsetof(ClassObject, vtable) & 0x3) == 0);
- assert(offsetof(ArrayObject, length) < 128 &&
- (offsetof(ArrayObject, length) & 0x3) == 0);
- assert(offsetof(ArrayObject, contents) < 256);
+ assert(OFFSETOF_MEMBER(ArrayObject, length) < 128 &&
+ (OFFSETOF_MEMBER(ArrayObject, length) & 0x3) == 0);
+ assert(OFFSETOF_MEMBER(ArrayObject, contents) < 256);
/* Up to 5 args are pushed on top of FP - sizeofStackSaveArea */
assert(sizeof(StackSaveArea) < 236);
diff --git a/vm/mterp/Mterp.cpp b/vm/mterp/Mterp.cpp
index d8ba97da4..ab439d50a 100644
--- a/vm/mterp/Mterp.cpp
+++ b/vm/mterp/Mterp.cpp
@@ -17,6 +17,7 @@
/*
* Mterp entry point and support functions.
*/
+#include "Dalvik.h"
#include "mterp/Mterp.h"
#include <stddef.h>
diff --git a/vm/mterp/c/OP_APUT_OBJECT.cpp b/vm/mterp/c/OP_APUT_OBJECT.cpp
index af0dce35f..253df2575 100644
--- a/vm/mterp/c/OP_APUT_OBJECT.cpp
+++ b/vm/mterp/c/OP_APUT_OBJECT.cpp
@@ -21,11 +21,11 @@ HANDLE_OPCODE(OP_APUT_OBJECT /*vAA, vBB, vCC*/)
if (obj != NULL) {
if (!checkForNull(obj))
GOTO_exceptionThrown();
- if (!dvmCanPutArrayElement(obj->clazz, arrayObj->obj.clazz)) {
+ if (!dvmCanPutArrayElement(obj->clazz, arrayObj->clazz)) {
LOGV("Can't put a '%s'(%p) into array type='%s'(%p)\n",
obj->clazz->descriptor, obj,
arrayObj->obj.clazz->descriptor, arrayObj);
- dvmThrowArrayStoreExceptionIncompatibleElement(obj->clazz, arrayObj->obj.clazz);
+ dvmThrowArrayStoreExceptionIncompatibleElement(obj->clazz, arrayObj->clazz);
GOTO_exceptionThrown();
}
}
diff --git a/vm/mterp/common/asm-constants.h b/vm/mterp/common/asm-constants.h
index 4b091caa7..f9fb928b2 100644
--- a/vm/mterp/common/asm-constants.h
+++ b/vm/mterp/common/asm-constants.h
@@ -11,9 +11,9 @@
* down to nothing.
*/
# define MTERP_OFFSET(_name, _type, _field, _offset) \
- if (offsetof(_type, _field) != _offset) { \
+ if (OFFSETOF_MEMBER(_type, _field) != _offset) { \
LOGE("Bad asm offset %s (%d), should be %d\n", \
- #_name, _offset, offsetof(_type, _field)); \
+ #_name, _offset, OFFSETOF_MEMBER(_type, _field)); \
failed = true; \
}
# define MTERP_SIZEOF(_name, _type, _size) \
diff --git a/vm/mterp/out/InterpC-allstubs.cpp b/vm/mterp/out/InterpC-allstubs.cpp
index 8152736a5..91b20d009 100644
--- a/vm/mterp/out/InterpC-allstubs.cpp
+++ b/vm/mterp/out/InterpC-allstubs.cpp
@@ -2137,11 +2137,11 @@ HANDLE_OPCODE(OP_APUT_OBJECT /*vAA, vBB, vCC*/)
if (obj != NULL) {
if (!checkForNull(obj))
GOTO_exceptionThrown();
- if (!dvmCanPutArrayElement(obj->clazz, arrayObj->obj.clazz)) {
+ if (!dvmCanPutArrayElement(obj->clazz, arrayObj->clazz)) {
LOGV("Can't put a '%s'(%p) into array type='%s'(%p)\n",
obj->clazz->descriptor, obj,
arrayObj->obj.clazz->descriptor, arrayObj);
- dvmThrowArrayStoreExceptionIncompatibleElement(obj->clazz, arrayObj->obj.clazz);
+ dvmThrowArrayStoreExceptionIncompatibleElement(obj->clazz, arrayObj->clazz);
GOTO_exceptionThrown();
}
}
diff --git a/vm/mterp/out/InterpC-portable.cpp b/vm/mterp/out/InterpC-portable.cpp
index 0eb74c397..6c6da9867 100644
--- a/vm/mterp/out/InterpC-portable.cpp
+++ b/vm/mterp/out/InterpC-portable.cpp
@@ -2159,11 +2159,11 @@ HANDLE_OPCODE(OP_APUT_OBJECT /*vAA, vBB, vCC*/)
if (obj != NULL) {
if (!checkForNull(obj))
GOTO_exceptionThrown();
- if (!dvmCanPutArrayElement(obj->clazz, arrayObj->obj.clazz)) {
+ if (!dvmCanPutArrayElement(obj->clazz, arrayObj->clazz)) {
LOGV("Can't put a '%s'(%p) into array type='%s'(%p)\n",
obj->clazz->descriptor, obj,
arrayObj->obj.clazz->descriptor, arrayObj);
- dvmThrowArrayStoreExceptionIncompatibleElement(obj->clazz, arrayObj->obj.clazz);
+ dvmThrowArrayStoreExceptionIncompatibleElement(obj->clazz, arrayObj->clazz);
GOTO_exceptionThrown();
}
}
diff --git a/vm/native/java_lang_System.cpp b/vm/native/java_lang_System.cpp
index e6b2f1afe..06ab5f81c 100644
--- a/vm/native/java_lang_System.cpp
+++ b/vm/native/java_lang_System.cpp
@@ -155,8 +155,8 @@ static void Dalvik_java_lang_System_arraycopy(const u4* args, JValue* pResult)
RETURN_VOID();
}
- srcClass = srcArray->obj.clazz;
- dstClass = dstArray->obj.clazz;
+ srcClass = srcArray->clazz;
+ dstClass = dstArray->clazz;
srcType = srcClass->descriptor[1];
dstType = dstClass->descriptor[1];
diff --git a/vm/native/sun_misc_Unsafe.cpp b/vm/native/sun_misc_Unsafe.cpp
index 16e3ec040..db8493bdc 100644
--- a/vm/native/sun_misc_Unsafe.cpp
+++ b/vm/native/sun_misc_Unsafe.cpp
@@ -42,7 +42,7 @@ static void Dalvik_sun_misc_Unsafe_arrayBaseOffset0(const u4* args,
{
// The base offset is not type-dependent in this vm.
UNUSED_PARAMETER(args);
- RETURN_INT(offsetof(ArrayObject, contents));
+ RETURN_INT(OFFSETOF_MEMBER(ArrayObject, contents));
}
/*
diff --git a/vm/oo/Array.cpp b/vm/oo/Array.cpp
index baf9d3c81..f22790820 100644
--- a/vm/oo/Array.cpp
+++ b/vm/oo/Array.cpp
@@ -47,7 +47,7 @@ static ArrayObject* allocArray(ClassObject* arrayClass, size_t length,
assert((elemWidth & (elemWidth - 1)) == 0);
size_t elementShift = sizeof(size_t) * CHAR_BIT - 1 - CLZ(elemWidth);
size_t elementSize = length << elementShift;
- size_t headerSize = offsetof(ArrayObject, contents);
+ size_t headerSize = OFFSETOF_MEMBER(ArrayObject, contents);
size_t totalSize = elementSize + headerSize;
if (elementSize >> elementShift != length || totalSize < elementSize) {
char *descriptor = dvmHumanReadableDescriptor(arrayClass->descriptor);
@@ -58,7 +58,7 @@ static ArrayObject* allocArray(ClassObject* arrayClass, size_t length,
}
ArrayObject* newArray = (ArrayObject*)dvmMalloc(totalSize, allocFlags);
if (newArray != NULL) {
- DVM_OBJECT_INIT(&newArray->obj, arrayClass);
+ DVM_OBJECT_INIT(newArray, arrayClass);
newArray->length = length;
dvmTrackAllocation(arrayClass, totalSize);
}
@@ -497,9 +497,9 @@ bool dvmCopyObjectArray(ArrayObject* dstArray, const ArrayObject* srcArray,
u4 length, count;
assert(srcArray->length == dstArray->length);
- assert(dstArray->obj.clazz->elementClass == dstElemClass ||
- (dstArray->obj.clazz->elementClass == dstElemClass->elementClass &&
- dstArray->obj.clazz->arrayDim == dstElemClass->arrayDim+1));
+ assert(dstArray->clazz->elementClass == dstElemClass ||
+ (dstArray->clazz->elementClass == dstElemClass->elementClass &&
+ dstArray->clazz->arrayDim == dstElemClass->arrayDim+1));
length = dstArray->length;
for (count = 0; count < length; count++) {
@@ -623,10 +623,8 @@ size_t dvmArrayClassElementWidth(const ClassObject* arrayClass)
size_t dvmArrayObjectSize(const ArrayObject *array)
{
- size_t size;
-
assert(array != NULL);
- size = offsetof(ArrayObject, contents);
- size += array->length * dvmArrayClassElementWidth(array->obj.clazz);
+ size_t size = OFFSETOF_MEMBER(ArrayObject, contents);
+ size += array->length * dvmArrayClassElementWidth(array->clazz);
return size;
}
diff --git a/vm/oo/Array.h b/vm/oo/Array.h
index 9a5df52bd..ea68f84a9 100644
--- a/vm/oo/Array.h
+++ b/vm/oo/Array.h
@@ -95,7 +95,7 @@ INLINE bool dvmIsObjectArrayClass(const ClassObject* clazz)
*/
INLINE bool dvmIsObjectArray(const ArrayObject* arrayObj)
{
- return dvmIsObjectArrayClass(arrayObj->obj.clazz);
+ return dvmIsObjectArrayClass(arrayObj->clazz);
}
/*
diff --git a/vm/oo/Object.h b/vm/oo/Object.h
index ef232d4f5..c647a905a 100644
--- a/vm/oo/Object.h
+++ b/vm/oo/Object.h
@@ -221,7 +221,7 @@ struct Object {
* void DVM_OBJECT_INIT(Object *obj, ClassObject *clazz_)
*/
#define DVM_OBJECT_INIT(obj, clazz_) \
- dvmSetFieldObject((Object *)obj, offsetof(Object, clazz), (Object *)clazz_)
+ dvmSetFieldObject((Object *)obj, OFFSETOF_MEMBER(Object, clazz), (Object *)clazz_)
/*
* Data objects have an Object header followed by their instance data.
@@ -257,9 +257,7 @@ struct StringObject {
* by the instruction. If necessary, the width can be derived from
* the first char of obj->clazz->descriptor.
*/
-struct ArrayObject {
- Object obj; /* MUST be first item */
-
+struct ArrayObject : Object {
/* number of elements; immutable after init */
u4 length;