153 bool is_stable() const { return (_flags & JVM_ACC_FIELD_STABLE) != 0; }
154 bool field_has_generic_signature() const
155 { return (_flags & JVM_ACC_FIELD_HAS_GENERIC_SIGNATURE) != 0; }
156
157 // get .class file flags
158 jint get_flags () const { return (_flags & JVM_ACC_WRITTEN_FLAGS); }
159
160 // Initialization
161 void add_promoted_flags(jint flags) { _flags |= (flags & JVM_ACC_PROMOTED_FLAGS); }
162 void set_field_flags(jint flags) {
163 assert((flags & JVM_ACC_FIELD_FLAGS) == flags, "only recognized flags");
164 _flags = (flags & JVM_ACC_FIELD_FLAGS);
165 }
166 void set_flags(jint flags) { _flags = (flags & JVM_ACC_WRITTEN_FLAGS); }
167
168 void set_queued_for_compilation() { atomic_set_bits(JVM_ACC_QUEUED); }
169 void clear_queued_for_compilation() { atomic_clear_bits(JVM_ACC_QUEUED); }
170
171 // Atomic update of flags
172 void atomic_set_bits(jint bits);
173 void atomic_clear_bits(jint bits);
174
175 private:
176 friend class Method;
177 friend class Klass;
178 friend class ClassFileParser;
179 // the functions below should only be called on the _access_flags inst var directly,
180 // otherwise they are just changing a copy of the flags
181
182 // attribute flags
183 void set_is_synthetic() { atomic_set_bits(JVM_ACC_SYNTHETIC); }
184
185 // Method* flags
186 void set_monitor_matching() { atomic_set_bits(JVM_ACC_MONITOR_MATCH); }
187 void set_has_monitor_bytecodes() { atomic_set_bits(JVM_ACC_HAS_MONITOR_BYTECODES); }
188 void set_has_loops() { atomic_set_bits(JVM_ACC_HAS_LOOPS); }
189 void set_loops_flag_init() { atomic_set_bits(JVM_ACC_LOOPS_FLAG_INIT); }
190 void set_not_c1_compilable() { atomic_set_bits(JVM_ACC_NOT_C1_COMPILABLE); }
191 void set_not_c2_compilable() { atomic_set_bits(JVM_ACC_NOT_C2_COMPILABLE); }
192 void set_not_c2_osr_compilable() { atomic_set_bits(JVM_ACC_NOT_C2_OSR_COMPILABLE); }
213 {
214 if (value) {
215 atomic_set_bits(JVM_ACC_FIELD_ACCESS_WATCHED);
216 } else {
217 atomic_clear_bits(JVM_ACC_FIELD_ACCESS_WATCHED);
218 }
219 }
220 void set_is_field_modification_watched(const bool value)
221 {
222 if (value) {
223 atomic_set_bits(JVM_ACC_FIELD_MODIFICATION_WATCHED);
224 } else {
225 atomic_clear_bits(JVM_ACC_FIELD_MODIFICATION_WATCHED);
226 }
227 }
228 void set_field_has_generic_signature()
229 {
230 atomic_set_bits(JVM_ACC_FIELD_HAS_GENERIC_SIGNATURE);
231 }
232
233 void set_on_stack(const bool value)
234 {
235 if (value) {
236 atomic_set_bits(JVM_ACC_ON_STACK);
237 } else {
238 atomic_clear_bits(JVM_ACC_ON_STACK);
239 }
240 }
241 // Conversion
242 jshort as_short() const { return (jshort)_flags; }
243 jint as_int() const { return _flags; }
244
245 inline friend AccessFlags accessFlags_from(jint flags);
246
247 // Printing/debugging
248 #if INCLUDE_JVMTI
249 void print_on(outputStream* st) const;
250 #else
251 void print_on(outputStream* st) const PRODUCT_RETURN;
252 #endif
253 };
254
255 inline AccessFlags accessFlags_from(jint flags) {
256 AccessFlags af;
257 af._flags = flags;
258 return af;
|
153 bool is_stable() const { return (_flags & JVM_ACC_FIELD_STABLE) != 0; }
154 bool field_has_generic_signature() const
155 { return (_flags & JVM_ACC_FIELD_HAS_GENERIC_SIGNATURE) != 0; }
156
157 // get .class file flags
158 jint get_flags () const { return (_flags & JVM_ACC_WRITTEN_FLAGS); }
159
160 // Initialization
161 void add_promoted_flags(jint flags) { _flags |= (flags & JVM_ACC_PROMOTED_FLAGS); }
162 void set_field_flags(jint flags) {
163 assert((flags & JVM_ACC_FIELD_FLAGS) == flags, "only recognized flags");
164 _flags = (flags & JVM_ACC_FIELD_FLAGS);
165 }
166 void set_flags(jint flags) { _flags = (flags & JVM_ACC_WRITTEN_FLAGS); }
167
168 void set_queued_for_compilation() { atomic_set_bits(JVM_ACC_QUEUED); }
169 void clear_queued_for_compilation() { atomic_clear_bits(JVM_ACC_QUEUED); }
170
171 // Atomic update of flags
172 void atomic_set_bits(jint bits);
173 bool atomic_set_one_bit(jint bit);
174 void atomic_clear_bits(jint bits);
175
176 private:
177 friend class Method;
178 friend class Klass;
179 friend class ClassFileParser;
180 // the functions below should only be called on the _access_flags inst var directly,
181 // otherwise they are just changing a copy of the flags
182
183 // attribute flags
184 void set_is_synthetic() { atomic_set_bits(JVM_ACC_SYNTHETIC); }
185
186 // Method* flags
187 void set_monitor_matching() { atomic_set_bits(JVM_ACC_MONITOR_MATCH); }
188 void set_has_monitor_bytecodes() { atomic_set_bits(JVM_ACC_HAS_MONITOR_BYTECODES); }
189 void set_has_loops() { atomic_set_bits(JVM_ACC_HAS_LOOPS); }
190 void set_loops_flag_init() { atomic_set_bits(JVM_ACC_LOOPS_FLAG_INIT); }
191 void set_not_c1_compilable() { atomic_set_bits(JVM_ACC_NOT_C1_COMPILABLE); }
192 void set_not_c2_compilable() { atomic_set_bits(JVM_ACC_NOT_C2_COMPILABLE); }
193 void set_not_c2_osr_compilable() { atomic_set_bits(JVM_ACC_NOT_C2_OSR_COMPILABLE); }
214 {
215 if (value) {
216 atomic_set_bits(JVM_ACC_FIELD_ACCESS_WATCHED);
217 } else {
218 atomic_clear_bits(JVM_ACC_FIELD_ACCESS_WATCHED);
219 }
220 }
221 void set_is_field_modification_watched(const bool value)
222 {
223 if (value) {
224 atomic_set_bits(JVM_ACC_FIELD_MODIFICATION_WATCHED);
225 } else {
226 atomic_clear_bits(JVM_ACC_FIELD_MODIFICATION_WATCHED);
227 }
228 }
229 void set_field_has_generic_signature()
230 {
231 atomic_set_bits(JVM_ACC_FIELD_HAS_GENERIC_SIGNATURE);
232 }
233
234 bool set_on_stack(const bool value)
235 {
236 if (value) {
237 return atomic_set_one_bit(JVM_ACC_ON_STACK);
238 } else {
239 atomic_clear_bits(JVM_ACC_ON_STACK);
240 return true; // Ignored
241 }
242 }
243 // Conversion
244 jshort as_short() const { return (jshort)_flags; }
245 jint as_int() const { return _flags; }
246
247 inline friend AccessFlags accessFlags_from(jint flags);
248
249 // Printing/debugging
250 #if INCLUDE_JVMTI
251 void print_on(outputStream* st) const;
252 #else
253 void print_on(outputStream* st) const PRODUCT_RETURN;
254 #endif
255 };
256
257 inline AccessFlags accessFlags_from(jint flags) {
258 AccessFlags af;
259 af._flags = flags;
260 return af;
|