77 _generic_signature_slot = length + skipped_generic_signature_slots; |
77 _generic_signature_slot = length + skipped_generic_signature_slots; |
78 assert(_generic_signature_slot <= _fields->length(), ""); |
78 assert(_generic_signature_slot <= _fields->length(), ""); |
79 return num_fields; |
79 return num_fields; |
80 } |
80 } |
81 |
81 |
82 FieldStreamBase(Array<u2>* fields, const constantPoolHandle& constants, int start, int limit) { |
82 inline FieldStreamBase(Array<u2>* fields, ConstantPool* constants, int start, int limit); |
83 _fields = fields; |
83 |
84 _constants = constants; |
84 inline FieldStreamBase(Array<u2>* fields, ConstantPool* constants); |
85 _index = start; |
85 public: |
86 int num_fields = init_generic_signature_start_slot(); |
86 inline FieldStreamBase(InstanceKlass* klass); |
87 if (limit < start) { |
|
88 _limit = num_fields; |
|
89 } else { |
|
90 _limit = limit; |
|
91 } |
|
92 } |
|
93 |
|
94 FieldStreamBase(Array<u2>* fields, const constantPoolHandle& constants) { |
|
95 _fields = fields; |
|
96 _constants = constants; |
|
97 _index = 0; |
|
98 _limit = init_generic_signature_start_slot(); |
|
99 } |
|
100 |
|
101 public: |
|
102 FieldStreamBase(InstanceKlass* klass) { |
|
103 _fields = klass->fields(); |
|
104 _constants = klass->constants(); |
|
105 _index = 0; |
|
106 _limit = klass->java_fields_count(); |
|
107 init_generic_signature_start_slot(); |
|
108 assert(klass == field_holder(), ""); |
|
109 } |
|
110 |
87 |
111 // accessors |
88 // accessors |
112 int index() const { return _index; } |
89 int index() const { return _index; } |
113 |
90 |
114 void next() { |
91 void next() { |
134 void set_access_flags(AccessFlags flags) const { |
111 void set_access_flags(AccessFlags flags) const { |
135 set_access_flags(flags.as_short()); |
112 set_access_flags(flags.as_short()); |
136 } |
113 } |
137 |
114 |
138 Symbol* name() const { |
115 Symbol* name() const { |
139 return field()->name(_constants); |
116 return field()->name(_constants()); |
140 } |
117 } |
141 |
118 |
142 Symbol* signature() const { |
119 Symbol* signature() const { |
143 return field()->signature(_constants); |
120 return field()->signature(_constants()); |
144 } |
121 } |
145 |
122 |
146 Symbol* generic_signature() const { |
123 Symbol* generic_signature() const { |
147 if (access_flags().field_has_generic_signature()) { |
124 if (access_flags().field_has_generic_signature()) { |
148 assert(_generic_signature_slot < _fields->length(), "out of bounds"); |
125 assert(_generic_signature_slot < _fields->length(), "out of bounds"); |
240 }; |
217 }; |
241 |
218 |
242 |
219 |
243 class AllFieldStream : public FieldStreamBase { |
220 class AllFieldStream : public FieldStreamBase { |
244 public: |
221 public: |
245 AllFieldStream(Array<u2>* fields, const constantPoolHandle& constants): FieldStreamBase(fields, constants) {} |
222 AllFieldStream(Array<u2>* fields, ConstantPool* constants): FieldStreamBase(fields, constants) {} |
246 AllFieldStream(InstanceKlass* k): FieldStreamBase(k->fields(), k->constants()) {} |
223 AllFieldStream(InstanceKlass* k): FieldStreamBase(k->fields(), k->constants()) {} |
247 }; |
224 }; |
248 |
225 |
249 #endif // SHARE_OOPS_FIELDSTREAMS_HPP |
226 #endif // SHARE_OOPS_FIELDSTREAMS_HPP |