Mercurial > hg > truffle
comparison src/share/vm/interpreter/linkResolver.cpp @ 10128:41ed397cc0cd
8006267: InterfaceMethod_ref should allow invokestatic and invokespecial
Summary: Lambda changes; spec 0.6.2 - Allow static invokestatic and invokespecial calls to InterfaceMethod_ref
Reviewed-by: dholmes, acorn
author | bharadwaj |
---|---|
date | Thu, 18 Apr 2013 08:05:35 -0700 |
parents | d79859ff6535 |
children | b2e698d2276c |
comparison
equal
deleted
inserted
replaced
10126:63e31ce40bdb | 10128:41ed397cc0cd |
---|---|
1012 THROW_MSG(vmSymbols::java_lang_AbstractMethodError(), | 1012 THROW_MSG(vmSymbols::java_lang_AbstractMethodError(), |
1013 Method::name_and_sig_as_C_string(recv_klass(), | 1013 Method::name_and_sig_as_C_string(recv_klass(), |
1014 resolved_method->name(), | 1014 resolved_method->name(), |
1015 resolved_method->signature())); | 1015 resolved_method->signature())); |
1016 } | 1016 } |
1017 // check if public | 1017 // check access |
1018 if (!sel_method->is_public()) { | 1018 if (sel_method->method_holder()->is_interface()) { |
1019 ResourceMark rm(THREAD); | 1019 // Method holder is an interface. Throw Illegal Access Error if sel_method |
1020 THROW_MSG(vmSymbols::java_lang_IllegalAccessError(), | 1020 // is neither public nor private. |
1021 Method::name_and_sig_as_C_string(recv_klass(), | 1021 if (!(sel_method->is_public() || sel_method->is_private())) { |
1022 sel_method->name(), | 1022 ResourceMark rm(THREAD); |
1023 sel_method->signature())); | 1023 THROW_MSG(vmSymbols::java_lang_IllegalAccessError(), |
1024 Method::name_and_sig_as_C_string(recv_klass(), | |
1025 sel_method->name(), | |
1026 sel_method->signature())); | |
1027 } | |
1028 } | |
1029 else { | |
1030 // Method holder is a class. Throw Illegal Access Error if sel_method | |
1031 // is not public. | |
1032 if (!sel_method->is_public()) { | |
1033 ResourceMark rm(THREAD); | |
1034 THROW_MSG(vmSymbols::java_lang_IllegalAccessError(), | |
1035 Method::name_and_sig_as_C_string(recv_klass(), | |
1036 sel_method->name(), | |
1037 sel_method->signature())); | |
1038 } | |
1024 } | 1039 } |
1025 // check if abstract | 1040 // check if abstract |
1026 if (check_null_and_abstract && sel_method->is_abstract()) { | 1041 if (check_null_and_abstract && sel_method->is_abstract()) { |
1027 ResourceMark rm(THREAD); | 1042 ResourceMark rm(THREAD); |
1028 THROW_MSG(vmSymbols::java_lang_AbstractMethodError(), | 1043 THROW_MSG(vmSymbols::java_lang_AbstractMethodError(), |