979 case Bytecodes::_invokespecial: |
979 case Bytecodes::_invokespecial: |
980 case Bytecodes::_invokestatic: |
980 case Bytecodes::_invokestatic: |
981 case Bytecodes::_invokedynamic: |
981 case Bytecodes::_invokedynamic: |
982 case Bytecodes::_invokeinterface: |
982 case Bytecodes::_invokeinterface: |
983 { |
983 { |
984 bool is_static = (depth == 0); |
|
985 bool ignore; |
984 bool ignore; |
986 ciBytecodeStream iter(method()); |
985 ciBytecodeStream iter(method()); |
987 iter.reset_to_bci(bci()); |
986 iter.reset_to_bci(bci()); |
988 iter.next(); |
987 iter.next(); |
989 ciMethod* method = iter.get_method(ignore); |
988 ciMethod* method = iter.get_method(ignore); |
990 inputs = method->arg_size_no_receiver(); |
989 inputs = method->arg_size_no_receiver(); |
991 if (!is_static) inputs += 1; |
990 // Add a receiver argument, maybe: |
|
991 if (code != Bytecodes::_invokestatic && |
|
992 code != Bytecodes::_invokedynamic) |
|
993 inputs += 1; |
|
994 // (Do not use ciMethod::arg_size(), because |
|
995 // it might be an unloaded method, which doesn't |
|
996 // know whether it is static or not.) |
992 int size = method->return_type()->size(); |
997 int size = method->return_type()->size(); |
993 depth = size - inputs; |
998 depth = size - inputs; |
994 } |
999 } |
995 break; |
1000 break; |
996 |
1001 |