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() {