diff options
-rw-r--r-- | vm/CheckJni.cpp | 4 | ||||
-rw-r--r-- | vm/Debugger.cpp | 6 | ||||
-rw-r--r-- | vm/Jni.cpp | 4 | ||||
-rw-r--r-- | vm/ReferenceTable.cpp | 2 | ||||
-rw-r--r-- | vm/Thread.h | 4 | ||||
-rw-r--r-- | vm/UtfString.cpp | 9 | ||||
-rw-r--r-- | vm/compiler/codegen/arm/CodegenDriver.cpp | 20 | ||||
-rw-r--r-- | vm/compiler/codegen/arm/armv5te/ArchVariant.cpp | 6 | ||||
-rw-r--r-- | vm/compiler/codegen/arm/armv7-a-neon/ArchVariant.cpp | 6 | ||||
-rw-r--r-- | vm/compiler/codegen/arm/armv7-a/ArchVariant.cpp | 6 | ||||
-rw-r--r-- | vm/compiler/codegen/x86/ia32/ArchVariant.cpp | 6 | ||||
-rw-r--r-- | vm/mterp/Mterp.cpp | 1 | ||||
-rw-r--r-- | vm/mterp/c/OP_APUT_OBJECT.cpp | 4 | ||||
-rw-r--r-- | vm/mterp/common/asm-constants.h | 4 | ||||
-rw-r--r-- | vm/mterp/out/InterpC-allstubs.cpp | 4 | ||||
-rw-r--r-- | vm/mterp/out/InterpC-portable.cpp | 4 | ||||
-rw-r--r-- | vm/native/java_lang_System.cpp | 4 | ||||
-rw-r--r-- | vm/native/sun_misc_Unsafe.cpp | 2 | ||||
-rw-r--r-- | vm/oo/Array.cpp | 16 | ||||
-rw-r--r-- | vm/oo/Array.h | 2 | ||||
-rw-r--r-- | vm/oo/Object.h | 6 |
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; |