2829 verify_error(ErrorContext::bad_type(bci,
2830 current_frame->stack_top_ctx(),
2831 TypeOrigin::implicit(current_type())),
2832 "Bad access to protected data in invokevirtual");
2833 return;
2834 }
2835 }
2836 }
2837 }
2838 }
2839 } else {
2840 assert(opcode == Bytecodes::_invokeinterface, "Unexpected opcode encountered");
2841 current_frame->pop_stack(ref_class_type, CHECK_VERIFY(this));
2842 }
2843 }
2844 }
2845 // Push the result type.
2846 if (sig_stream.type() != T_VOID) {
2847 if (method_name == vmSymbols::object_initializer_name()) {
2848 // <init> method must have a void return type
2849 /* Unreachable? Class file parser verifies that methods with '<' have
2850 * void return */
2851 verify_error(ErrorContext::bad_code(bci),
2852 "Return type must be void in <init> method");
2853 return;
2854 }
2855 VerificationType return_type[2];
2856 int n = change_sig_to_verificationType(
2857 &sig_stream, return_type, CHECK_VERIFY(this));
2858 for (int i = 0; i < n; i++) {
2859 current_frame->push_stack(return_type[i], CHECK_VERIFY(this)); // push types backwards
2860 }
2861 }
2862 }
2863
2864 VerificationType ClassVerifier::get_newarray_type(
2865 u2 index, u2 bci, TRAPS) {
2866 const char* from_bt[] = {
2867 NULL, NULL, NULL, NULL, "[Z", "[C", "[F", "[D", "[B", "[S", "[I", "[J",
2868 };
2869 if (index < T_BOOLEAN || index > T_LONG) {
|
2829 verify_error(ErrorContext::bad_type(bci,
2830 current_frame->stack_top_ctx(),
2831 TypeOrigin::implicit(current_type())),
2832 "Bad access to protected data in invokevirtual");
2833 return;
2834 }
2835 }
2836 }
2837 }
2838 }
2839 } else {
2840 assert(opcode == Bytecodes::_invokeinterface, "Unexpected opcode encountered");
2841 current_frame->pop_stack(ref_class_type, CHECK_VERIFY(this));
2842 }
2843 }
2844 }
2845 // Push the result type.
2846 if (sig_stream.type() != T_VOID) {
2847 if (method_name == vmSymbols::object_initializer_name()) {
2848 // <init> method must have a void return type
2849 /* Unreachable? Class file parser verifies that <init> methods have
2850 * void return */
2851 verify_error(ErrorContext::bad_code(bci),
2852 "Return type must be void in <init> method");
2853 return;
2854 }
2855 VerificationType return_type[2];
2856 int n = change_sig_to_verificationType(
2857 &sig_stream, return_type, CHECK_VERIFY(this));
2858 for (int i = 0; i < n; i++) {
2859 current_frame->push_stack(return_type[i], CHECK_VERIFY(this)); // push types backwards
2860 }
2861 }
2862 }
2863
2864 VerificationType ClassVerifier::get_newarray_type(
2865 u2 index, u2 bci, TRAPS) {
2866 const char* from_bt[] = {
2867 NULL, NULL, NULL, NULL, "[Z", "[C", "[F", "[D", "[B", "[S", "[I", "[J",
2868 };
2869 if (index < T_BOOLEAN || index > T_LONG) {
|