src/share/vm/ci/ciStreams.hpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Cdiff src/share/vm/ci/ciStreams.hpp

src/share/vm/ci/ciStreams.hpp

Print this page
rev 5349 : 8023657: New type profiling points: arguments to call
Summary: x86 interpreter and c1 type profiling for arguments at calls
Reviewed-by:

*** 276,289 **** // The class is used to iterate over the elements of a method signature. class ciSignatureStream : public StackObj { private: ciSignature* _sig; int _pos; public: ! ciSignatureStream(ciSignature* signature) { _sig = signature; _pos = 0; } bool at_return_type() { return _pos == _sig->count(); } bool is_done() { return _pos > _sig->count(); } --- 276,292 ---- // The class is used to iterate over the elements of a method signature. class ciSignatureStream : public StackObj { private: ciSignature* _sig; int _pos; + // holder is a method's holder + ciKlass* _holder; public: ! ciSignatureStream(ciSignature* signature, ciKlass* holder = NULL) { _sig = signature; _pos = 0; + _holder = holder; } bool at_return_type() { return _pos == _sig->count(); } bool is_done() { return _pos > _sig->count(); }
*** 299,308 **** --- 302,328 ---- return _sig->return_type(); } else { return _sig->type_at(_pos); } } + + // next klass in the signature + ciKlass* next_klass() { + ciKlass* sig_k; + if (_holder != NULL) { + sig_k = _holder; + _holder = NULL; + } else { + while (!type()->is_klass()) { + next(); + } + assert(!at_return_type(), "passed end of signature"); + sig_k = type()->as_klass(); + next(); + } + return sig_k; + } }; // ciExceptionHandlerStream //
src/share/vm/ci/ciStreams.hpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File