comparison src/share/vm/ci/ciStreams.hpp @ 12883:f50418dfb1b7

Merge
author iveresov
date Sun, 13 Oct 2013 13:22:24 -0700
parents d13d7aba8c12
children de6a9e811145
comparison
equal deleted inserted replaced
12844:7c26dced065e 12883:f50418dfb1b7
275 // 275 //
276 // The class is used to iterate over the elements of a method signature. 276 // The class is used to iterate over the elements of a method signature.
277 class ciSignatureStream : public StackObj { 277 class ciSignatureStream : public StackObj {
278 private: 278 private:
279 ciSignature* _sig; 279 ciSignature* _sig;
280 int _pos; 280 int _pos;
281 // holder is a method's holder
282 ciKlass* _holder;
281 public: 283 public:
282 ciSignatureStream(ciSignature* signature) { 284 ciSignatureStream(ciSignature* signature, ciKlass* holder = NULL) {
283 _sig = signature; 285 _sig = signature;
284 _pos = 0; 286 _pos = 0;
287 _holder = holder;
285 } 288 }
286 289
287 bool at_return_type() { return _pos == _sig->count(); } 290 bool at_return_type() { return _pos == _sig->count(); }
288 291
289 bool is_done() { return _pos > _sig->count(); } 292 bool is_done() { return _pos > _sig->count(); }
298 if (at_return_type()) { 301 if (at_return_type()) {
299 return _sig->return_type(); 302 return _sig->return_type();
300 } else { 303 } else {
301 return _sig->type_at(_pos); 304 return _sig->type_at(_pos);
302 } 305 }
306 }
307
308 // next klass in the signature
309 ciKlass* next_klass() {
310 ciKlass* sig_k;
311 if (_holder != NULL) {
312 sig_k = _holder;
313 _holder = NULL;
314 } else {
315 while (!type()->is_klass()) {
316 next();
317 }
318 assert(!at_return_type(), "passed end of signature");
319 sig_k = type()->as_klass();
320 next();
321 }
322 return sig_k;
303 } 323 }
304 }; 324 };
305 325
306 326
307 // ciExceptionHandlerStream 327 // ciExceptionHandlerStream