< prev index next >

src/hotspot/share/jvmci/jvmciCompilerToVM.cpp

Print this page

        

*** 537,570 **** resolved_klass = SystemDictionary::resolve_or_null(class_name, class_loader, protection_domain, CHECK_0); if (resolved_klass == NULL) { JVMCI_THROW_MSG_NULL(ClassNotFoundException, str); } } else { ! if (class_name->char_at(0) == JVM_SIGNATURE_CLASS && ! class_name->char_at(class_name->utf8_length()-1) == JVM_SIGNATURE_ENDCLASS) { // This is a name from a signature. Strip off the trimmings. // Call recursive to keep scope of strippedsym. ! TempNewSymbol strippedsym = SymbolTable::new_symbol(class_name->as_utf8()+1, ! class_name->utf8_length()-2); resolved_klass = SystemDictionary::find(strippedsym, class_loader, protection_domain, CHECK_0); ! } else if (FieldType::is_array(class_name)) { ! FieldArrayInfo fd; ! // dimension and object_key in FieldArrayInfo are assigned as a side-effect ! // of this call ! BasicType t = FieldType::get_array_info(class_name, fd, CHECK_0); ! if (t == T_OBJECT) { ! TempNewSymbol strippedsym = SymbolTable::new_symbol(class_name->as_utf8()+1+fd.dimension(), ! class_name->utf8_length()-2-fd.dimension()); resolved_klass = SystemDictionary::find(strippedsym, class_loader, protection_domain, CHECK_0); if (!resolved_klass.is_null()) { ! resolved_klass = resolved_klass->array_klass(fd.dimension(), CHECK_0); } } else { ! resolved_klass = TypeArrayKlass::cast(Universe::typeArrayKlassObj(t))->array_klass(fd.dimension(), CHECK_0); } } else { resolved_klass = SystemDictionary::find(class_name, class_loader, protection_domain, CHECK_0); } } --- 537,565 ---- resolved_klass = SystemDictionary::resolve_or_null(class_name, class_loader, protection_domain, CHECK_0); if (resolved_klass == NULL) { JVMCI_THROW_MSG_NULL(ClassNotFoundException, str); } } else { ! if (Signature::has_envelope(class_name)) { // This is a name from a signature. Strip off the trimmings. // Call recursive to keep scope of strippedsym. ! TempNewSymbol strippedsym = Signature::strip_envelope(class_name); resolved_klass = SystemDictionary::find(strippedsym, class_loader, protection_domain, CHECK_0); ! } else if (Signature::is_array(class_name)) { ! SignatureStream ss(class_name, false); ! int ndim = ss.skip_array_prefix(); ! if (ss.type() == T_OBJECT) { ! Symbol* strippedsym = ss.as_symbol(); resolved_klass = SystemDictionary::find(strippedsym, class_loader, protection_domain, CHECK_0); if (!resolved_klass.is_null()) { ! resolved_klass = resolved_klass->array_klass(ndim, CHECK_0); } } else { ! resolved_klass = TypeArrayKlass::cast(Universe::typeArrayKlassObj(ss.type()))->array_klass(ndim, CHECK_0); } } else { resolved_klass = SystemDictionary::find(class_name, class_loader, protection_domain, CHECK_0); } }
*** 1034,1055 **** methodHandle mh(THREAD, nm->method()); Symbol* signature = mh->signature(); JavaCallArguments jca(mh->size_of_parameters()); JavaArgumentUnboxer jap(signature, &jca, (arrayOop) JNIHandles::resolve(args), mh->is_static()); ! JavaValue result(jap.get_ret_type()); jca.set_alternative_target(nm); JavaCalls::call(&result, mh, &jca, CHECK_NULL); ! if (jap.get_ret_type() == T_VOID) { return NULL; ! } else if (is_reference_type(jap.get_ret_type())) { return JNIHandles::make_local((oop) result.get_jobject()); } else { jvalue *value = (jvalue *) result.get_value_addr(); // Narrow the value down if required (Important on big endian machines) ! switch (jap.get_ret_type()) { case T_BOOLEAN: value->z = (jboolean) value->i; break; case T_BYTE: value->b = (jbyte) value->i; --- 1029,1050 ---- methodHandle mh(THREAD, nm->method()); Symbol* signature = mh->signature(); JavaCallArguments jca(mh->size_of_parameters()); JavaArgumentUnboxer jap(signature, &jca, (arrayOop) JNIHandles::resolve(args), mh->is_static()); ! JavaValue result(jap.return_type()); jca.set_alternative_target(nm); JavaCalls::call(&result, mh, &jca, CHECK_NULL); ! if (jap.return_type() == T_VOID) { return NULL; ! } else if (is_reference_type(jap.return_type())) { return JNIHandles::make_local((oop) result.get_jobject()); } else { jvalue *value = (jvalue *) result.get_value_addr(); // Narrow the value down if required (Important on big endian machines) ! switch (jap.return_type()) { case T_BOOLEAN: value->z = (jboolean) value->i; break; case T_BYTE: value->b = (jbyte) value->i;
*** 1061,1071 **** value->s = (jshort) value->i; break; default: break; } ! JVMCIObject o = JVMCIENV->create_box(jap.get_ret_type(), value, JVMCI_CHECK_NULL); return JVMCIENV->get_jobject(o); } C2V_END C2V_VMENTRY_NULL(jlongArray, getLineNumberTable, (JNIEnv* env, jobject, jobject jvmci_method)) --- 1056,1066 ---- value->s = (jshort) value->i; break; default: break; } ! JVMCIObject o = JVMCIENV->create_box(jap.return_type(), value, JVMCI_CHECK_NULL); return JVMCIENV->get_jobject(o); } C2V_END C2V_VMENTRY_NULL(jlongArray, getLineNumberTable, (JNIEnv* env, jobject, jobject jvmci_method))
< prev index next >