1.1 --- a/src/share/vm/ci/ciMethod.hpp Thu Apr 21 00:25:40 2011 -0700 1.2 +++ b/src/share/vm/ci/ciMethod.hpp Mon Apr 25 16:25:58 2011 -0700 1.3 @@ -127,7 +127,24 @@ 1.4 ciSignature* signature() const { return _signature; } 1.5 ciType* return_type() const { return _signature->return_type(); } 1.6 int arg_size_no_receiver() const { return _signature->size(); } 1.7 - int arg_size() const { return _signature->size() + (_flags.is_static() ? 0 : 1); } 1.8 + // Can only be used on loaded ciMethods 1.9 + int arg_size() const { 1.10 + check_is_loaded(); 1.11 + return _signature->size() + (_flags.is_static() ? 0 : 1); 1.12 + } 1.13 + // Report the number of elements on stack when invoking this method. 1.14 + // This is different than the regular arg_size because invokdynamic 1.15 + // has an implicit receiver. 1.16 + int invoke_arg_size(Bytecodes::Code code) const { 1.17 + int arg_size = _signature->size(); 1.18 + // Add a receiver argument, maybe: 1.19 + if (code != Bytecodes::_invokestatic && 1.20 + code != Bytecodes::_invokedynamic) { 1.21 + arg_size++; 1.22 + } 1.23 + return arg_size; 1.24 + } 1.25 + 1.26 1.27 // Method code and related information. 1.28 address code() { if (_code == NULL) load_code(); return _code; }