src/share/vm/ci/ciStreams.hpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
*** old/src/share/vm/ci/ciStreams.hpp Tue Oct 8 14:00:26 2013
--- new/src/share/vm/ci/ciStreams.hpp Tue Oct 8 14:00:26 2013
*** 276,289 ****
--- 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