roman_version
944
945 if ((match_flags & IS_TYPE) != 0) {
946 // NYI, and Core Reflection works quite well for this query
947 }
948
949 if ((match_flags & IS_FIELD) != 0) {
950 InstanceKlass* ik = InstanceKlass::cast(k);
951 for (FieldStream st(ik, local_only, !search_intfc); !st.eos(); st.next()) {
952 if (name != NULL && st.name() != name)
953 continue;
954 if (sig != NULL && st.signature() != sig)
955 continue;
956 // passed the filters
957 if (rskip > 0) {
958 --rskip;
959 } else if (rfill < rlimit) {
960 Handle result(thread, results->obj_at(rfill++));
961 if (!java_lang_invoke_MemberName::is_instance(result()))
962 return -99; // caller bug!
963 oop saved = MethodHandles::init_field_MemberName(result, st.field_descriptor());
964 if (saved != result())
965 results->obj_at_put(rfill-1, saved); // show saved instance to user
966 } else if (++overflow >= overflow_limit) {
967 match_flags = 0; break; // got tired of looking at overflow
968 }
969 }
970 }
971
972 if ((match_flags & (IS_METHOD | IS_CONSTRUCTOR)) != 0) {
973 // watch out for these guys:
974 Symbol* init_name = vmSymbols::object_initializer_name();
975 Symbol* clinit_name = vmSymbols::class_initializer_name();
976 if (name == clinit_name) clinit_name = NULL; // hack for exposing <clinit>
977 bool negate_name_test = false;
978 // fix name so that it captures the intention of IS_CONSTRUCTOR
979 if (!(match_flags & IS_METHOD)) {
980 // constructors only
981 if (name == NULL) {
982 name = init_name;
983 } else if (name != init_name) {
|
944
945 if ((match_flags & IS_TYPE) != 0) {
946 // NYI, and Core Reflection works quite well for this query
947 }
948
949 if ((match_flags & IS_FIELD) != 0) {
950 InstanceKlass* ik = InstanceKlass::cast(k);
951 for (FieldStream st(ik, local_only, !search_intfc); !st.eos(); st.next()) {
952 if (name != NULL && st.name() != name)
953 continue;
954 if (sig != NULL && st.signature() != sig)
955 continue;
956 // passed the filters
957 if (rskip > 0) {
958 --rskip;
959 } else if (rfill < rlimit) {
960 Handle result(thread, results->obj_at(rfill++));
961 if (!java_lang_invoke_MemberName::is_instance(result()))
962 return -99; // caller bug!
963 oop saved = MethodHandles::init_field_MemberName(result, st.field_descriptor());
964 if (!oopDesc::equals(saved, result()))
965 results->obj_at_put(rfill-1, saved); // show saved instance to user
966 } else if (++overflow >= overflow_limit) {
967 match_flags = 0; break; // got tired of looking at overflow
968 }
969 }
970 }
971
972 if ((match_flags & (IS_METHOD | IS_CONSTRUCTOR)) != 0) {
973 // watch out for these guys:
974 Symbol* init_name = vmSymbols::object_initializer_name();
975 Symbol* clinit_name = vmSymbols::class_initializer_name();
976 if (name == clinit_name) clinit_name = NULL; // hack for exposing <clinit>
977 bool negate_name_test = false;
978 // fix name so that it captures the intention of IS_CONSTRUCTOR
979 if (!(match_flags & IS_METHOD)) {
980 // constructors only
981 if (name == NULL) {
982 name = init_name;
983 } else if (name != init_name) {
|
996 }
997 InstanceKlass* ik = InstanceKlass::cast(k);
998 for (MethodStream st(ik, local_only, !search_intfc); !st.eos(); st.next()) {
999 Method* m = st.method();
1000 Symbol* m_name = m->name();
1001 if (m_name == clinit_name)
1002 continue;
1003 if (name != NULL && ((m_name != name) ^ negate_name_test))
1004 continue;
1005 if (sig != NULL && m->signature() != sig)
1006 continue;
1007 // passed the filters
1008 if (rskip > 0) {
1009 --rskip;
1010 } else if (rfill < rlimit) {
1011 Handle result(thread, results->obj_at(rfill++));
1012 if (!java_lang_invoke_MemberName::is_instance(result()))
1013 return -99; // caller bug!
1014 CallInfo info(m, NULL, CHECK_0);
1015 oop saved = MethodHandles::init_method_MemberName(result, info);
1016 if (saved != result())
1017 results->obj_at_put(rfill-1, saved); // show saved instance to user
1018 } else if (++overflow >= overflow_limit) {
1019 match_flags = 0; break; // got tired of looking at overflow
1020 }
1021 }
1022 }
1023
1024 // return number of elements we at leasted wanted to initialize
1025 return rfill + overflow;
1026 }
1027
1028 // Is it safe to remove stale entries from a dependency list?
1029 static bool safe_to_expunge() {
1030 // Since parallel GC threads can concurrently iterate over a dependency
1031 // list during safepoint, it is safe to remove entries only when
1032 // CodeCache lock is held.
1033 return CodeCache_lock->owned_by_self();
1034 }
1035
|
996 }
997 InstanceKlass* ik = InstanceKlass::cast(k);
998 for (MethodStream st(ik, local_only, !search_intfc); !st.eos(); st.next()) {
999 Method* m = st.method();
1000 Symbol* m_name = m->name();
1001 if (m_name == clinit_name)
1002 continue;
1003 if (name != NULL && ((m_name != name) ^ negate_name_test))
1004 continue;
1005 if (sig != NULL && m->signature() != sig)
1006 continue;
1007 // passed the filters
1008 if (rskip > 0) {
1009 --rskip;
1010 } else if (rfill < rlimit) {
1011 Handle result(thread, results->obj_at(rfill++));
1012 if (!java_lang_invoke_MemberName::is_instance(result()))
1013 return -99; // caller bug!
1014 CallInfo info(m, NULL, CHECK_0);
1015 oop saved = MethodHandles::init_method_MemberName(result, info);
1016 if (!oopDesc::equals(saved, result()))
1017 results->obj_at_put(rfill-1, saved); // show saved instance to user
1018 } else if (++overflow >= overflow_limit) {
1019 match_flags = 0; break; // got tired of looking at overflow
1020 }
1021 }
1022 }
1023
1024 // return number of elements we at leasted wanted to initialize
1025 return rfill + overflow;
1026 }
1027
1028 // Is it safe to remove stale entries from a dependency list?
1029 static bool safe_to_expunge() {
1030 // Since parallel GC threads can concurrently iterate over a dependency
1031 // list during safepoint, it is safe to remove entries only when
1032 // CodeCache lock is held.
1033 return CodeCache_lock->owned_by_self();
1034 }
1035
|