992 // |
992 // |
993 // Note: We use a JVM_ENTRY macro to define each of these, for this is the way |
993 // Note: We use a JVM_ENTRY macro to define each of these, for this is the way |
994 // that intrinsic (non-JNI) native methods are defined in HotSpot. |
994 // that intrinsic (non-JNI) native methods are defined in HotSpot. |
995 // |
995 // |
996 |
996 |
997 JVM_ENTRY(jint, MHN_getConstant(JNIEnv *env, jobject igcls, jint which)) { |
|
998 switch (which) { |
|
999 case MethodHandles::GC_COUNT_GWT: |
|
1000 #ifdef COMPILER2 |
|
1001 return true; |
|
1002 #else |
|
1003 return false; |
|
1004 #endif |
|
1005 } |
|
1006 return 0; |
|
1007 } |
|
1008 JVM_END |
|
1009 |
|
1010 #ifndef PRODUCT |
997 #ifndef PRODUCT |
1011 #define EACH_NAMED_CON(template, requirement) \ |
998 #define EACH_NAMED_CON(template, requirement) \ |
1012 template(MethodHandles,GC_COUNT_GWT) \ |
|
1013 template(java_lang_invoke_MemberName,MN_IS_METHOD) \ |
999 template(java_lang_invoke_MemberName,MN_IS_METHOD) \ |
1014 template(java_lang_invoke_MemberName,MN_IS_CONSTRUCTOR) \ |
1000 template(java_lang_invoke_MemberName,MN_IS_CONSTRUCTOR) \ |
1015 template(java_lang_invoke_MemberName,MN_IS_FIELD) \ |
1001 template(java_lang_invoke_MemberName,MN_IS_FIELD) \ |
1016 template(java_lang_invoke_MemberName,MN_IS_TYPE) \ |
1002 template(java_lang_invoke_MemberName,MN_IS_TYPE) \ |
1017 template(java_lang_invoke_MemberName,MN_CALLER_SENSITIVE) \ |
1003 template(java_lang_invoke_MemberName,MN_CALLER_SENSITIVE) \ |
1018 template(java_lang_invoke_MemberName,MN_SEARCH_SUPERCLASSES) \ |
1004 template(java_lang_invoke_MemberName,MN_SEARCH_SUPERCLASSES) \ |
1019 template(java_lang_invoke_MemberName,MN_SEARCH_INTERFACES) \ |
1005 template(java_lang_invoke_MemberName,MN_SEARCH_INTERFACES) \ |
1020 template(java_lang_invoke_MemberName,MN_REFERENCE_KIND_SHIFT) \ |
1006 template(java_lang_invoke_MemberName,MN_REFERENCE_KIND_SHIFT) \ |
1021 template(java_lang_invoke_MemberName,MN_REFERENCE_KIND_MASK) \ |
1007 template(java_lang_invoke_MemberName,MN_REFERENCE_KIND_MASK) \ |
1022 template(MethodHandles,GC_LAMBDA_SUPPORT) \ |
|
1023 /*end*/ |
1008 /*end*/ |
1024 |
1009 |
1025 #define IGNORE_REQ(req_expr) /* req_expr */ |
1010 #define IGNORE_REQ(req_expr) /* req_expr */ |
1026 #define ONE_PLUS(scope,value) 1+ |
1011 #define ONE_PLUS(scope,value) 1+ |
1027 static const int con_value_count = EACH_NAMED_CON(ONE_PLUS, IGNORE_REQ) 0; |
1012 static const int con_value_count = EACH_NAMED_CON(ONE_PLUS, IGNORE_REQ) 0; |
1311 // These are the native methods on java.lang.invoke.MethodHandleNatives. |
1296 // These are the native methods on java.lang.invoke.MethodHandleNatives. |
1312 static JNINativeMethod MHN_methods[] = { |
1297 static JNINativeMethod MHN_methods[] = { |
1313 {CC"init", CC"("MEM""OBJ")V", FN_PTR(MHN_init_Mem)}, |
1298 {CC"init", CC"("MEM""OBJ")V", FN_PTR(MHN_init_Mem)}, |
1314 {CC"expand", CC"("MEM")V", FN_PTR(MHN_expand_Mem)}, |
1299 {CC"expand", CC"("MEM")V", FN_PTR(MHN_expand_Mem)}, |
1315 {CC"resolve", CC"("MEM""CLS")"MEM, FN_PTR(MHN_resolve_Mem)}, |
1300 {CC"resolve", CC"("MEM""CLS")"MEM, FN_PTR(MHN_resolve_Mem)}, |
1316 {CC"getConstant", CC"(I)I", FN_PTR(MHN_getConstant)}, |
|
1317 // static native int getNamedCon(int which, Object[] name) |
1301 // static native int getNamedCon(int which, Object[] name) |
1318 {CC"getNamedCon", CC"(I["OBJ")I", FN_PTR(MHN_getNamedCon)}, |
1302 {CC"getNamedCon", CC"(I["OBJ")I", FN_PTR(MHN_getNamedCon)}, |
1319 // static native int getMembers(Class<?> defc, String matchName, String matchSig, |
1303 // static native int getMembers(Class<?> defc, String matchName, String matchSig, |
1320 // int matchFlags, Class<?> caller, int skip, MemberName[] results); |
1304 // int matchFlags, Class<?> caller, int skip, MemberName[] results); |
1321 {CC"getMembers", CC"("CLS""STRG""STRG"I"CLS"I["MEM")I", FN_PTR(MHN_getMembers)}, |
1305 {CC"getMembers", CC"("CLS""STRG""STRG"I"CLS"I["MEM")I", FN_PTR(MHN_getMembers)}, |