Enforce the use of accessors on JValue so we can ensure sign extension.
Change-Id: I34810af7661d8674c84707afe5cfdf9e2c233f8b
diff --git a/src/compiler_llvm/runtime_support_llvm.cc b/src/compiler_llvm/runtime_support_llvm.cc
index 224b902..d1994f1 100644
--- a/src/compiler_llvm/runtime_support_llvm.cc
+++ b/src/compiler_llvm/runtime_support_llvm.cc
@@ -682,19 +682,29 @@
JValue val;
switch (shorty[i+1]) {
case 'Z':
+ val.SetZ(va_arg(ap, jint));
+ break;
case 'B':
+ val.SetB(va_arg(ap, jint));
+ break;
case 'C':
+ val.SetC(va_arg(ap, jint));
+ break;
case 'S':
+ val.SetS(va_arg(ap, jint));
+ break;
case 'I':
+ val.SetI(va_arg(ap, jint));
+ break;
case 'F':
- val.i = va_arg(ap, jint);
+ val.SetI(va_arg(ap, jint)); // TODO: is this right?
break;
case 'L':
- val.l = va_arg(ap, Object*);
+ val.SetL(va_arg(ap, Object*));
break;
case 'D':
case 'J':
- val.j = va_arg(ap, jlong);
+ val.SetJ(va_arg(ap, jlong)); // TODO: is this right for double?
break;
}
Class* param_type = param_types->Get(i);
diff --git a/src/debugger.cc b/src/debugger.cc
index fbcd420..553bfc7 100644
--- a/src/debugger.cc
+++ b/src/debugger.cc
@@ -2216,9 +2216,9 @@
// Copy the result.
*pResultTag = req->result_tag;
if (IsPrimitiveTag(req->result_tag)) {
- *pResultValue = req->result_value.j;
+ *pResultValue = req->result_value.GetJ();
} else {
- *pResultValue = gRegistry->Add(req->result_value.l);
+ *pResultValue = gRegistry->Add(req->result_value.GetL());
}
*pExceptionId = req->exception;
return req->error;
@@ -2257,10 +2257,10 @@
Object* exc = self->GetException();
VLOG(jdwp) << " JDWP invocation returning with exception=" << exc << " " << PrettyTypeOf(exc);
self->ClearException();
- pReq->result_value.j = 0;
+ pReq->result_value.SetJ(0);
} else if (pReq->result_tag == JDWP::JT_OBJECT) {
/* if no exception thrown, examine object result more closely */
- JDWP::JdwpTag new_tag = TagFromObject(pReq->result_value.l);
+ JDWP::JdwpTag new_tag = TagFromObject(pReq->result_value.GetL());
if (new_tag != pReq->result_tag) {
VLOG(jdwp) << " JDWP promoted result from " << pReq->result_tag << " to " << new_tag;
pReq->result_tag = new_tag;
@@ -2275,7 +2275,7 @@
* We can't use the "tracked allocation" mechanism here because
* the object is going to be handed off to a different thread.
*/
- gRegistry->Add(pReq->result_value.l);
+ gRegistry->Add(pReq->result_value.GetL());
}
if (old_exception.get() != NULL) {
diff --git a/src/heap.cc b/src/heap.cc
index 76a620e..e244cf1 100644
--- a/src/heap.cc
+++ b/src/heap.cc
@@ -791,7 +791,7 @@
java_lang_ref_FinalizerReference_->FindDirectMethod("add", "(Ljava/lang/Object;)V");
DCHECK(FinalizerReference_add != NULL);
JValue args[1];
- args[0].l = object;
+ args[0].SetL(object);
FinalizerReference_add->Invoke(self, NULL, args, NULL);
}
@@ -805,7 +805,7 @@
Thread* self = Thread::Current();
ScopedThreadStateChange tsc(self, kRunnable);
JValue args[1];
- args[0].l = *cleared;
+ args[0].SetL(*cleared);
ReferenceQueue_add->Invoke(self, NULL, args, NULL);
*cleared = NULL;
}
diff --git a/src/java_lang_reflect_Field.cc b/src/java_lang_reflect_Field.cc
index 7cc4166..fe9f79c 100644
--- a/src/java_lang_reflect_Field.cc
+++ b/src/java_lang_reflect_Field.cc
@@ -25,41 +25,39 @@
namespace art {
static bool GetFieldValue(Object* o, Field* f, JValue& value, bool allow_references) {
- DCHECK_EQ(value.j, 0LL);
+ DCHECK_EQ(value.GetJ(), 0LL);
ScopedThreadStateChange tsc(Thread::Current(), kRunnable);
if (!Runtime::Current()->GetClassLinker()->EnsureInitialized(f->GetDeclaringClass(), true, true)) {
return false;
}
switch (FieldHelper(f).GetTypeAsPrimitiveType()) {
case Primitive::kPrimBoolean:
- value.z = f->GetBoolean(o);
+ value.SetZ(f->GetBoolean(o));
return true;
case Primitive::kPrimByte:
- // Read byte and ensure it is fully sign-extended to an int.
- value.i = ((int32_t)f->GetByte(o) << 24) >> 24;
+ value.SetB(f->GetByte(o));
return true;
case Primitive::kPrimChar:
- value.c = f->GetChar(o);
+ value.SetC(f->GetChar(o));
return true;
case Primitive::kPrimDouble:
- value.d = f->GetDouble(o);
+ value.SetD(f->GetDouble(o));
return true;
case Primitive::kPrimFloat:
- value.f = f->GetFloat(o);
+ value.SetF(f->GetFloat(o));
return true;
case Primitive::kPrimInt:
- value.i = f->GetInt(o);
+ value.SetI(f->GetInt(o));
return true;
case Primitive::kPrimLong:
- value.j = f->GetLong(o);
+ value.SetJ(f->GetLong(o));
return true;
case Primitive::kPrimShort:
- // Read short and ensure it is fully sign-extended to an int.
- value.i = ((int32_t)f->GetShort(o) << 16) >> 16;
+ value.SetS(f->GetShort(o));
return true;
case Primitive::kPrimNot:
if (allow_references) {
- value.l = f->GetObject(o);
+ value.SetL(f->GetObject(o));
return true;
}
// Else break to report an error.
@@ -101,7 +99,7 @@
}
BoxPrimitive(FieldHelper(f).GetTypeAsPrimitiveType(), value);
- return AddLocalReference<jobject>(env, value.l);
+ return AddLocalReference<jobject>(env, value.GetL());
}
static JValue GetPrimitiveField(JNIEnv* env, jobject javaField, jobject javaObj, char dst_descriptor) {
@@ -128,35 +126,35 @@
}
static jboolean Field_getBoolean(JNIEnv* env, jobject javaField, jobject javaObj) {
- return GetPrimitiveField(env, javaField, javaObj, 'Z').z;
+ return GetPrimitiveField(env, javaField, javaObj, 'Z').GetZ();
}
static jbyte Field_getByte(JNIEnv* env, jobject javaField, jobject javaObj) {
- return GetPrimitiveField(env, javaField, javaObj, 'B').b;
+ return GetPrimitiveField(env, javaField, javaObj, 'B').GetB();
}
static jchar Field_getChar(JNIEnv* env, jobject javaField, jobject javaObj) {
- return GetPrimitiveField(env, javaField, javaObj, 'C').c;
+ return GetPrimitiveField(env, javaField, javaObj, 'C').GetC();
}
static jdouble Field_getDouble(JNIEnv* env, jobject javaField, jobject javaObj) {
- return GetPrimitiveField(env, javaField, javaObj, 'D').d;
+ return GetPrimitiveField(env, javaField, javaObj, 'D').GetD();
}
static jfloat Field_getFloat(JNIEnv* env, jobject javaField, jobject javaObj) {
- return GetPrimitiveField(env, javaField, javaObj, 'F').f;
+ return GetPrimitiveField(env, javaField, javaObj, 'F').GetF();
}
static jint Field_getInt(JNIEnv* env, jobject javaField, jobject javaObj) {
- return GetPrimitiveField(env, javaField, javaObj, 'I').i;
+ return GetPrimitiveField(env, javaField, javaObj, 'I').GetI();
}
static jlong Field_getLong(JNIEnv* env, jobject javaField, jobject javaObj) {
- return GetPrimitiveField(env, javaField, javaObj, 'J').j;
+ return GetPrimitiveField(env, javaField, javaObj, 'J').GetJ();
}
static jshort Field_getShort(JNIEnv* env, jobject javaField, jobject javaObj) {
- return GetPrimitiveField(env, javaField, javaObj, 'S').s;
+ return GetPrimitiveField(env, javaField, javaObj, 'S').GetS();
}
static void SetFieldValue(Object* o, Field* f, const JValue& new_value, bool allow_references) {
@@ -165,32 +163,32 @@
}
switch (FieldHelper(f).GetTypeAsPrimitiveType()) {
case Primitive::kPrimBoolean:
- f->SetBoolean(o, new_value.z);
+ f->SetBoolean(o, new_value.GetZ());
break;
case Primitive::kPrimByte:
- f->SetByte(o, new_value.b);
+ f->SetByte(o, new_value.GetB());
break;
case Primitive::kPrimChar:
- f->SetChar(o, new_value.c);
+ f->SetChar(o, new_value.GetC());
break;
case Primitive::kPrimDouble:
- f->SetDouble(o, new_value.d);
+ f->SetDouble(o, new_value.GetD());
break;
case Primitive::kPrimFloat:
- f->SetFloat(o, new_value.f);
+ f->SetFloat(o, new_value.GetF());
break;
case Primitive::kPrimInt:
- f->SetInt(o, new_value.i);
+ f->SetInt(o, new_value.GetI());
break;
case Primitive::kPrimLong:
- f->SetLong(o, new_value.j);
+ f->SetLong(o, new_value.GetJ());
break;
case Primitive::kPrimShort:
- f->SetShort(o, new_value.s);
+ f->SetShort(o, new_value.GetS());
break;
case Primitive::kPrimNot:
if (allow_references) {
- f->SetObject(o, new_value.l);
+ f->SetObject(o, new_value.GetL());
break;
}
// Else fall through to report an error.
@@ -255,52 +253,52 @@
SetFieldValue(o, f, wide_value, false);
}
-static void Field_setBoolean(JNIEnv* env, jobject javaField, jobject javaObj, jboolean value) {
- JValue v;
- v.z = value;
- SetPrimitiveField(env, javaField, javaObj, 'Z', v);
+static void Field_setBoolean(JNIEnv* env, jobject javaField, jobject javaObj, jboolean z) {
+ JValue value;
+ value.SetZ(z);
+ SetPrimitiveField(env, javaField, javaObj, 'Z', value);
}
-static void Field_setByte(JNIEnv* env, jobject javaField, jobject javaObj, jbyte value) {
- JValue v;
- v.b = value;
- SetPrimitiveField(env, javaField, javaObj, 'B', v);
+static void Field_setByte(JNIEnv* env, jobject javaField, jobject javaObj, jbyte b) {
+ JValue value;
+ value.SetB(b);
+ SetPrimitiveField(env, javaField, javaObj, 'B', value);
}
-static void Field_setChar(JNIEnv* env, jobject javaField, jobject javaObj, jchar value) {
- JValue v;
- v.c = value;
- SetPrimitiveField(env, javaField, javaObj, 'C', v);
+static void Field_setChar(JNIEnv* env, jobject javaField, jobject javaObj, jchar c) {
+ JValue value;
+ value.SetC(c);
+ SetPrimitiveField(env, javaField, javaObj, 'C', value);
}
-static void Field_setDouble(JNIEnv* env, jobject javaField, jobject javaObj, jdouble value) {
- JValue v;
- v.d = value;
- SetPrimitiveField(env, javaField, javaObj, 'D', v);
+static void Field_setDouble(JNIEnv* env, jobject javaField, jobject javaObj, jdouble d) {
+ JValue value;
+ value.SetD(d);
+ SetPrimitiveField(env, javaField, javaObj, 'D', value);
}
-static void Field_setFloat(JNIEnv* env, jobject javaField, jobject javaObj, jfloat value) {
- JValue v;
- v.f = value;
- SetPrimitiveField(env, javaField, javaObj, 'F', v);
+static void Field_setFloat(JNIEnv* env, jobject javaField, jobject javaObj, jfloat f) {
+ JValue value;
+ value.SetF(f);
+ SetPrimitiveField(env, javaField, javaObj, 'F', value);
}
-static void Field_setInt(JNIEnv* env, jobject javaField, jobject javaObj, jint value) {
- JValue v;
- v.i = value;
- SetPrimitiveField(env, javaField, javaObj, 'I', v);
+static void Field_setInt(JNIEnv* env, jobject javaField, jobject javaObj, jint i) {
+ JValue value;
+ value.SetI(i);
+ SetPrimitiveField(env, javaField, javaObj, 'I', value);
}
-static void Field_setLong(JNIEnv* env, jobject javaField, jobject javaObj, jlong value) {
- JValue v;
- v.j = value;
- SetPrimitiveField(env, javaField, javaObj, 'J', v);
+static void Field_setLong(JNIEnv* env, jobject javaField, jobject javaObj, jlong j) {
+ JValue value;
+ value.SetJ(j);
+ SetPrimitiveField(env, javaField, javaObj, 'J', value);
}
-static void Field_setShort(JNIEnv* env, jobject javaField, jobject javaObj, jshort value) {
- JValue v;
- v.s = value;
- SetPrimitiveField(env, javaField, javaObj, 'S', v);
+static void Field_setShort(JNIEnv* env, jobject javaField, jobject javaObj, jshort s) {
+ JValue value;
+ value.SetS(s);
+ SetPrimitiveField(env, javaField, javaObj, 'S', value);
}
static JNINativeMethod gMethods[] = {
diff --git a/src/jni_internal.cc b/src/jni_internal.cc
index 86135ab..80576a9 100644
--- a/src/jni_internal.cc
+++ b/src/jni_internal.cc
@@ -187,23 +187,31 @@
for (size_t i = 1, offset = 0; i < shorty_len_; ++i, ++offset) {
switch (shorty_[i]) {
case 'Z':
+ arg_array_[offset].SetZ(va_arg(ap, jint));
+ break;
case 'B':
+ arg_array_[offset].SetB(va_arg(ap, jint));
+ break;
case 'C':
+ arg_array_[offset].SetC(va_arg(ap, jint));
+ break;
case 'S':
+ arg_array_[offset].SetS(va_arg(ap, jint));
+ break;
case 'I':
- arg_array_[offset].i = va_arg(ap, jint);
+ arg_array_[offset].SetI(va_arg(ap, jint));
break;
case 'F':
- arg_array_[offset].f = va_arg(ap, jdouble);
+ arg_array_[offset].SetF(va_arg(ap, jdouble));
break;
case 'L':
- arg_array_[offset].l = DecodeObj(env, va_arg(ap, jobject));
+ arg_array_[offset].SetL(DecodeObj(env, va_arg(ap, jobject)));
break;
case 'D':
- arg_array_[offset].d = va_arg(ap, jdouble);
+ arg_array_[offset].SetD(va_arg(ap, jdouble));
break;
case 'J':
- arg_array_[offset].j = va_arg(ap, jlong);
+ arg_array_[offset].SetJ(va_arg(ap, jlong));
break;
}
}
@@ -214,23 +222,31 @@
for (size_t i = 1, offset = 0; i < shorty_len_; ++i, ++offset) {
switch (shorty_[i]) {
case 'Z':
+ arg_array_[offset].SetZ(args[offset].z);
+ break;
case 'B':
+ arg_array_[offset].SetB(args[offset].b);
+ break;
case 'C':
+ arg_array_[offset].SetC(args[offset].c);
+ break;
case 'S':
+ arg_array_[offset].SetS(args[offset].s);
+ break;
case 'I':
- arg_array_[offset].i = args[offset].i;
+ arg_array_[offset].SetI(args[offset].i);
break;
case 'F':
- arg_array_[offset].f = args[offset].f;
+ arg_array_[offset].SetF(args[offset].f);
break;
case 'L':
- arg_array_[offset].l = DecodeObj(env, args[offset].l);
+ arg_array_[offset].SetL(DecodeObj(env, args[offset].l));
break;
case 'D':
- arg_array_[offset].d = args[offset].d;
+ arg_array_[offset].SetD(args[offset].d);
break;
case 'J':
- arg_array_[offset].j = args[offset].j;
+ arg_array_[offset].SetJ(args[offset].j);
break;
}
}
@@ -272,7 +288,7 @@
for (int i = 0; i < parameter_types->GetLength(); ++i) {
Class* parameter_type = parameter_types->Get(i);
if (!parameter_type->IsPrimitive()) {
- Object* argument = args[i].l;
+ Object* argument = args[i].GetL();
if (argument != NULL && !argument->InstanceOf(parameter_type)) {
LOG(ERROR) << "JNI ERROR (app bug): attempt to pass an instance of "
<< PrettyTypeOf(argument) << " as argument " << (i + 1) << " to " << PrettyMethod(m);
@@ -1065,19 +1081,19 @@
va_start(ap, mid);
JValue result(InvokeVirtualOrInterfaceWithVarArgs(env, obj, mid, ap));
va_end(ap);
- return AddLocalReference<jobject>(env, result.l);
+ return AddLocalReference<jobject>(env, result.GetL());
}
static jobject CallObjectMethodV(JNIEnv* env, jobject obj, jmethodID mid, va_list args) {
ScopedJniThreadState ts(env);
JValue result(InvokeVirtualOrInterfaceWithVarArgs(env, obj, mid, args));
- return AddLocalReference<jobject>(env, result.l);
+ return AddLocalReference<jobject>(env, result.GetL());
}
static jobject CallObjectMethodA(JNIEnv* env, jobject obj, jmethodID mid, jvalue* args) {
ScopedJniThreadState ts(env);
JValue result(InvokeVirtualOrInterfaceWithJValues(env, obj, mid, args));
- return AddLocalReference<jobject>(env, result.l);
+ return AddLocalReference<jobject>(env, result.GetL());
}
static jboolean CallBooleanMethod(JNIEnv* env, jobject obj, jmethodID mid, ...) {
@@ -1086,17 +1102,17 @@
va_start(ap, mid);
JValue result(InvokeVirtualOrInterfaceWithVarArgs(env, obj, mid, ap));
va_end(ap);
- return result.z;
+ return result.GetZ();
}
static jboolean CallBooleanMethodV(JNIEnv* env, jobject obj, jmethodID mid, va_list args) {
ScopedJniThreadState ts(env);
- return InvokeVirtualOrInterfaceWithVarArgs(env, obj, mid, args).z;
+ return InvokeVirtualOrInterfaceWithVarArgs(env, obj, mid, args).GetZ();
}
static jboolean CallBooleanMethodA(JNIEnv* env, jobject obj, jmethodID mid, jvalue* args) {
ScopedJniThreadState ts(env);
- return InvokeVirtualOrInterfaceWithJValues(env, obj, mid, args).z;
+ return InvokeVirtualOrInterfaceWithJValues(env, obj, mid, args).GetZ();
}
static jbyte CallByteMethod(JNIEnv* env, jobject obj, jmethodID mid, ...) {
@@ -1105,17 +1121,17 @@
va_start(ap, mid);
JValue result(InvokeVirtualOrInterfaceWithVarArgs(env, obj, mid, ap));
va_end(ap);
- return result.b;
+ return result.GetB();
}
static jbyte CallByteMethodV(JNIEnv* env, jobject obj, jmethodID mid, va_list args) {
ScopedJniThreadState ts(env);
- return InvokeVirtualOrInterfaceWithVarArgs(env, obj, mid, args).b;
+ return InvokeVirtualOrInterfaceWithVarArgs(env, obj, mid, args).GetB();
}
static jbyte CallByteMethodA(JNIEnv* env, jobject obj, jmethodID mid, jvalue* args) {
ScopedJniThreadState ts(env);
- return InvokeVirtualOrInterfaceWithJValues(env, obj, mid, args).b;
+ return InvokeVirtualOrInterfaceWithJValues(env, obj, mid, args).GetB();
}
static jchar CallCharMethod(JNIEnv* env, jobject obj, jmethodID mid, ...) {
@@ -1124,17 +1140,17 @@
va_start(ap, mid);
JValue result(InvokeVirtualOrInterfaceWithVarArgs(env, obj, mid, ap));
va_end(ap);
- return result.c;
+ return result.GetC();
}
static jchar CallCharMethodV(JNIEnv* env, jobject obj, jmethodID mid, va_list args) {
ScopedJniThreadState ts(env);
- return InvokeVirtualOrInterfaceWithVarArgs(env, obj, mid, args).c;
+ return InvokeVirtualOrInterfaceWithVarArgs(env, obj, mid, args).GetC();
}
static jchar CallCharMethodA(JNIEnv* env, jobject obj, jmethodID mid, jvalue* args) {
ScopedJniThreadState ts(env);
- return InvokeVirtualOrInterfaceWithJValues(env, obj, mid, args).c;
+ return InvokeVirtualOrInterfaceWithJValues(env, obj, mid, args).GetC();
}
static jdouble CallDoubleMethod(JNIEnv* env, jobject obj, jmethodID mid, ...) {
@@ -1143,17 +1159,17 @@
va_start(ap, mid);
JValue result(InvokeVirtualOrInterfaceWithVarArgs(env, obj, mid, ap));
va_end(ap);
- return result.d;
+ return result.GetD();
}
static jdouble CallDoubleMethodV(JNIEnv* env, jobject obj, jmethodID mid, va_list args) {
ScopedJniThreadState ts(env);
- return InvokeVirtualOrInterfaceWithVarArgs(env, obj, mid, args).d;
+ return InvokeVirtualOrInterfaceWithVarArgs(env, obj, mid, args).GetD();
}
static jdouble CallDoubleMethodA(JNIEnv* env, jobject obj, jmethodID mid, jvalue* args) {
ScopedJniThreadState ts(env);
- return InvokeVirtualOrInterfaceWithJValues(env, obj, mid, args).d;
+ return InvokeVirtualOrInterfaceWithJValues(env, obj, mid, args).GetD();
}
static jfloat CallFloatMethod(JNIEnv* env, jobject obj, jmethodID mid, ...) {
@@ -1162,17 +1178,17 @@
va_start(ap, mid);
JValue result(InvokeVirtualOrInterfaceWithVarArgs(env, obj, mid, ap));
va_end(ap);
- return result.f;
+ return result.GetF();
}
static jfloat CallFloatMethodV(JNIEnv* env, jobject obj, jmethodID mid, va_list args) {
ScopedJniThreadState ts(env);
- return InvokeVirtualOrInterfaceWithVarArgs(env, obj, mid, args).f;
+ return InvokeVirtualOrInterfaceWithVarArgs(env, obj, mid, args).GetF();
}
static jfloat CallFloatMethodA(JNIEnv* env, jobject obj, jmethodID mid, jvalue* args) {
ScopedJniThreadState ts(env);
- return InvokeVirtualOrInterfaceWithJValues(env, obj, mid, args).f;
+ return InvokeVirtualOrInterfaceWithJValues(env, obj, mid, args).GetF();
}
static jint CallIntMethod(JNIEnv* env, jobject obj, jmethodID mid, ...) {
@@ -1181,17 +1197,17 @@
va_start(ap, mid);
JValue result(InvokeVirtualOrInterfaceWithVarArgs(env, obj, mid, ap));
va_end(ap);
- return result.i;
+ return result.GetI();
}
static jint CallIntMethodV(JNIEnv* env, jobject obj, jmethodID mid, va_list args) {
ScopedJniThreadState ts(env);
- return InvokeVirtualOrInterfaceWithVarArgs(env, obj, mid, args).i;
+ return InvokeVirtualOrInterfaceWithVarArgs(env, obj, mid, args).GetI();
}
static jint CallIntMethodA(JNIEnv* env, jobject obj, jmethodID mid, jvalue* args) {
ScopedJniThreadState ts(env);
- return InvokeVirtualOrInterfaceWithJValues(env, obj, mid, args).i;
+ return InvokeVirtualOrInterfaceWithJValues(env, obj, mid, args).GetI();
}
static jlong CallLongMethod(JNIEnv* env, jobject obj, jmethodID mid, ...) {
@@ -1200,17 +1216,17 @@
va_start(ap, mid);
JValue result(InvokeVirtualOrInterfaceWithVarArgs(env, obj, mid, ap));
va_end(ap);
- return result.j;
+ return result.GetJ();
}
static jlong CallLongMethodV(JNIEnv* env, jobject obj, jmethodID mid, va_list args) {
ScopedJniThreadState ts(env);
- return InvokeVirtualOrInterfaceWithVarArgs(env, obj, mid, args).j;
+ return InvokeVirtualOrInterfaceWithVarArgs(env, obj, mid, args).GetJ();
}
static jlong CallLongMethodA(JNIEnv* env, jobject obj, jmethodID mid, jvalue* args) {
ScopedJniThreadState ts(env);
- return InvokeVirtualOrInterfaceWithJValues(env, obj, mid, args).j;
+ return InvokeVirtualOrInterfaceWithJValues(env, obj, mid, args).GetJ();
}
static jshort CallShortMethod(JNIEnv* env, jobject obj, jmethodID mid, ...) {
@@ -1219,17 +1235,17 @@
va_start(ap, mid);
JValue result(InvokeVirtualOrInterfaceWithVarArgs(env, obj, mid, ap));
va_end(ap);
- return result.s;
+ return result.GetS();
}
static jshort CallShortMethodV(JNIEnv* env, jobject obj, jmethodID mid, va_list args) {
ScopedJniThreadState ts(env);
- return InvokeVirtualOrInterfaceWithVarArgs(env, obj, mid, args).s;
+ return InvokeVirtualOrInterfaceWithVarArgs(env, obj, mid, args).GetS();
}
static jshort CallShortMethodA(JNIEnv* env, jobject obj, jmethodID mid, jvalue* args) {
ScopedJniThreadState ts(env);
- return InvokeVirtualOrInterfaceWithJValues(env, obj, mid, args).s;
+ return InvokeVirtualOrInterfaceWithJValues(env, obj, mid, args).GetS();
}
static void CallVoidMethod(JNIEnv* env, jobject obj, jmethodID mid, ...) {
@@ -1255,7 +1271,7 @@
va_list ap;
va_start(ap, mid);
JValue result(InvokeWithVarArgs(env, obj, mid, ap));
- jobject local_result = AddLocalReference<jobject>(env, result.l);
+ jobject local_result = AddLocalReference<jobject>(env, result.GetL());
va_end(ap);
return local_result;
}
@@ -1264,14 +1280,14 @@
jobject obj, jclass, jmethodID mid, va_list args) {
ScopedJniThreadState ts(env);
JValue result(InvokeWithVarArgs(env, obj, mid, args));
- return AddLocalReference<jobject>(env, result.l);
+ return AddLocalReference<jobject>(env, result.GetL());
}
static jobject CallNonvirtualObjectMethodA(JNIEnv* env,
jobject obj, jclass, jmethodID mid, jvalue* args) {
ScopedJniThreadState ts(env);
JValue result(InvokeWithJValues(env, obj, mid, args));
- return AddLocalReference<jobject>(env, result.l);
+ return AddLocalReference<jobject>(env, result.GetL());
}
static jboolean CallNonvirtualBooleanMethod(JNIEnv* env,
@@ -1281,19 +1297,19 @@
va_start(ap, mid);
JValue result(InvokeWithVarArgs(env, obj, mid, ap));
va_end(ap);
- return result.z;
+ return result.GetZ();
}
static jboolean CallNonvirtualBooleanMethodV(JNIEnv* env,
jobject obj, jclass, jmethodID mid, va_list args) {
ScopedJniThreadState ts(env);
- return InvokeWithVarArgs(env, obj, mid, args).z;
+ return InvokeWithVarArgs(env, obj, mid, args).GetZ();
}
static jboolean CallNonvirtualBooleanMethodA(JNIEnv* env,
jobject obj, jclass, jmethodID mid, jvalue* args) {
ScopedJniThreadState ts(env);
- return InvokeWithJValues(env, obj, mid, args).z;
+ return InvokeWithJValues(env, obj, mid, args).GetZ();
}
static jbyte CallNonvirtualByteMethod(JNIEnv* env, jobject obj, jclass, jmethodID mid, ...) {
@@ -1302,19 +1318,19 @@
va_start(ap, mid);
JValue result(InvokeWithVarArgs(env, obj, mid, ap));
va_end(ap);
- return result.b;
+ return result.GetB();
}
static jbyte CallNonvirtualByteMethodV(JNIEnv* env,
jobject obj, jclass, jmethodID mid, va_list args) {
ScopedJniThreadState ts(env);
- return InvokeWithVarArgs(env, obj, mid, args).b;
+ return InvokeWithVarArgs(env, obj, mid, args).GetB();
}
static jbyte CallNonvirtualByteMethodA(JNIEnv* env,
jobject obj, jclass, jmethodID mid, jvalue* args) {
ScopedJniThreadState ts(env);
- return InvokeWithJValues(env, obj, mid, args).b;
+ return InvokeWithJValues(env, obj, mid, args).GetB();
}
static jchar CallNonvirtualCharMethod(JNIEnv* env, jobject obj, jclass, jmethodID mid, ...) {
@@ -1323,19 +1339,19 @@
va_start(ap, mid);
JValue result(InvokeWithVarArgs(env, obj, mid, ap));
va_end(ap);
- return result.c;
+ return result.GetC();
}
static jchar CallNonvirtualCharMethodV(JNIEnv* env,
jobject obj, jclass, jmethodID mid, va_list args) {
ScopedJniThreadState ts(env);
- return InvokeWithVarArgs(env, obj, mid, args).c;
+ return InvokeWithVarArgs(env, obj, mid, args).GetC();
}
static jchar CallNonvirtualCharMethodA(JNIEnv* env,
jobject obj, jclass, jmethodID mid, jvalue* args) {
ScopedJniThreadState ts(env);
- return InvokeWithJValues(env, obj, mid, args).c;
+ return InvokeWithJValues(env, obj, mid, args).GetC();
}
static jshort CallNonvirtualShortMethod(JNIEnv* env, jobject obj, jclass, jmethodID mid, ...) {
@@ -1344,19 +1360,19 @@
va_start(ap, mid);
JValue result(InvokeWithVarArgs(env, obj, mid, ap));
va_end(ap);
- return result.s;
+ return result.GetS();
}
static jshort CallNonvirtualShortMethodV(JNIEnv* env,
jobject obj, jclass, jmethodID mid, va_list args) {
ScopedJniThreadState ts(env);
- return InvokeWithVarArgs(env, obj, mid, args).s;
+ return InvokeWithVarArgs(env, obj, mid, args).GetS();
}
static jshort CallNonvirtualShortMethodA(JNIEnv* env,
jobject obj, jclass, jmethodID mid, jvalue* args) {
ScopedJniThreadState ts(env);
- return InvokeWithJValues(env, obj, mid, args).s;
+ return InvokeWithJValues(env, obj, mid, args).GetS();
}
static jint CallNonvirtualIntMethod(JNIEnv* env, jobject obj, jclass, jmethodID mid, ...) {
@@ -1365,19 +1381,19 @@
va_start(ap, mid);
JValue result(InvokeWithVarArgs(env, obj, mid, ap));
va_end(ap);
- return result.i;
+ return result.GetI();
}
static jint CallNonvirtualIntMethodV(JNIEnv* env,
jobject obj, jclass, jmethodID mid, va_list args) {
ScopedJniThreadState ts(env);
- return InvokeWithVarArgs(env, obj, mid, args).i;
+ return InvokeWithVarArgs(env, obj, mid, args).GetI();
}
static jint CallNonvirtualIntMethodA(JNIEnv* env,
jobject obj, jclass, jmethodID mid, jvalue* args) {
ScopedJniThreadState ts(env);
- return InvokeWithJValues(env, obj, mid, args).i;
+ return InvokeWithJValues(env, obj, mid, args).GetI();
}
static jlong CallNonvirtualLongMethod(JNIEnv* env, jobject obj, jclass, jmethodID mid, ...) {
@@ -1386,19 +1402,19 @@
va_start(ap, mid);
JValue result(InvokeWithVarArgs(env, obj, mid, ap));
va_end(ap);
- return result.j;
+ return result.GetJ();
}
static jlong CallNonvirtualLongMethodV(JNIEnv* env,
jobject obj, jclass, jmethodID mid, va_list args) {
ScopedJniThreadState ts(env);
- return InvokeWithVarArgs(env, obj, mid, args).j;
+ return InvokeWithVarArgs(env, obj, mid, args).GetJ();
}
static jlong CallNonvirtualLongMethodA(JNIEnv* env,
jobject obj, jclass, jmethodID mid, jvalue* args) {
ScopedJniThreadState ts(env);
- return InvokeWithJValues(env, obj, mid, args).j;
+ return InvokeWithJValues(env, obj, mid, args).GetJ();
}
static jfloat CallNonvirtualFloatMethod(JNIEnv* env, jobject obj, jclass, jmethodID mid, ...) {
@@ -1407,19 +1423,19 @@
va_start(ap, mid);
JValue result(InvokeWithVarArgs(env, obj, mid, ap));
va_end(ap);
- return result.f;
+ return result.GetF();
}
static jfloat CallNonvirtualFloatMethodV(JNIEnv* env,
jobject obj, jclass, jmethodID mid, va_list args) {
ScopedJniThreadState ts(env);
- return InvokeWithVarArgs(env, obj, mid, args).f;
+ return InvokeWithVarArgs(env, obj, mid, args).GetF();
}
static jfloat CallNonvirtualFloatMethodA(JNIEnv* env,
jobject obj, jclass, jmethodID mid, jvalue* args) {
ScopedJniThreadState ts(env);
- return InvokeWithJValues(env, obj, mid, args).f;
+ return InvokeWithJValues(env, obj, mid, args).GetF();
}
static jdouble CallNonvirtualDoubleMethod(JNIEnv* env, jobject obj, jclass, jmethodID mid, ...) {
@@ -1428,19 +1444,19 @@
va_start(ap, mid);
JValue result(InvokeWithVarArgs(env, obj, mid, ap));
va_end(ap);
- return result.d;
+ return result.GetD();
}
static jdouble CallNonvirtualDoubleMethodV(JNIEnv* env,
jobject obj, jclass, jmethodID mid, va_list args) {
ScopedJniThreadState ts(env);
- return InvokeWithVarArgs(env, obj, mid, args).d;
+ return InvokeWithVarArgs(env, obj, mid, args).GetD();
}
static jdouble CallNonvirtualDoubleMethodA(JNIEnv* env,
jobject obj, jclass, jmethodID mid, jvalue* args) {
ScopedJniThreadState ts(env);
- return InvokeWithJValues(env, obj, mid, args).d;
+ return InvokeWithJValues(env, obj, mid, args).GetD();
}
static void CallNonvirtualVoidMethod(JNIEnv* env, jobject obj, jclass, jmethodID mid, ...) {
@@ -1647,7 +1663,7 @@
va_list ap;
va_start(ap, mid);
JValue result(InvokeWithVarArgs(env, NULL, mid, ap));
- jobject local_result = AddLocalReference<jobject>(env, result.l);
+ jobject local_result = AddLocalReference<jobject>(env, result.GetL());
va_end(ap);
return local_result;
}
@@ -1655,13 +1671,13 @@
static jobject CallStaticObjectMethodV(JNIEnv* env, jclass, jmethodID mid, va_list args) {
ScopedJniThreadState ts(env);
JValue result(InvokeWithVarArgs(env, NULL, mid, args));
- return AddLocalReference<jobject>(env, result.l);
+ return AddLocalReference<jobject>(env, result.GetL());
}
static jobject CallStaticObjectMethodA(JNIEnv* env, jclass, jmethodID mid, jvalue* args) {
ScopedJniThreadState ts(env);
JValue result(InvokeWithJValues(env, NULL, mid, args));
- return AddLocalReference<jobject>(env, result.l);
+ return AddLocalReference<jobject>(env, result.GetL());
}
static jboolean CallStaticBooleanMethod(JNIEnv* env, jclass, jmethodID mid, ...) {
@@ -1670,17 +1686,17 @@
va_start(ap, mid);
JValue result(InvokeWithVarArgs(env, NULL, mid, ap));
va_end(ap);
- return result.z;
+ return result.GetZ();
}
static jboolean CallStaticBooleanMethodV(JNIEnv* env, jclass, jmethodID mid, va_list args) {
ScopedJniThreadState ts(env);
- return InvokeWithVarArgs(env, NULL, mid, args).z;
+ return InvokeWithVarArgs(env, NULL, mid, args).GetZ();
}
static jboolean CallStaticBooleanMethodA(JNIEnv* env, jclass, jmethodID mid, jvalue* args) {
ScopedJniThreadState ts(env);
- return InvokeWithJValues(env, NULL, mid, args).z;
+ return InvokeWithJValues(env, NULL, mid, args).GetZ();
}
static jbyte CallStaticByteMethod(JNIEnv* env, jclass, jmethodID mid, ...) {
@@ -1689,17 +1705,17 @@
va_start(ap, mid);
JValue result(InvokeWithVarArgs(env, NULL, mid, ap));
va_end(ap);
- return result.b;
+ return result.GetB();
}
static jbyte CallStaticByteMethodV(JNIEnv* env, jclass, jmethodID mid, va_list args) {
ScopedJniThreadState ts(env);
- return InvokeWithVarArgs(env, NULL, mid, args).b;
+ return InvokeWithVarArgs(env, NULL, mid, args).GetB();
}
static jbyte CallStaticByteMethodA(JNIEnv* env, jclass, jmethodID mid, jvalue* args) {
ScopedJniThreadState ts(env);
- return InvokeWithJValues(env, NULL, mid, args).b;
+ return InvokeWithJValues(env, NULL, mid, args).GetB();
}
static jchar CallStaticCharMethod(JNIEnv* env, jclass, jmethodID mid, ...) {
@@ -1708,17 +1724,17 @@
va_start(ap, mid);
JValue result(InvokeWithVarArgs(env, NULL, mid, ap));
va_end(ap);
- return result.c;
+ return result.GetC();
}
static jchar CallStaticCharMethodV(JNIEnv* env, jclass, jmethodID mid, va_list args) {
ScopedJniThreadState ts(env);
- return InvokeWithVarArgs(env, NULL, mid, args).c;
+ return InvokeWithVarArgs(env, NULL, mid, args).GetC();
}
static jchar CallStaticCharMethodA(JNIEnv* env, jclass, jmethodID mid, jvalue* args) {
ScopedJniThreadState ts(env);
- return InvokeWithJValues(env, NULL, mid, args).c;
+ return InvokeWithJValues(env, NULL, mid, args).GetC();
}
static jshort CallStaticShortMethod(JNIEnv* env, jclass, jmethodID mid, ...) {
@@ -1727,17 +1743,17 @@
va_start(ap, mid);
JValue result(InvokeWithVarArgs(env, NULL, mid, ap));
va_end(ap);
- return result.s;
+ return result.GetS();
}
static jshort CallStaticShortMethodV(JNIEnv* env, jclass, jmethodID mid, va_list args) {
ScopedJniThreadState ts(env);
- return InvokeWithVarArgs(env, NULL, mid, args).s;
+ return InvokeWithVarArgs(env, NULL, mid, args).GetS();
}
static jshort CallStaticShortMethodA(JNIEnv* env, jclass, jmethodID mid, jvalue* args) {
ScopedJniThreadState ts(env);
- return InvokeWithJValues(env, NULL, mid, args).s;
+ return InvokeWithJValues(env, NULL, mid, args).GetS();
}
static jint CallStaticIntMethod(JNIEnv* env, jclass, jmethodID mid, ...) {
@@ -1746,17 +1762,17 @@
va_start(ap, mid);
JValue result(InvokeWithVarArgs(env, NULL, mid, ap));
va_end(ap);
- return result.i;
+ return result.GetI();
}
static jint CallStaticIntMethodV(JNIEnv* env, jclass, jmethodID mid, va_list args) {
ScopedJniThreadState ts(env);
- return InvokeWithVarArgs(env, NULL, mid, args).i;
+ return InvokeWithVarArgs(env, NULL, mid, args).GetI();
}
static jint CallStaticIntMethodA(JNIEnv* env, jclass, jmethodID mid, jvalue* args) {
ScopedJniThreadState ts(env);
- return InvokeWithJValues(env, NULL, mid, args).i;
+ return InvokeWithJValues(env, NULL, mid, args).GetI();
}
static jlong CallStaticLongMethod(JNIEnv* env, jclass, jmethodID mid, ...) {
@@ -1765,17 +1781,17 @@
va_start(ap, mid);
JValue result(InvokeWithVarArgs(env, NULL, mid, ap));
va_end(ap);
- return result.j;
+ return result.GetJ();
}
static jlong CallStaticLongMethodV(JNIEnv* env, jclass, jmethodID mid, va_list args) {
ScopedJniThreadState ts(env);
- return InvokeWithVarArgs(env, NULL, mid, args).j;
+ return InvokeWithVarArgs(env, NULL, mid, args).GetJ();
}
static jlong CallStaticLongMethodA(JNIEnv* env, jclass, jmethodID mid, jvalue* args) {
ScopedJniThreadState ts(env);
- return InvokeWithJValues(env, NULL, mid, args).j;
+ return InvokeWithJValues(env, NULL, mid, args).GetJ();
}
static jfloat CallStaticFloatMethod(JNIEnv* env, jclass, jmethodID mid, ...) {
@@ -1784,17 +1800,17 @@
va_start(ap, mid);
JValue result(InvokeWithVarArgs(env, NULL, mid, ap));
va_end(ap);
- return result.f;
+ return result.GetF();
}
static jfloat CallStaticFloatMethodV(JNIEnv* env, jclass, jmethodID mid, va_list args) {
ScopedJniThreadState ts(env);
- return InvokeWithVarArgs(env, NULL, mid, args).f;
+ return InvokeWithVarArgs(env, NULL, mid, args).GetF();
}
static jfloat CallStaticFloatMethodA(JNIEnv* env, jclass, jmethodID mid, jvalue* args) {
ScopedJniThreadState ts(env);
- return InvokeWithJValues(env, NULL, mid, args).f;
+ return InvokeWithJValues(env, NULL, mid, args).GetF();
}
static jdouble CallStaticDoubleMethod(JNIEnv* env, jclass, jmethodID mid, ...) {
@@ -1803,17 +1819,17 @@
va_start(ap, mid);
JValue result(InvokeWithVarArgs(env, NULL, mid, ap));
va_end(ap);
- return result.d;
+ return result.GetD();
}
static jdouble CallStaticDoubleMethodV(JNIEnv* env, jclass, jmethodID mid, va_list args) {
ScopedJniThreadState ts(env);
- return InvokeWithVarArgs(env, NULL, mid, args).d;
+ return InvokeWithVarArgs(env, NULL, mid, args).GetD();
}
static jdouble CallStaticDoubleMethodA(JNIEnv* env, jclass, jmethodID mid, jvalue* args) {
ScopedJniThreadState ts(env);
- return InvokeWithJValues(env, NULL, mid, args).d;
+ return InvokeWithJValues(env, NULL, mid, args).GetD();
}
static void CallStaticVoidMethod(JNIEnv* env, jclass, jmethodID mid, ...) {
diff --git a/src/jni_internal_test.cc b/src/jni_internal_test.cc
index 8f7884d..b9bb257 100644
--- a/src/jni_internal_test.cc
+++ b/src/jni_internal_test.cc
@@ -97,25 +97,25 @@
JValue args[1];
JValue result;
- args[0].i = 0;
- result.b = -1;
+ args[0].SetB(0);
+ result.SetB(-1);
(*stub)(method, receiver, Thread::Current(), args, &result);
- EXPECT_EQ(0, result.b);
+ EXPECT_EQ(0, result.GetB());
- args[0].i = -1;
- result.b = 0;
+ args[0].SetB(-1);
+ result.SetB(0);
(*stub)(method, receiver, Thread::Current(), args, &result);
- EXPECT_EQ(-1, result.b);
+ EXPECT_EQ(-1, result.GetB());
- args[0].i = SCHAR_MAX;
- result.b = 0;
+ args[0].SetB(SCHAR_MAX);
+ result.SetB(0);
(*stub)(method, receiver, Thread::Current(), args, &result);
- EXPECT_EQ(SCHAR_MAX, result.b);
+ EXPECT_EQ(SCHAR_MAX, result.GetB());
- args[0].i = SCHAR_MIN;
- result.b = 0;
+ args[0].SetB(SCHAR_MIN);
+ result.SetB(0);
(*stub)(method, receiver, Thread::Current(), args, &result);
- EXPECT_EQ(SCHAR_MIN, result.b);
+ EXPECT_EQ(SCHAR_MIN, result.GetB());
}
void InvokeIdentityIntMethod(bool is_static) {
@@ -126,25 +126,25 @@
JValue args[1];
JValue result;
- args[0].i = 0;
- result.i = -1;
+ args[0].SetI(0);
+ result.SetI(-1);
(*stub)(method, receiver, Thread::Current(), args, &result);
- EXPECT_EQ(0, result.i);
+ EXPECT_EQ(0, result.GetI());
- args[0].i = -1;
- result.i = 0;
+ args[0].SetI(-1);
+ result.SetI(0);
(*stub)(method, receiver, Thread::Current(), args, &result);
- EXPECT_EQ(-1, result.i);
+ EXPECT_EQ(-1, result.GetI());
- args[0].i = INT_MAX;
- result.i = 0;
+ args[0].SetI(INT_MAX);
+ result.SetI(0);
(*stub)(method, receiver, Thread::Current(), args, &result);
- EXPECT_EQ(INT_MAX, result.i);
+ EXPECT_EQ(INT_MAX, result.GetI());
- args[0].i = INT_MIN;
- result.i = 0;
+ args[0].SetI(INT_MIN);
+ result.SetI(0);
(*stub)(method, receiver, Thread::Current(), args, &result);
- EXPECT_EQ(INT_MIN, result.i);
+ EXPECT_EQ(INT_MIN, result.GetI());
}
void InvokeIdentityDoubleMethod(bool is_static) {
@@ -155,25 +155,25 @@
JValue args[1];
JValue result;
- args[0].d = 0.0;
- result.d = -1.0;
+ args[0].SetD(0.0);
+ result.SetD(-1.0);
(*stub)(method, receiver, Thread::Current(), args, &result);
- EXPECT_EQ(0.0, result.d);
+ EXPECT_EQ(0.0, result.GetD());
- args[0].d = -1.0;
- result.d = 0.0;
+ args[0].SetD(-1.0);
+ result.SetD(0.0);
(*stub)(method, receiver, Thread::Current(), args, &result);
- EXPECT_EQ(-1.0, result.d);
+ EXPECT_EQ(-1.0, result.GetD());
- args[0].d = DBL_MAX;
- result.d = 0.0;
+ args[0].SetD(DBL_MAX);
+ result.SetD(0.0);
(*stub)(method, receiver, Thread::Current(), args, &result);
- EXPECT_EQ(DBL_MAX, result.d);
+ EXPECT_EQ(DBL_MAX, result.GetD());
- args[0].d = DBL_MIN;
- result.d = 0.0;
+ args[0].SetD(DBL_MIN);
+ result.SetD(0.0);
(*stub)(method, receiver, Thread::Current(), args, &result);
- EXPECT_EQ(DBL_MIN, result.d);
+ EXPECT_EQ(DBL_MIN, result.GetD());
}
void InvokeSumIntIntMethod(bool is_static) {
@@ -182,36 +182,36 @@
Method::InvokeStub* stub = DoCompile(method, receiver, is_static, "sum", "(II)I");
JValue result;
- result.i = -1;
+ result.SetI(-1);
JValue args[2];
- args[0].i = 0;
- args[1].i = 0;
+ args[0].SetI(0);
+ args[1].SetI(0);
(*stub)(method, NULL, Thread::Current(), args, &result);
- EXPECT_EQ(0, result.i);
+ EXPECT_EQ(0, result.GetI());
- result.i = 0;
- args[0].i = 1;
- args[1].i = 2;
+ result.SetI(0);
+ args[0].SetI(1);
+ args[1].SetI(2);
(*stub)(method, NULL, Thread::Current(), args, &result);
- EXPECT_EQ(3, result.i);
+ EXPECT_EQ(3, result.GetI());
- result.i = 0;
- args[0].i = -2;
- args[1].i = 5;
+ result.SetI(0);
+ args[0].SetI(-2);
+ args[1].SetI(5);
(*stub)(method, NULL, Thread::Current(), args, &result);
- EXPECT_EQ(3, result.i);
+ EXPECT_EQ(3, result.GetI());
- result.i = 1234;
- args[0].i = INT_MAX;
- args[1].i = INT_MIN;
+ result.SetI(1234);
+ args[0].SetI(INT_MAX);
+ args[1].SetI(INT_MIN);
(*stub)(method, NULL, Thread::Current(), args, &result);
- EXPECT_EQ(-1, result.i);
+ EXPECT_EQ(-1, result.GetI());
- result.i = INT_MIN;
- args[0].i = INT_MAX;
- args[1].i = INT_MAX;
+ result.SetI(INT_MIN);
+ args[0].SetI(INT_MAX);
+ args[1].SetI(INT_MAX);
(*stub)(method, NULL, Thread::Current(), args, &result);
- EXPECT_EQ(-2, result.i);
+ EXPECT_EQ(-2, result.GetI());
}
void InvokeSumIntIntIntMethod(bool is_static) {
@@ -220,41 +220,41 @@
Method::InvokeStub* stub = DoCompile(method, receiver, is_static, "sum", "(III)I");
JValue result;
- result.i = -1;
+ result.SetI(-1);
JValue args[3];
- args[0].i = 0;
- args[1].i = 0;
- args[2].i = 0;
+ args[0].SetI(0);
+ args[1].SetI(0);
+ args[2].SetI(0);
(*stub)(method, NULL, Thread::Current(), args, &result);
- EXPECT_EQ(0, result.i);
+ EXPECT_EQ(0, result.GetI());
- result.i = 0;
- args[0].i = 1;
- args[1].i = 2;
- args[2].i = 3;
+ result.SetI(0);
+ args[0].SetI(1);
+ args[1].SetI(2);
+ args[2].SetI(3);
(*stub)(method, NULL, Thread::Current(), args, &result);
- EXPECT_EQ(6, result.i);
+ EXPECT_EQ(6, result.GetI());
- result.i = 0;
- args[0].i = -1;
- args[1].i = 2;
- args[2].i = -3;
+ result.SetI(0);
+ args[0].SetI(-1);
+ args[1].SetI(2);
+ args[2].SetI(-3);
(*stub)(method, NULL, Thread::Current(), args, &result);
- EXPECT_EQ(-2, result.i);
+ EXPECT_EQ(-2, result.GetI());
- result.i = 1234;
- args[0].i = INT_MAX;
- args[1].i = INT_MIN;
- args[2].i = INT_MAX;
+ result.SetI(1234);
+ args[0].SetI(INT_MAX);
+ args[1].SetI(INT_MIN);
+ args[2].SetI(INT_MAX);
(*stub)(method, NULL, Thread::Current(), args, &result);
- EXPECT_EQ(2147483646, result.i);
+ EXPECT_EQ(2147483646, result.GetI());
- result.i = INT_MIN;
- args[0].i = INT_MAX;
- args[1].i = INT_MAX;
- args[2].i = INT_MAX;
+ result.SetI(INT_MIN);
+ args[0].SetI(INT_MAX);
+ args[1].SetI(INT_MAX);
+ args[2].SetI(INT_MAX);
(*stub)(method, NULL, Thread::Current(), args, &result);
- EXPECT_EQ(2147483645, result.i);
+ EXPECT_EQ(2147483645, result.GetI());
}
void InvokeSumIntIntIntIntMethod(bool is_static) {
@@ -263,46 +263,46 @@
Method::InvokeStub* stub = DoCompile(method, receiver, is_static, "sum", "(IIII)I");
JValue result;
- result.i = -1;
+ result.SetI(-1);
JValue args[4];
- args[0].i = 0;
- args[1].i = 0;
- args[2].i = 0;
- args[3].i = 0;
+ args[0].SetI(0);
+ args[1].SetI(0);
+ args[2].SetI(0);
+ args[3].SetI(0);
(*stub)(method, NULL, Thread::Current(), args, &result);
- EXPECT_EQ(0, result.i);
+ EXPECT_EQ(0, result.GetI());
- result.i = 0;
- args[0].i = 1;
- args[1].i = 2;
- args[2].i = 3;
- args[3].i = 4;
+ result.SetI(0);
+ args[0].SetI(1);
+ args[1].SetI(2);
+ args[2].SetI(3);
+ args[3].SetI(4);
(*stub)(method, NULL, Thread::Current(), args, &result);
- EXPECT_EQ(10, result.i);
+ EXPECT_EQ(10, result.GetI());
- result.i = 0;
- args[0].i = -1;
- args[1].i = 2;
- args[2].i = -3;
- args[3].i = 4;
+ result.SetI(0);
+ args[0].SetI(-1);
+ args[1].SetI(2);
+ args[2].SetI(-3);
+ args[3].SetI(4);
(*stub)(method, NULL, Thread::Current(), args, &result);
- EXPECT_EQ(2, result.i);
+ EXPECT_EQ(2, result.GetI());
- result.i = 1234;
- args[0].i = INT_MAX;
- args[1].i = INT_MIN;
- args[2].i = INT_MAX;
- args[3].i = INT_MIN;
+ result.SetI(1234);
+ args[0].SetI(INT_MAX);
+ args[1].SetI(INT_MIN);
+ args[2].SetI(INT_MAX);
+ args[3].SetI(INT_MIN);
(*stub)(method, NULL, Thread::Current(), args, &result);
- EXPECT_EQ(-2, result.i);
+ EXPECT_EQ(-2, result.GetI());
- result.i = INT_MIN;
- args[0].i = INT_MAX;
- args[1].i = INT_MAX;
- args[2].i = INT_MAX;
- args[3].i = INT_MAX;
+ result.SetI(INT_MIN);
+ args[0].SetI(INT_MAX);
+ args[1].SetI(INT_MAX);
+ args[2].SetI(INT_MAX);
+ args[3].SetI(INT_MAX);
(*stub)(method, NULL, Thread::Current(), args, &result);
- EXPECT_EQ(-4, result.i);
+ EXPECT_EQ(-4, result.GetI());
}
void InvokeSumIntIntIntIntIntMethod(bool is_static) {
@@ -311,51 +311,51 @@
Method::InvokeStub* stub = DoCompile(method, receiver, is_static, "sum", "(IIIII)I");
JValue result;
- result.i = -1.0;
+ result.SetI(-1.0);
JValue args[5];
- args[0].i = 0;
- args[1].i = 0;
- args[2].i = 0;
- args[3].i = 0;
- args[4].i = 0;
+ args[0].SetI(0);
+ args[1].SetI(0);
+ args[2].SetI(0);
+ args[3].SetI(0);
+ args[4].SetI(0);
(*stub)(method, NULL, Thread::Current(), args, &result);
- EXPECT_EQ(0, result.i);
+ EXPECT_EQ(0, result.GetI());
- result.i = 0;
- args[0].i = 1;
- args[1].i = 2;
- args[2].i = 3;
- args[3].i = 4;
- args[4].i = 5;
+ result.SetI(0);
+ args[0].SetI(1);
+ args[1].SetI(2);
+ args[2].SetI(3);
+ args[3].SetI(4);
+ args[4].SetI(5);
(*stub)(method, NULL, Thread::Current(), args, &result);
- EXPECT_EQ(15, result.i);
+ EXPECT_EQ(15, result.GetI());
- result.i = 0;
- args[0].i = -1;
- args[1].i = 2;
- args[2].i = -3;
- args[3].i = 4;
- args[4].i = -5;
+ result.SetI(0);
+ args[0].SetI(-1);
+ args[1].SetI(2);
+ args[2].SetI(-3);
+ args[3].SetI(4);
+ args[4].SetI(-5);
(*stub)(method, NULL, Thread::Current(), args, &result);
- EXPECT_EQ(-3, result.i);
+ EXPECT_EQ(-3, result.GetI());
- result.i = 1234;
- args[0].i = INT_MAX;
- args[1].i = INT_MIN;
- args[2].i = INT_MAX;
- args[3].i = INT_MIN;
- args[4].i = INT_MAX;
+ result.SetI(1234);
+ args[0].SetI(INT_MAX);
+ args[1].SetI(INT_MIN);
+ args[2].SetI(INT_MAX);
+ args[3].SetI(INT_MIN);
+ args[4].SetI(INT_MAX);
(*stub)(method, NULL, Thread::Current(), args, &result);
- EXPECT_EQ(2147483645, result.i);
+ EXPECT_EQ(2147483645, result.GetI());
- result.i = INT_MIN;
- args[0].i = INT_MAX;
- args[1].i = INT_MAX;
- args[2].i = INT_MAX;
- args[3].i = INT_MAX;
- args[4].i = INT_MAX;
+ result.SetI(INT_MIN);
+ args[0].SetI(INT_MAX);
+ args[1].SetI(INT_MAX);
+ args[2].SetI(INT_MAX);
+ args[3].SetI(INT_MAX);
+ args[4].SetI(INT_MAX);
(*stub)(method, NULL, Thread::Current(), args, &result);
- EXPECT_EQ(2147483643, result.i);
+ EXPECT_EQ(2147483643, result.GetI());
}
void InvokeSumDoubleDoubleMethod(bool is_static) {
@@ -366,35 +366,35 @@
JValue args[2];
JValue result;
- args[0].d = 0.0;
- args[1].d = 0.0;
- result.d = -1.0;
+ args[0].SetD(0.0);
+ args[1].SetD(0.0);
+ result.SetD(-1.0);
(*stub)(method, NULL, Thread::Current(), args, &result);
- EXPECT_EQ(0.0, result.d);
+ EXPECT_EQ(0.0, result.GetD());
- args[0].d = 1.0;
- args[1].d = 2.0;
- result.d = 0.0;
+ args[0].SetD(1.0);
+ args[1].SetD(2.0);
+ result.SetD(0.0);
(*stub)(method, NULL, Thread::Current(), args, &result);
- EXPECT_EQ(3.0, result.d);
+ EXPECT_EQ(3.0, result.GetD());
- args[0].d = 1.0;
- args[1].d = -2.0;
- result.d = 0.0;
+ args[0].SetD(1.0);
+ args[1].SetD(-2.0);
+ result.SetD(0.0);
(*stub)(method, NULL, Thread::Current(), args, &result);
- EXPECT_EQ(-1.0, result.d);
+ EXPECT_EQ(-1.0, result.GetD());
- args[0].d = DBL_MAX;
- args[1].d = DBL_MIN;
- result.d = 0.0;
+ args[0].SetD(DBL_MAX);
+ args[1].SetD(DBL_MIN);
+ result.SetD(0.0);
(*stub)(method, NULL, Thread::Current(), args, &result);
- EXPECT_EQ(1.7976931348623157e308, result.d);
+ EXPECT_EQ(1.7976931348623157e308, result.GetD());
- args[0].d = DBL_MAX;
- args[1].d = DBL_MAX;
- result.d = 0.0;
+ args[0].SetD(DBL_MAX);
+ args[1].SetD(DBL_MAX);
+ result.SetD(0.0);
(*stub)(method, NULL, Thread::Current(), args, &result);
- EXPECT_EQ(INFINITY, result.d);
+ EXPECT_EQ(INFINITY, result.GetD());
}
void InvokeSumDoubleDoubleDoubleMethod(bool is_static) {
@@ -405,26 +405,26 @@
JValue args[3];
JValue result;
- args[0].d = 0.0;
- args[1].d = 0.0;
- args[2].d = 0.0;
- result.d = -1.0;
+ args[0].SetD(0.0);
+ args[1].SetD(0.0);
+ args[2].SetD(0.0);
+ result.SetD(-1.0);
(*stub)(method, NULL, Thread::Current(), args, &result);
- EXPECT_EQ(0.0, result.d);
+ EXPECT_EQ(0.0, result.GetD());
- args[0].d = 1.0;
- args[1].d = 2.0;
- args[2].d = 3.0;
- result.d = 0.0;
+ args[0].SetD(1.0);
+ args[1].SetD(2.0);
+ args[2].SetD(3.0);
+ result.SetD(0.0);
(*stub)(method, NULL, Thread::Current(), args, &result);
- EXPECT_EQ(6.0, result.d);
+ EXPECT_EQ(6.0, result.GetD());
- args[0].d = 1.0;
- args[1].d = -2.0;
- args[2].d = 3.0;
- result.d = 0.0;
+ args[0].SetD(1.0);
+ args[1].SetD(-2.0);
+ args[2].SetD(3.0);
+ result.SetD(0.0);
(*stub)(method, NULL, Thread::Current(), args, &result);
- EXPECT_EQ(2.0, result.d);
+ EXPECT_EQ(2.0, result.GetD());
}
void InvokeSumDoubleDoubleDoubleDoubleMethod(bool is_static) {
@@ -435,29 +435,29 @@
JValue args[4];
JValue result;
- args[0].d = 0.0;
- args[1].d = 0.0;
- args[2].d = 0.0;
- args[3].d = 0.0;
- result.d = -1.0;
+ args[0].SetD(0.0);
+ args[1].SetD(0.0);
+ args[2].SetD(0.0);
+ args[3].SetD(0.0);
+ result.SetD(-1.0);
(*stub)(method, NULL, Thread::Current(), args, &result);
- EXPECT_EQ(0.0, result.d);
+ EXPECT_EQ(0.0, result.GetD());
- args[0].d = 1.0;
- args[1].d = 2.0;
- args[2].d = 3.0;
- args[3].d = 4.0;
- result.d = 0.0;
+ args[0].SetD(1.0);
+ args[1].SetD(2.0);
+ args[2].SetD(3.0);
+ args[3].SetD(4.0);
+ result.SetD(0.0);
(*stub)(method, NULL, Thread::Current(), args, &result);
- EXPECT_EQ(10.0, result.d);
+ EXPECT_EQ(10.0, result.GetD());
- args[0].d = 1.0;
- args[1].d = -2.0;
- args[2].d = 3.0;
- args[3].d = -4.0;
- result.d = 0.0;
+ args[0].SetD(1.0);
+ args[1].SetD(-2.0);
+ args[2].SetD(3.0);
+ args[3].SetD(-4.0);
+ result.SetD(0.0);
(*stub)(method, NULL, Thread::Current(), args, &result);
- EXPECT_EQ(-2.0, result.d);
+ EXPECT_EQ(-2.0, result.GetD());
}
void InvokeSumDoubleDoubleDoubleDoubleDoubleMethod(bool is_static) {
@@ -468,32 +468,32 @@
JValue args[5];
JValue result;
- args[0].d = 0.0;
- args[1].d = 0.0;
- args[2].d = 0.0;
- args[3].d = 0.0;
- args[4].d = 0.0;
- result.d = -1.0;
+ args[0].SetD(0.0);
+ args[1].SetD(0.0);
+ args[2].SetD(0.0);
+ args[3].SetD(0.0);
+ args[4].SetD(0.0);
+ result.SetD(-1.0);
(*stub)(method, NULL, Thread::Current(), args, &result);
- EXPECT_EQ(0.0, result.d);
+ EXPECT_EQ(0.0, result.GetD());
- args[0].d = 1.0;
- args[1].d = 2.0;
- args[2].d = 3.0;
- args[3].d = 4.0;
- args[4].d = 5.0;
- result.d = 0.0;
+ args[0].SetD(1.0);
+ args[1].SetD(2.0);
+ args[2].SetD(3.0);
+ args[3].SetD(4.0);
+ args[4].SetD(5.0);
+ result.SetD(0.0);
(*stub)(method, NULL, Thread::Current(), args, &result);
- EXPECT_EQ(15.0, result.d);
+ EXPECT_EQ(15.0, result.GetD());
- args[0].d = 1.0;
- args[1].d = -2.0;
- args[2].d = 3.0;
- args[3].d = -4.0;
- args[4].d = 5.0;
- result.d = 0.0;
+ args[0].SetD(1.0);
+ args[1].SetD(-2.0);
+ args[2].SetD(3.0);
+ args[3].SetD(-4.0);
+ args[4].SetD(5.0);
+ result.SetD(0.0);
(*stub)(method, NULL, Thread::Current(), args, &result);
- EXPECT_EQ(3.0, result.d);
+ EXPECT_EQ(3.0, result.GetD());
}
JavaVMExt* vm_;
@@ -1353,7 +1353,7 @@
Method::InvokeStub* stub = method->GetInvokeStub();
JValue args[1];
- args[0].l = NULL;
+ args[0].SetL(NULL);
(*stub)(method, NULL, Thread::Current(), args, NULL);
}
diff --git a/src/oat/runtime/support_proxy.cc b/src/oat/runtime/support_proxy.cc
index 25cafc2..46f2313 100644
--- a/src/oat/runtime/support_proxy.cc
+++ b/src/oat/runtime/support_proxy.cc
@@ -118,13 +118,13 @@
if (cur_arg == 1 && (param_type->IsPrimitiveLong() || param_type->IsPrimitiveDouble())) {
// long/double split over regs and stack, mask in high half from stack arguments
uint64_t high_half = *reinterpret_cast<uint32_t*>(stack_args + (13 * kPointerSize));
- val.j = (val.j & 0xffffffffULL) | (high_half << 32);
+ val.SetJ((val.GetJ() & 0xffffffffULL) | (high_half << 32));
}
BoxPrimitive(param_type->GetPrimitiveType(), val);
if (self->IsExceptionPending()) {
return;
}
- obj = val.l;
+ obj = val.GetL();
}
args->Set(param_index, obj);
cur_arg = cur_arg + (param_type->IsPrimitiveLong() || param_type->IsPrimitiveDouble() ? 2 : 1);
@@ -143,7 +143,7 @@
if (self->IsExceptionPending()) {
return;
}
- obj = val.l;
+ obj = val.GetL();
}
args->Set(param_index, obj);
cur_arg = cur_arg + (param_type->IsPrimitiveLong() || param_type->IsPrimitiveDouble() ? 2 : 1);
diff --git a/src/object.cc b/src/object.cc
index f863a39..158f0e6 100644
--- a/src/object.cc
+++ b/src/object.cc
@@ -570,7 +570,7 @@
PrettyMethod(this).c_str(), GetCode(), stub,
Runtime::Current()->IsStarted() ? "true" : "false");
if (result != NULL) {
- result->j = 0;
+ result->SetJ(0);
}
}
diff --git a/src/object.h b/src/object.h
index 7413bf9..00492f0 100644
--- a/src/object.h
+++ b/src/object.h
@@ -63,6 +63,38 @@
// We default initialize JValue instances to all-zeros.
JValue() : j(0) {}
+ int8_t GetB() const { return b; }
+ void SetB(int8_t new_b) {
+ i = ((static_cast<int32_t>(new_b) << 24) >> 24); // Sign-extend.
+ }
+
+ uint16_t GetC() const { return c; }
+ void SetC(uint16_t new_c) { c = new_c; }
+
+ double GetD() const { return d; }
+ void SetD(double new_d) { d = new_d; }
+
+ float GetF() const { return f; }
+ void SetF(float new_f) { f = new_f; }
+
+ int32_t GetI() const { return i; }
+ void SetI(int32_t new_i) { i = new_i; }
+
+ int64_t GetJ() const { return j; }
+ void SetJ(int64_t new_j) { j = new_j; }
+
+ Object* GetL() const { return l; }
+ void SetL(Object* new_l) { l = new_l; }
+
+ int16_t GetS() const { return s; }
+ void SetS(int16_t new_s) {
+ i = ((static_cast<int32_t>(new_s) << 16) >> 16); // Sign-extend.
+ }
+
+ uint8_t GetZ() const { return z; }
+ void SetZ(uint8_t new_z) { z = new_z; }
+
+ private:
uint8_t z;
int8_t b;
uint16_t c;
diff --git a/src/reflection.cc b/src/reflection.cc
index aba930c..e919ef1 100644
--- a/src/reflection.cc
+++ b/src/reflection.cc
@@ -116,7 +116,7 @@
// Box if necessary and return.
BoxPrimitive(mh.GetReturnType()->GetPrimitiveType(), value);
- return AddLocalReference<jobject>(env, value.l);
+ return AddLocalReference<jobject>(env, value.GetL());
}
bool VerifyObjectInClass(JNIEnv* env, Object* o, Class* c) {
@@ -136,86 +136,77 @@
return true;
}
-/*
- * Convert primitive, boxed data from "srcPtr" to "dstPtr".
- *
- * Section v2 2.6 lists the various conversions and promotions. We
- * allow the "widening" and "identity" conversions, but don't allow the
- * "narrowing" conversions.
- *
- * Allowed:
- * byte to short, int, long, float, double
- * short to int, long, float double
- * char to int, long, float, double
- * int to long, float, double
- * long to float, double
- * float to double
- * Values of types byte, char, and short are "internally" widened to int.
- *
- * Returns the width in 32-bit words of the destination primitive, or
- * -1 if the conversion is not allowed.
- */
bool ConvertPrimitiveValue(Primitive::Type srcType, Primitive::Type dstType,
const JValue& src, JValue& dst) {
CHECK(srcType != Primitive::kPrimNot && dstType != Primitive::kPrimNot);
switch (dstType) {
case Primitive::kPrimBoolean:
+ if (srcType == Primitive::kPrimBoolean) {
+ dst.SetZ(src.GetZ());
+ return true;
+ }
+ break;
case Primitive::kPrimChar:
+ if (srcType == Primitive::kPrimChar) {
+ dst.SetC(src.GetC());
+ return true;
+ }
+ break;
case Primitive::kPrimByte:
- if (srcType == dstType) {
- dst.i = src.i;
+ if (srcType == Primitive::kPrimByte) {
+ dst.SetB(src.GetB());
return true;
}
break;
case Primitive::kPrimShort:
if (srcType == Primitive::kPrimByte || srcType == Primitive::kPrimShort) {
- dst.i = src.i;
+ dst.SetS(src.GetI());
return true;
}
break;
case Primitive::kPrimInt:
if (srcType == Primitive::kPrimByte || srcType == Primitive::kPrimChar ||
srcType == Primitive::kPrimShort || srcType == Primitive::kPrimInt) {
- dst.i = src.i;
+ dst.SetI(src.GetI());
return true;
}
break;
case Primitive::kPrimLong:
if (srcType == Primitive::kPrimByte || srcType == Primitive::kPrimChar ||
srcType == Primitive::kPrimShort || srcType == Primitive::kPrimInt) {
- dst.j = src.i;
+ dst.SetJ(src.GetI());
return true;
} else if (srcType == Primitive::kPrimLong) {
- dst.j = src.j;
+ dst.SetJ(src.GetJ());
return true;
}
break;
case Primitive::kPrimFloat:
if (srcType == Primitive::kPrimByte || srcType == Primitive::kPrimChar ||
srcType == Primitive::kPrimShort || srcType == Primitive::kPrimInt) {
- dst.f = src.i;
+ dst.SetF(src.GetI());
return true;
} else if (srcType == Primitive::kPrimLong) {
- dst.f = src.j;
+ dst.SetF(src.GetJ());
return true;
} else if (srcType == Primitive::kPrimFloat) {
- dst.i = src.i;
+ dst.SetF(src.GetF());
return true;
}
break;
case Primitive::kPrimDouble:
if (srcType == Primitive::kPrimByte || srcType == Primitive::kPrimChar ||
srcType == Primitive::kPrimShort || srcType == Primitive::kPrimInt) {
- dst.d = src.i;
+ dst.SetD(src.GetI());
return true;
} else if (srcType == Primitive::kPrimLong) {
- dst.d = src.j;
+ dst.SetD(src.GetJ());
return true;
} else if (srcType == Primitive::kPrimFloat) {
- dst.d = src.f;
+ dst.SetD(src.GetF());
return true;
} else if (srcType == Primitive::kPrimDouble) {
- dst.j = src.j;
+ dst.SetJ(src.GetJ());
return true;
}
break;
@@ -262,7 +253,7 @@
break;
case Primitive::kPrimVoid:
// There's no such thing as a void field, and void methods invoked via reflection return null.
- value.l = NULL;
+ value.SetL(NULL);
return;
default:
LOG(FATAL) << static_cast<int>(src_class);
@@ -284,7 +275,7 @@
PrettyTypeOf(o).c_str());
return false;
}
- unboxed_value.l = o;
+ unboxed_value.SetL(o);
return true;
} else if (dst_class->GetPrimitiveType() == Primitive::kPrimVoid) {
Thread::Current()->ThrowNewExceptionF("Ljava/lang/IllegalArgumentException;",
@@ -308,28 +299,28 @@
Field* primitive_field = o->GetClass()->GetIFields()->Get(0);
if (src_descriptor == "Ljava/lang/Boolean;") {
src_class = class_linker->FindPrimitiveClass('Z');
- boxed_value.i = primitive_field->GetBoolean(o); // and extend read value to 32bits
+ boxed_value.SetZ(primitive_field->GetBoolean(o));
} else if (src_descriptor == "Ljava/lang/Byte;") {
src_class = class_linker->FindPrimitiveClass('B');
- boxed_value.i = primitive_field->GetByte(o); // and extend read value to 32bits
+ boxed_value.SetB(primitive_field->GetByte(o));
} else if (src_descriptor == "Ljava/lang/Character;") {
src_class = class_linker->FindPrimitiveClass('C');
- boxed_value.i = primitive_field->GetChar(o); // and extend read value to 32bits
+ boxed_value.SetC(primitive_field->GetChar(o));
} else if (src_descriptor == "Ljava/lang/Float;") {
src_class = class_linker->FindPrimitiveClass('F');
- boxed_value.f = primitive_field->GetFloat(o);
+ boxed_value.SetF(primitive_field->GetFloat(o));
} else if (src_descriptor == "Ljava/lang/Double;") {
src_class = class_linker->FindPrimitiveClass('D');
- boxed_value.d = primitive_field->GetDouble(o);
+ boxed_value.SetD(primitive_field->GetDouble(o));
} else if (src_descriptor == "Ljava/lang/Integer;") {
src_class = class_linker->FindPrimitiveClass('I');
- boxed_value.i = primitive_field->GetInt(o);
+ boxed_value.SetI(primitive_field->GetInt(o));
} else if (src_descriptor == "Ljava/lang/Long;") {
src_class = class_linker->FindPrimitiveClass('J');
- boxed_value.j = primitive_field->GetLong(o);
+ boxed_value.SetJ(primitive_field->GetLong(o));
} else if (src_descriptor == "Ljava/lang/Short;") {
src_class = class_linker->FindPrimitiveClass('S');
- boxed_value.i = primitive_field->GetShort(o); // and extend read value to 32bits
+ boxed_value.SetS(primitive_field->GetShort(o));
} else {
Thread::Current()->ThrowNewExceptionF("Ljava/lang/IllegalArgumentException;",
"%s should have type %s, got %s",
diff --git a/src/thread.cc b/src/thread.cc
index a4194b1..1a39d99 100644
--- a/src/thread.cc
+++ b/src/thread.cc
@@ -878,8 +878,8 @@
// Call the handler.
Method* m = handler->GetClass()->FindVirtualMethodForVirtualOrInterface(gUncaughtExceptionHandler_uncaughtException);
JValue args[2];
- args[0].l = peer_;
- args[1].l = exception;
+ args[0].SetL(peer_);
+ args[1].SetL(exception);
m->Invoke(this, handler, args, NULL);
// If the handler threw, clear that exception too.
@@ -897,7 +897,7 @@
if (group != NULL) {
Method* m = group->GetClass()->FindVirtualMethodForVirtualOrInterface(gThreadGroup_removeThread);
JValue args[1];
- args[0].l = peer_;
+ args[0].SetL(peer_);
m->Invoke(this, group, args, NULL);
}
}