src/hotspot/share/prims/methodHandles.cpp
branchdatagramsocketimpl-branch
changeset 58678 9cf78a70fa4f
parent 55005 9b70ebd131b4
child 58679 9c3209ff7550
equal deleted inserted replaced
58677:13588c901957 58678:9cf78a70fa4f
    39 #include "oops/objArrayKlass.hpp"
    39 #include "oops/objArrayKlass.hpp"
    40 #include "oops/objArrayOop.inline.hpp"
    40 #include "oops/objArrayOop.inline.hpp"
    41 #include "oops/oop.inline.hpp"
    41 #include "oops/oop.inline.hpp"
    42 #include "oops/typeArrayOop.inline.hpp"
    42 #include "oops/typeArrayOop.inline.hpp"
    43 #include "prims/methodHandles.hpp"
    43 #include "prims/methodHandles.hpp"
    44 #include "runtime/compilationPolicy.hpp"
       
    45 #include "runtime/deoptimization.hpp"
    44 #include "runtime/deoptimization.hpp"
    46 #include "runtime/fieldDescriptor.inline.hpp"
    45 #include "runtime/fieldDescriptor.inline.hpp"
    47 #include "runtime/handles.inline.hpp"
    46 #include "runtime/handles.inline.hpp"
    48 #include "runtime/interfaceSupport.inline.hpp"
    47 #include "runtime/interfaceSupport.inline.hpp"
    49 #include "runtime/javaCalls.hpp"
    48 #include "runtime/javaCalls.hpp"
   571   } else if (sig->char_at(0) != '(') {
   570   } else if (sig->char_at(0) != '(') {
   572     BasicType bt = char2type(sig->char_at(0));
   571     BasicType bt = char2type(sig->char_at(0));
   573     if (is_subword_type(bt)) {
   572     if (is_subword_type(bt)) {
   574       bsig = vmSymbols::int_signature();
   573       bsig = vmSymbols::int_signature();
   575     } else {
   574     } else {
   576       assert(bt == T_OBJECT || bt == T_ARRAY, "is_basic_type_signature was false");
   575       assert(is_reference_type(bt), "is_basic_type_signature was false");
   577       bsig = vmSymbols::object_signature();
   576       bsig = vmSymbols::object_signature();
   578     }
   577     }
   579   } else {
   578   } else {
   580     ResourceMark rm;
   579     ResourceMark rm;
   581     stringStream buffer(128);
   580     stringStream buffer(128);
   590         buffer.put(')');
   589         buffer.put(')');
   591       }
   590       }
   592       if (arg_pos == keep_arg_pos) {
   591       if (arg_pos == keep_arg_pos) {
   593         buffer.write((char*) ss.raw_bytes(),
   592         buffer.write((char*) ss.raw_bytes(),
   594                      (int)   ss.raw_length());
   593                      (int)   ss.raw_length());
   595       } else if (bt == T_OBJECT || bt == T_ARRAY) {
   594       } else if (is_reference_type(bt)) {
   596         buffer.write(OBJ_SIG, OBJ_SIG_LEN);
   595         buffer.write(OBJ_SIG, OBJ_SIG_LEN);
   597       } else {
   596       } else {
   598         if (is_subword_type(bt))
   597         if (is_subword_type(bt))
   599           bt = T_INT;
   598           bt = T_INT;
   600         buffer.put(type2char(bt));
   599         buffer.put(type2char(bt));
  1002       } else if (rfill < rlimit) {
  1001       } else if (rfill < rlimit) {
  1003         Handle result(thread, results->obj_at(rfill++));
  1002         Handle result(thread, results->obj_at(rfill++));
  1004         if (!java_lang_invoke_MemberName::is_instance(result()))
  1003         if (!java_lang_invoke_MemberName::is_instance(result()))
  1005           return -99;  // caller bug!
  1004           return -99;  // caller bug!
  1006         oop saved = MethodHandles::init_field_MemberName(result, st.field_descriptor());
  1005         oop saved = MethodHandles::init_field_MemberName(result, st.field_descriptor());
  1007         if (!oopDesc::equals(saved, result()))
  1006         if (saved != result())
  1008           results->obj_at_put(rfill-1, saved);  // show saved instance to user
  1007           results->obj_at_put(rfill-1, saved);  // show saved instance to user
  1009       } else if (++overflow >= overflow_limit) {
  1008       } else if (++overflow >= overflow_limit) {
  1010         match_flags = 0; break; // got tired of looking at overflow
  1009         match_flags = 0; break; // got tired of looking at overflow
  1011       }
  1010       }
  1012     }
  1011     }
  1054         Handle result(thread, results->obj_at(rfill++));
  1053         Handle result(thread, results->obj_at(rfill++));
  1055         if (!java_lang_invoke_MemberName::is_instance(result()))
  1054         if (!java_lang_invoke_MemberName::is_instance(result()))
  1056           return -99;  // caller bug!
  1055           return -99;  // caller bug!
  1057         CallInfo info(m, NULL, CHECK_0);
  1056         CallInfo info(m, NULL, CHECK_0);
  1058         oop saved = MethodHandles::init_method_MemberName(result, info);
  1057         oop saved = MethodHandles::init_method_MemberName(result, info);
  1059         if (!oopDesc::equals(saved, result()))
  1058         if (saved != result())
  1060           results->obj_at_put(rfill-1, saved);  // show saved instance to user
  1059           results->obj_at_put(rfill-1, saved);  // show saved instance to user
  1061       } else if (++overflow >= overflow_limit) {
  1060       } else if (++overflow >= overflow_limit) {
  1062         match_flags = 0; break; // got tired of looking at overflow
  1061         match_flags = 0; break; // got tired of looking at overflow
  1063       }
  1062       }
  1064     }
  1063     }