Add a default constructor to JValue.
Change-Id: I7abe801b26f5003c480215c1f1ca64dfc07667ed
diff --git a/src/java_lang_reflect_Field.cc b/src/java_lang_reflect_Field.cc
index 9343117..7cc4166 100644
--- a/src/java_lang_reflect_Field.cc
+++ b/src/java_lang_reflect_Field.cc
@@ -95,7 +95,7 @@
}
// Get the field's value, boxing if necessary.
- JValue value = { 0 };
+ JValue value;
if (!GetFieldValue(o, f, value, true)) {
return NULL;
}
@@ -112,7 +112,7 @@
}
// Read the value.
- JValue field_value = { 0 };
+ JValue field_value;
if (!GetFieldValue(o, f, field_value, false)) {
return JValue();
}
@@ -256,49 +256,49 @@
}
static void Field_setBoolean(JNIEnv* env, jobject javaField, jobject javaObj, jboolean value) {
- JValue v = { 0 };
+ JValue v;
v.z = value;
SetPrimitiveField(env, javaField, javaObj, 'Z', v);
}
static void Field_setByte(JNIEnv* env, jobject javaField, jobject javaObj, jbyte value) {
- JValue v = { 0 };
+ JValue v;
v.b = value;
SetPrimitiveField(env, javaField, javaObj, 'B', v);
}
static void Field_setChar(JNIEnv* env, jobject javaField, jobject javaObj, jchar value) {
- JValue v = { 0 };
+ JValue v;
v.c = value;
SetPrimitiveField(env, javaField, javaObj, 'C', v);
}
static void Field_setDouble(JNIEnv* env, jobject javaField, jobject javaObj, jdouble value) {
- JValue v = { 0 };
+ JValue v;
v.d = value;
SetPrimitiveField(env, javaField, javaObj, 'D', v);
}
static void Field_setFloat(JNIEnv* env, jobject javaField, jobject javaObj, jfloat value) {
- JValue v = { 0 };
+ JValue v;
v.f = value;
SetPrimitiveField(env, javaField, javaObj, 'F', v);
}
static void Field_setInt(JNIEnv* env, jobject javaField, jobject javaObj, jint value) {
- JValue v = { 0 };
+ JValue v;
v.i = value;
SetPrimitiveField(env, javaField, javaObj, 'I', v);
}
static void Field_setLong(JNIEnv* env, jobject javaField, jobject javaObj, jlong value) {
- JValue v = { 0 };
+ JValue v;
v.j = value;
SetPrimitiveField(env, javaField, javaObj, 'J', v);
}
static void Field_setShort(JNIEnv* env, jobject javaField, jobject javaObj, jshort value) {
- JValue v = { 0 };
+ JValue v;
v.s = value;
SetPrimitiveField(env, javaField, javaObj, 'S', v);
}
diff --git a/src/jni_internal.cc b/src/jni_internal.cc
index 26f069c..86135ab 100644
--- a/src/jni_internal.cc
+++ b/src/jni_internal.cc
@@ -293,7 +293,7 @@
static JValue InvokeWithArgArray(JNIEnv* public_env, Object* receiver, Method* method, JValue* args) {
CheckMethodArguments(method, args);
JNIEnvExt* env = reinterpret_cast<JNIEnvExt*>(public_env);
- JValue result = { 0 };
+ JValue result;
method->Invoke(env->self, receiver, args, &result);
return result;
}
@@ -1063,20 +1063,20 @@
ScopedJniThreadState ts(env);
va_list ap;
va_start(ap, mid);
- JValue result = InvokeVirtualOrInterfaceWithVarArgs(env, obj, mid, ap);
+ JValue result(InvokeVirtualOrInterfaceWithVarArgs(env, obj, mid, ap));
va_end(ap);
return AddLocalReference<jobject>(env, result.l);
}
static jobject CallObjectMethodV(JNIEnv* env, jobject obj, jmethodID mid, va_list args) {
ScopedJniThreadState ts(env);
- JValue result = InvokeVirtualOrInterfaceWithVarArgs(env, obj, mid, args);
+ JValue result(InvokeVirtualOrInterfaceWithVarArgs(env, obj, mid, args));
return AddLocalReference<jobject>(env, result.l);
}
static jobject CallObjectMethodA(JNIEnv* env, jobject obj, jmethodID mid, jvalue* args) {
ScopedJniThreadState ts(env);
- JValue result = InvokeVirtualOrInterfaceWithJValues(env, obj, mid, args);
+ JValue result(InvokeVirtualOrInterfaceWithJValues(env, obj, mid, args));
return AddLocalReference<jobject>(env, result.l);
}
@@ -1084,7 +1084,7 @@
ScopedJniThreadState ts(env);
va_list ap;
va_start(ap, mid);
- JValue result = InvokeVirtualOrInterfaceWithVarArgs(env, obj, mid, ap);
+ JValue result(InvokeVirtualOrInterfaceWithVarArgs(env, obj, mid, ap));
va_end(ap);
return result.z;
}
@@ -1103,7 +1103,7 @@
ScopedJniThreadState ts(env);
va_list ap;
va_start(ap, mid);
- JValue result = InvokeVirtualOrInterfaceWithVarArgs(env, obj, mid, ap);
+ JValue result(InvokeVirtualOrInterfaceWithVarArgs(env, obj, mid, ap));
va_end(ap);
return result.b;
}
@@ -1122,7 +1122,7 @@
ScopedJniThreadState ts(env);
va_list ap;
va_start(ap, mid);
- JValue result = InvokeVirtualOrInterfaceWithVarArgs(env, obj, mid, ap);
+ JValue result(InvokeVirtualOrInterfaceWithVarArgs(env, obj, mid, ap));
va_end(ap);
return result.c;
}
@@ -1141,7 +1141,7 @@
ScopedJniThreadState ts(env);
va_list ap;
va_start(ap, mid);
- JValue result = InvokeVirtualOrInterfaceWithVarArgs(env, obj, mid, ap);
+ JValue result(InvokeVirtualOrInterfaceWithVarArgs(env, obj, mid, ap));
va_end(ap);
return result.d;
}
@@ -1160,7 +1160,7 @@
ScopedJniThreadState ts(env);
va_list ap;
va_start(ap, mid);
- JValue result = InvokeVirtualOrInterfaceWithVarArgs(env, obj, mid, ap);
+ JValue result(InvokeVirtualOrInterfaceWithVarArgs(env, obj, mid, ap));
va_end(ap);
return result.f;
}
@@ -1179,7 +1179,7 @@
ScopedJniThreadState ts(env);
va_list ap;
va_start(ap, mid);
- JValue result = InvokeVirtualOrInterfaceWithVarArgs(env, obj, mid, ap);
+ JValue result(InvokeVirtualOrInterfaceWithVarArgs(env, obj, mid, ap));
va_end(ap);
return result.i;
}
@@ -1198,7 +1198,7 @@
ScopedJniThreadState ts(env);
va_list ap;
va_start(ap, mid);
- JValue result = InvokeVirtualOrInterfaceWithVarArgs(env, obj, mid, ap);
+ JValue result(InvokeVirtualOrInterfaceWithVarArgs(env, obj, mid, ap));
va_end(ap);
return result.j;
}
@@ -1217,7 +1217,7 @@
ScopedJniThreadState ts(env);
va_list ap;
va_start(ap, mid);
- JValue result = InvokeVirtualOrInterfaceWithVarArgs(env, obj, mid, ap);
+ JValue result(InvokeVirtualOrInterfaceWithVarArgs(env, obj, mid, ap));
va_end(ap);
return result.s;
}
@@ -1236,7 +1236,7 @@
ScopedJniThreadState ts(env);
va_list ap;
va_start(ap, mid);
- JValue result = InvokeVirtualOrInterfaceWithVarArgs(env, obj, mid, ap);
+ JValue result(InvokeVirtualOrInterfaceWithVarArgs(env, obj, mid, ap));
va_end(ap);
}
@@ -1254,7 +1254,7 @@
ScopedJniThreadState ts(env);
va_list ap;
va_start(ap, mid);
- JValue result = InvokeWithVarArgs(env, obj, mid, ap);
+ JValue result(InvokeWithVarArgs(env, obj, mid, ap));
jobject local_result = AddLocalReference<jobject>(env, result.l);
va_end(ap);
return local_result;
@@ -1263,14 +1263,14 @@
static jobject CallNonvirtualObjectMethodV(JNIEnv* env,
jobject obj, jclass, jmethodID mid, va_list args) {
ScopedJniThreadState ts(env);
- JValue result = InvokeWithVarArgs(env, obj, mid, args);
+ JValue result(InvokeWithVarArgs(env, obj, mid, args));
return AddLocalReference<jobject>(env, result.l);
}
static jobject CallNonvirtualObjectMethodA(JNIEnv* env,
jobject obj, jclass, jmethodID mid, jvalue* args) {
ScopedJniThreadState ts(env);
- JValue result = InvokeWithJValues(env, obj, mid, args);
+ JValue result(InvokeWithJValues(env, obj, mid, args));
return AddLocalReference<jobject>(env, result.l);
}
@@ -1279,7 +1279,7 @@
ScopedJniThreadState ts(env);
va_list ap;
va_start(ap, mid);
- JValue result = InvokeWithVarArgs(env, obj, mid, ap);
+ JValue result(InvokeWithVarArgs(env, obj, mid, ap));
va_end(ap);
return result.z;
}
@@ -1300,7 +1300,7 @@
ScopedJniThreadState ts(env);
va_list ap;
va_start(ap, mid);
- JValue result = InvokeWithVarArgs(env, obj, mid, ap);
+ JValue result(InvokeWithVarArgs(env, obj, mid, ap));
va_end(ap);
return result.b;
}
@@ -1321,7 +1321,7 @@
ScopedJniThreadState ts(env);
va_list ap;
va_start(ap, mid);
- JValue result = InvokeWithVarArgs(env, obj, mid, ap);
+ JValue result(InvokeWithVarArgs(env, obj, mid, ap));
va_end(ap);
return result.c;
}
@@ -1342,7 +1342,7 @@
ScopedJniThreadState ts(env);
va_list ap;
va_start(ap, mid);
- JValue result = InvokeWithVarArgs(env, obj, mid, ap);
+ JValue result(InvokeWithVarArgs(env, obj, mid, ap));
va_end(ap);
return result.s;
}
@@ -1363,7 +1363,7 @@
ScopedJniThreadState ts(env);
va_list ap;
va_start(ap, mid);
- JValue result = InvokeWithVarArgs(env, obj, mid, ap);
+ JValue result(InvokeWithVarArgs(env, obj, mid, ap));
va_end(ap);
return result.i;
}
@@ -1384,7 +1384,7 @@
ScopedJniThreadState ts(env);
va_list ap;
va_start(ap, mid);
- JValue result = InvokeWithVarArgs(env, obj, mid, ap);
+ JValue result(InvokeWithVarArgs(env, obj, mid, ap));
va_end(ap);
return result.j;
}
@@ -1405,7 +1405,7 @@
ScopedJniThreadState ts(env);
va_list ap;
va_start(ap, mid);
- JValue result = InvokeWithVarArgs(env, obj, mid, ap);
+ JValue result(InvokeWithVarArgs(env, obj, mid, ap));
va_end(ap);
return result.f;
}
@@ -1426,7 +1426,7 @@
ScopedJniThreadState ts(env);
va_list ap;
va_start(ap, mid);
- JValue result = InvokeWithVarArgs(env, obj, mid, ap);
+ JValue result(InvokeWithVarArgs(env, obj, mid, ap));
va_end(ap);
return result.d;
}
@@ -1646,7 +1646,7 @@
ScopedJniThreadState ts(env);
va_list ap;
va_start(ap, mid);
- JValue result = InvokeWithVarArgs(env, NULL, mid, ap);
+ JValue result(InvokeWithVarArgs(env, NULL, mid, ap));
jobject local_result = AddLocalReference<jobject>(env, result.l);
va_end(ap);
return local_result;
@@ -1654,13 +1654,13 @@
static jobject CallStaticObjectMethodV(JNIEnv* env, jclass, jmethodID mid, va_list args) {
ScopedJniThreadState ts(env);
- JValue result = InvokeWithVarArgs(env, NULL, mid, args);
+ JValue result(InvokeWithVarArgs(env, NULL, mid, args));
return AddLocalReference<jobject>(env, result.l);
}
static jobject CallStaticObjectMethodA(JNIEnv* env, jclass, jmethodID mid, jvalue* args) {
ScopedJniThreadState ts(env);
- JValue result = InvokeWithJValues(env, NULL, mid, args);
+ JValue result(InvokeWithJValues(env, NULL, mid, args));
return AddLocalReference<jobject>(env, result.l);
}
@@ -1668,7 +1668,7 @@
ScopedJniThreadState ts(env);
va_list ap;
va_start(ap, mid);
- JValue result = InvokeWithVarArgs(env, NULL, mid, ap);
+ JValue result(InvokeWithVarArgs(env, NULL, mid, ap));
va_end(ap);
return result.z;
}
@@ -1687,7 +1687,7 @@
ScopedJniThreadState ts(env);
va_list ap;
va_start(ap, mid);
- JValue result = InvokeWithVarArgs(env, NULL, mid, ap);
+ JValue result(InvokeWithVarArgs(env, NULL, mid, ap));
va_end(ap);
return result.b;
}
@@ -1706,7 +1706,7 @@
ScopedJniThreadState ts(env);
va_list ap;
va_start(ap, mid);
- JValue result = InvokeWithVarArgs(env, NULL, mid, ap);
+ JValue result(InvokeWithVarArgs(env, NULL, mid, ap));
va_end(ap);
return result.c;
}
@@ -1725,7 +1725,7 @@
ScopedJniThreadState ts(env);
va_list ap;
va_start(ap, mid);
- JValue result = InvokeWithVarArgs(env, NULL, mid, ap);
+ JValue result(InvokeWithVarArgs(env, NULL, mid, ap));
va_end(ap);
return result.s;
}
@@ -1744,7 +1744,7 @@
ScopedJniThreadState ts(env);
va_list ap;
va_start(ap, mid);
- JValue result = InvokeWithVarArgs(env, NULL, mid, ap);
+ JValue result(InvokeWithVarArgs(env, NULL, mid, ap));
va_end(ap);
return result.i;
}
@@ -1763,7 +1763,7 @@
ScopedJniThreadState ts(env);
va_list ap;
va_start(ap, mid);
- JValue result = InvokeWithVarArgs(env, NULL, mid, ap);
+ JValue result(InvokeWithVarArgs(env, NULL, mid, ap));
va_end(ap);
return result.j;
}
@@ -1782,7 +1782,7 @@
ScopedJniThreadState ts(env);
va_list ap;
va_start(ap, mid);
- JValue result = InvokeWithVarArgs(env, NULL, mid, ap);
+ JValue result(InvokeWithVarArgs(env, NULL, mid, ap));
va_end(ap);
return result.f;
}
@@ -1801,7 +1801,7 @@
ScopedJniThreadState ts(env);
va_list ap;
va_start(ap, mid);
- JValue result = InvokeWithVarArgs(env, NULL, mid, ap);
+ JValue result(InvokeWithVarArgs(env, NULL, mid, ap));
va_end(ap);
return result.d;
}
diff --git a/src/object.cc b/src/object.cc
index cd6b51f..f863a39 100644
--- a/src/object.cc
+++ b/src/object.cc
@@ -248,36 +248,43 @@
Set64(object, j);
}
+union Bits {
+ jdouble d;
+ jfloat f;
+ jint i;
+ jlong j;
+};
+
float Field::GetFloat(const Object* object) const {
DCHECK_EQ(Primitive::kPrimFloat, FieldHelper(this).GetTypeAsPrimitiveType())
<< PrettyField(this);
- JValue float_bits;
- float_bits.i = Get32(object);
- return float_bits.f;
+ Bits bits;
+ bits.i = Get32(object);
+ return bits.f;
}
void Field::SetFloat(Object* object, float f) const {
DCHECK_EQ(Primitive::kPrimFloat, FieldHelper(this).GetTypeAsPrimitiveType())
<< PrettyField(this);
- JValue float_bits;
- float_bits.f = f;
- Set32(object, float_bits.i);
+ Bits bits;
+ bits.f = f;
+ Set32(object, bits.i);
}
double Field::GetDouble(const Object* object) const {
DCHECK_EQ(Primitive::kPrimDouble, FieldHelper(this).GetTypeAsPrimitiveType())
<< PrettyField(this);
- JValue double_bits;
- double_bits.j = Get64(object);
- return double_bits.d;
+ Bits bits;
+ bits.j = Get64(object);
+ return bits.d;
}
void Field::SetDouble(Object* object, double d) const {
DCHECK_EQ(Primitive::kPrimDouble, FieldHelper(this).GetTypeAsPrimitiveType())
<< PrettyField(this);
- JValue double_bits;
- double_bits.d = d;
- Set64(object, double_bits.j);
+ Bits bits;
+ bits.d = d;
+ Set64(object, bits.j);
}
Object* Field::GetObject(const Object* object) const {
diff --git a/src/object.h b/src/object.h
index 3ece535..7413bf9 100644
--- a/src/object.h
+++ b/src/object.h
@@ -60,6 +60,9 @@
typedef PrimitiveArray<int16_t> ShortArray;
union JValue {
+ // We default initialize JValue instances to all-zeros.
+ JValue() : j(0) {}
+
uint8_t z;
int8_t b;
uint16_t c;
diff --git a/src/reflection.cc b/src/reflection.cc
index f7c275c..aba930c 100644
--- a/src/reflection.cc
+++ b/src/reflection.cc
@@ -101,7 +101,7 @@
}
// Invoke the method.
- JValue value = InvokeWithJValues(env, javaReceiver, mid, args.get());
+ JValue value(InvokeWithJValues(env, javaReceiver, mid, args.get()));
// Wrap any exception with "Ljava/lang/reflect/InvocationTargetException;" and return early.
if (self->IsExceptionPending()) {
@@ -301,7 +301,7 @@
return false;
}
- JValue boxed_value = { 0 };
+ JValue boxed_value;
std::string src_descriptor(ClassHelper(o->GetClass()).GetDescriptor());
Class* src_class = NULL;
ClassLinker* class_linker = Runtime::Current()->GetClassLinker();