# HG changeset patch # User Doug Simon # Date 1367884752 -7200 # Node ID d5c2b20e9d73f9694ca5b620846b9c74335d0e32 # Parent aa8f3fc0a9a978b1f00329890ce91148daf789fe# Parent 4172233f32fde863eddd105ee5e1f342014f3820 Merge. diff -r aa8f3fc0a9a9 -r d5c2b20e9d73 src/share/vm/graal/graalCompilerToVM.cpp --- a/src/share/vm/graal/graalCompilerToVM.cpp Tue May 07 01:58:11 2013 +0200 +++ b/src/share/vm/graal/graalCompilerToVM.cpp Tue May 07 01:59:12 2013 +0200 @@ -391,35 +391,52 @@ oop result = NULL; constantTag tag = cp->tag_at(index); - if (tag.is_int()) { - result = VMToCompiler::createConstant(Kind::Int(), cp->int_at(index), CHECK_0); - } else if (tag.is_long()) { - result = VMToCompiler::createConstant(Kind::Long(), cp->long_at(index), CHECK_0); - } else if (tag.is_float()) { - result = VMToCompiler::createConstantFloat(cp->float_at(index), CHECK_0); - } else if (tag.is_double()) { - result = VMToCompiler::createConstantDouble(cp->double_at(index), CHECK_0); - } else if (tag.is_string()) { - oop string = NULL; - if (cp->is_pseudo_string_at(index)) { - int obj_index = cp->cp_to_object_index(index); - string = cp->pseudo_string_at(index, obj_index); - } else { - string = cp->string_at(index, THREAD); - if (HAS_PENDING_EXCEPTION) { - CLEAR_PENDING_EXCEPTION; - // TODO: Gracefully exit compilation. - fatal("out of memory during compilation!"); - return NULL; - } + + switch (tag.value()) { + case JVM_CONSTANT_Integer: + result = VMToCompiler::createConstant(Kind::Int(), cp->int_at(index), CHECK_NULL); + break; + + case JVM_CONSTANT_Long: + result = VMToCompiler::createConstant(Kind::Long(), cp->long_at(index), CHECK_NULL); + break; + + case JVM_CONSTANT_Float: + result = VMToCompiler::createConstantFloat(cp->float_at(index), CHECK_NULL); + break; + + case JVM_CONSTANT_Double: + result = VMToCompiler::createConstantDouble(cp->double_at(index), CHECK_NULL); + break; + + case JVM_CONSTANT_Class: + case JVM_CONSTANT_UnresolvedClass: + case JVM_CONSTANT_UnresolvedClassInError: + { + Handle type = GraalCompiler::get_JavaType(cp, index, cp->pool_holder(), CHECK_NULL); + result = type(); + break; } - result = VMToCompiler::createConstantObject(string, CHECK_0); - } else if (tag.is_klass() || tag.is_unresolved_klass()) { - Handle type = GraalCompiler::get_JavaType(cp, index, cp->pool_holder(), CHECK_NULL); - result = type(); - } else { - tty->print("unknown constant pool tag (%s) at cpi %d in %s: ", tag.internal_name(), index, cp->pool_holder()->name()->as_C_string()); - ShouldNotReachHere(); + + case JVM_CONSTANT_String: + { + oop result_oop = cp->resolve_possibly_cached_constant_at(index, CHECK_NULL); + result = VMToCompiler::createConstantObject(result_oop, CHECK_NULL); + break; + } + + case JVM_CONSTANT_MethodHandle: + case JVM_CONSTANT_MethodHandleInError: + case JVM_CONSTANT_MethodType: + case JVM_CONSTANT_MethodTypeInError: + { + oop result_oop = cp->resolve_constant_at(index, CHECK_NULL); + result = VMToCompiler::createConstantObject(result_oop, CHECK_NULL); + break; + } + + default: + fatal(err_msg_res("unknown constant pool tag %s at cpi %d in %s", tag.internal_name(), index, cp->pool_holder()->name()->as_C_string())); } return JNIHandles::make_local(THREAD, result); @@ -616,9 +633,6 @@ return id; } -BasicType basicTypes[] = { T_BOOLEAN, T_BYTE, T_SHORT, T_CHAR, T_INT, T_FLOAT, T_LONG, T_DOUBLE, T_OBJECT }; -int basicTypeCount = sizeof(basicTypes) / sizeof(BasicType); - C2V_ENTRY(void, initializeConfiguration, (JNIEnv *env, jobject, jobject config)) #define set_boolean(name, value) do { env->SetBooleanField(config, getFieldID(env, config, name, "Z"), value); } while (0)