src/share/vm/classfile/classFileParser.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File 6817525 Cdiff src/share/vm/classfile/classFileParser.cpp

src/share/vm/classfile/classFileParser.cpp

Print this page

        

*** 150,160 **** if (_major_version < Verifier::INVOKEDYNAMIC_MAJOR_VERSION) { classfile_parse_error( "Class file version does not support constant tag %u in class file %s", tag, CHECK); } ! if (!EnableMethodHandles) { classfile_parse_error( "This JVM does not support constant tag %u in class file %s", tag, CHECK); } if (tag == JVM_CONSTANT_MethodHandle) { --- 150,160 ---- if (_major_version < Verifier::INVOKEDYNAMIC_MAJOR_VERSION) { classfile_parse_error( "Class file version does not support constant tag %u in class file %s", tag, CHECK); } ! if (!EnableInvokeDynamic) { classfile_parse_error( "This JVM does not support constant tag %u in class file %s", tag, CHECK); } if (tag == JVM_CONSTANT_MethodHandle) {
*** 258,268 **** // Before storing the symbol, make sure it's legal if (_need_verify) { verify_legal_utf8((unsigned char*)utf8_buffer, utf8_length, CHECK); } ! if (AnonymousClasses && has_cp_patch_at(index)) { Handle patch = clear_cp_patch_at(index); guarantee_property(java_lang_String::is_instance(patch()), "Illegal utf8 patch at %d in class file %s", index, CHECK); char* str = java_lang_String::as_utf8_string(patch()); --- 258,268 ---- // Before storing the symbol, make sure it's legal if (_need_verify) { verify_legal_utf8((unsigned char*)utf8_buffer, utf8_length, CHECK); } ! if (EnableInvokeDynamic && has_cp_patch_at(index)) { Handle patch = clear_cp_patch_at(index); guarantee_property(java_lang_String::is_instance(patch()), "Illegal utf8 patch at %d in class file %s", index, CHECK); char* str = java_lang_String::as_utf8_string(patch());
*** 441,451 **** case JVM_CONSTANT_MethodHandle : { int ref_index = cp->method_handle_index_at(index); check_property( valid_cp_range(ref_index, length) && ! EnableMethodHandles, "Invalid constant pool index %u in class file %s", ref_index, CHECK_(nullHandle)); constantTag tag = cp->tag_at(ref_index); int ref_kind = cp->method_handle_ref_kind_at(index); switch (ref_kind) { --- 441,451 ---- case JVM_CONSTANT_MethodHandle : { int ref_index = cp->method_handle_index_at(index); check_property( valid_cp_range(ref_index, length) && ! EnableInvokeDynamic, "Invalid constant pool index %u in class file %s", ref_index, CHECK_(nullHandle)); constantTag tag = cp->tag_at(ref_index); int ref_kind = cp->method_handle_ref_kind_at(index); switch (ref_kind) {
*** 485,495 **** { int ref_index = cp->method_type_index_at(index); check_property( valid_cp_range(ref_index, length) && cp->tag_at(ref_index).is_utf8() && ! EnableMethodHandles, "Invalid constant pool index %u in class file %s", ref_index, CHECK_(nullHandle)); } break; case JVM_CONSTANT_InvokeDynamicTrans : --- 485,495 ---- { int ref_index = cp->method_type_index_at(index); check_property( valid_cp_range(ref_index, length) && cp->tag_at(ref_index).is_utf8() && ! EnableInvokeDynamic, "Invalid constant pool index %u in class file %s", ref_index, CHECK_(nullHandle)); } break; case JVM_CONSTANT_InvokeDynamicTrans :
*** 520,530 **** } // end of switch } // end of for if (_cp_patches != NULL) { // need to treat this_class specially... ! assert(AnonymousClasses, ""); int this_class_index; { cfs->guarantee_more(8, CHECK_(nullHandle)); // flags, this_class, super_class, infs_len u1* mark = cfs->current(); u2 flags = cfs->get_u2_fast(); --- 520,530 ---- } // end of switch } // end of for if (_cp_patches != NULL) { // need to treat this_class specially... ! assert(EnableInvokeDynamic, ""); int this_class_index; { cfs->guarantee_more(8, CHECK_(nullHandle)); // flags, this_class, super_class, infs_len u1* mark = cfs->current(); u2 flags = cfs->get_u2_fast();
*** 675,685 **** return cp; } void ClassFileParser::patch_constant_pool(constantPoolHandle cp, int index, Handle patch, TRAPS) { ! assert(AnonymousClasses, ""); BasicType patch_type = T_VOID; switch (cp->tag_at(index).value()) { case JVM_CONSTANT_UnresolvedClass : // Patching a class means pre-resolving it. --- 675,685 ---- return cp; } void ClassFileParser::patch_constant_pool(constantPoolHandle cp, int index, Handle patch, TRAPS) { ! assert(EnableInvokeDynamic, ""); BasicType patch_type = T_VOID; switch (cp->tag_at(index).value()) { case JVM_CONSTANT_UnresolvedClass : // Patching a class means pre-resolving it.
*** 2101,2111 **** signature == vmSymbols::void_method_signature() && m->is_vanilla_constructor()) { _has_vanilla_constructor = true; } ! if (EnableMethodHandles && (m->is_method_handle_invoke() || m->is_method_handle_adapter())) { THROW_MSG_(vmSymbols::java_lang_VirtualMachineError(), "Method handle invokers must be defined internally to the VM", nullHandle); } --- 2101,2111 ---- signature == vmSymbols::void_method_signature() && m->is_vanilla_constructor()) { _has_vanilla_constructor = true; } ! if (EnableInvokeDynamic && (m->is_method_handle_invoke() || m->is_method_handle_adapter())) { THROW_MSG_(vmSymbols::java_lang_VirtualMachineError(), "Method handle invokers must be defined internally to the VM", nullHandle); }
*** 2769,2779 **** // Add fake fields for java.lang.invoke.MethodHandle instances // // This is not particularly nice, but since there is no way to express // a native wordSize field in Java, we must do it at this level. ! if (!EnableMethodHandles) return; int word_sig_index = 0; const int cp_size = cp->length(); for (int index = 1; index < cp_size; index++) { if (cp->tag_at(index).is_utf8() && --- 2769,2779 ---- // Add fake fields for java.lang.invoke.MethodHandle instances // // This is not particularly nice, but since there is no way to express // a native wordSize field in Java, we must do it at this level. ! if (!EnableInvokeDynamic) return; int word_sig_index = 0; const int cp_size = cp->length(); for (int index = 1; index < cp_size; index++) { if (cp->tag_at(index).is_utf8() &&
*** 3189,3207 **** first_nonstatic_field_offset = instanceOopDesc::base_offset_in_bytes() + nonstatic_field_size * heapOopSize; next_nonstatic_field_offset = first_nonstatic_field_offset; // adjust the vmentry field declaration in java.lang.invoke.MethodHandle ! if (EnableMethodHandles && class_name == vmSymbols::java_lang_invoke_MethodHandle() && class_loader.is_null()) { java_lang_invoke_MethodHandle_fix_pre(cp, fields, &fac, CHECK_(nullHandle)); } if (AllowTransitionalJSR292 && ! EnableMethodHandles && class_name == vmSymbols::java_dyn_MethodHandle() && class_loader.is_null()) { java_lang_invoke_MethodHandle_fix_pre(cp, fields, &fac, CHECK_(nullHandle)); } if (AllowTransitionalJSR292 && ! EnableMethodHandles && class_name == vmSymbols::sun_dyn_MethodHandleImpl() && class_loader.is_null()) { // allow vmentry field in MethodHandleImpl also java_lang_invoke_MethodHandle_fix_pre(cp, fields, &fac, CHECK_(nullHandle)); } // Add a fake "discovered" field if it is not present --- 3189,3207 ---- first_nonstatic_field_offset = instanceOopDesc::base_offset_in_bytes() + nonstatic_field_size * heapOopSize; next_nonstatic_field_offset = first_nonstatic_field_offset; // adjust the vmentry field declaration in java.lang.invoke.MethodHandle ! if (EnableInvokeDynamic && class_name == vmSymbols::java_lang_invoke_MethodHandle() && class_loader.is_null()) { java_lang_invoke_MethodHandle_fix_pre(cp, fields, &fac, CHECK_(nullHandle)); } if (AllowTransitionalJSR292 && ! EnableInvokeDynamic && class_name == vmSymbols::java_dyn_MethodHandle() && class_loader.is_null()) { java_lang_invoke_MethodHandle_fix_pre(cp, fields, &fac, CHECK_(nullHandle)); } if (AllowTransitionalJSR292 && ! EnableInvokeDynamic && class_name == vmSymbols::sun_dyn_MethodHandleImpl() && class_loader.is_null()) { // allow vmentry field in MethodHandleImpl also java_lang_invoke_MethodHandle_fix_pre(cp, fields, &fac, CHECK_(nullHandle)); } // Add a fake "discovered" field if it is not present
src/share/vm/classfile/classFileParser.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File