src/share/vm/ci/ciMethod.hpp

changeset 2812
548597e74aa4
parent 2806
2a23b1b5a0a8
child 2988
2c359f27615c
     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; }

mercurial