Mercurial > hg > truffle
comparison src/share/vm/ci/ciSignature.cpp @ 4001:5eb9169b1a14
7092712: JSR 292: unloaded invokedynamic call sites can lead to a crash with signature types not on BCP
Reviewed-by: jrose, never
author | twisti |
---|---|
date | Wed, 12 Oct 2011 21:00:13 -0700 |
parents | ddd894528dbc |
children | f6b0eb4e44cf |
comparison
equal
deleted
inserted
replaced
4000:0abefdb54d21 | 4001:5eb9169b1a14 |
---|---|
78 _size = size; | 78 _size = size; |
79 _count = count; | 79 _count = count; |
80 } | 80 } |
81 | 81 |
82 // ------------------------------------------------------------------ | 82 // ------------------------------------------------------------------ |
83 // ciSignature::return_ciType | 83 // ciSignature::return_type |
84 // | 84 // |
85 // What is the return type of this signature? | 85 // What is the return type of this signature? |
86 ciType* ciSignature::return_type() const { | 86 ciType* ciSignature::return_type() const { |
87 return _types->at(_count); | 87 return _types->at(_count); |
88 } | 88 } |
89 | 89 |
90 // ------------------------------------------------------------------ | 90 // ------------------------------------------------------------------ |
91 // ciSignature::ciType_at | 91 // ciSignature::type_at |
92 // | 92 // |
93 // What is the type of the index'th element of this | 93 // What is the type of the index'th element of this |
94 // signature? | 94 // signature? |
95 ciType* ciSignature::type_at(int index) const { | 95 ciType* ciSignature::type_at(int index) const { |
96 assert(index < _count, "out of bounds"); | 96 assert(index < _count, "out of bounds"); |
97 // The first _klasses element holds the return klass. | 97 // The first _klasses element holds the return klass. |
98 return _types->at(index); | 98 return _types->at(index); |
99 } | |
100 | |
101 // ------------------------------------------------------------------ | |
102 // ciSignature::equals | |
103 // | |
104 // Compare this signature to another one. Signatures with different | |
105 // accessing classes but with signature-types resolved to the same | |
106 // types are defined to be equal. | |
107 bool ciSignature::equals(ciSignature* that) { | |
108 // Compare signature | |
109 if (!this->as_symbol()->equals(that->as_symbol())) return false; | |
110 // Compare all types of the arguments | |
111 for (int i = 0; i < _count; i++) { | |
112 if (this->type_at(i) != that->type_at(i)) return false; | |
113 } | |
114 // Compare the return type | |
115 if (this->return_type() != that->return_type()) return false; | |
116 return true; | |
99 } | 117 } |
100 | 118 |
101 // ------------------------------------------------------------------ | 119 // ------------------------------------------------------------------ |
102 // ciSignature::print_signature | 120 // ciSignature::print_signature |
103 void ciSignature::print_signature() { | 121 void ciSignature::print_signature() { |