77 // These bits must not conflict with any other field-related access flags |
77 // These bits must not conflict with any other field-related access flags |
78 // (e.g., ACC_ENUM). |
78 // (e.g., ACC_ENUM). |
79 // Note that the class-related ACC_ANNOTATION bit conflicts with these flags. |
79 // Note that the class-related ACC_ANNOTATION bit conflicts with these flags. |
80 JVM_ACC_FIELD_ACCESS_WATCHED = 0x00002000, // field access is watched by JVMTI |
80 JVM_ACC_FIELD_ACCESS_WATCHED = 0x00002000, // field access is watched by JVMTI |
81 JVM_ACC_FIELD_MODIFICATION_WATCHED = 0x00008000, // field modification is watched by JVMTI |
81 JVM_ACC_FIELD_MODIFICATION_WATCHED = 0x00008000, // field modification is watched by JVMTI |
|
82 JVM_ACC_FIELD_INTERNAL = 0x00000400, // internal field, same as JVM_ACC_ABSTRACT |
|
83 |
|
84 JVM_ACC_FIELD_INTERNAL_FLAGS = JVM_ACC_FIELD_ACCESS_WATCHED | |
|
85 JVM_ACC_FIELD_MODIFICATION_WATCHED | |
|
86 JVM_ACC_FIELD_INTERNAL, |
82 |
87 |
83 // flags accepted by set_field_flags() |
88 // flags accepted by set_field_flags() |
84 JVM_ACC_FIELD_FLAGS = 0x00008000 | JVM_ACC_WRITTEN_FLAGS |
89 JVM_ACC_FIELD_FLAGS = JVM_RECOGNIZED_FIELD_MODIFIERS | JVM_ACC_FIELD_INTERNAL_FLAGS |
85 |
90 |
86 }; |
91 }; |
87 |
92 |
88 |
93 |
89 class AccessFlags VALUE_OBJ_CLASS_SPEC { |
94 class AccessFlags VALUE_OBJ_CLASS_SPEC { |
148 |
153 |
149 // field flags |
154 // field flags |
150 bool is_field_access_watched() const { return (_flags & JVM_ACC_FIELD_ACCESS_WATCHED) != 0; } |
155 bool is_field_access_watched() const { return (_flags & JVM_ACC_FIELD_ACCESS_WATCHED) != 0; } |
151 bool is_field_modification_watched() const |
156 bool is_field_modification_watched() const |
152 { return (_flags & JVM_ACC_FIELD_MODIFICATION_WATCHED) != 0; } |
157 { return (_flags & JVM_ACC_FIELD_MODIFICATION_WATCHED) != 0; } |
|
158 bool is_internal() const { return (_flags & JVM_ACC_FIELD_INTERNAL) != 0; } |
153 |
159 |
154 // get .class file flags |
160 // get .class file flags |
155 jint get_flags () const { return (_flags & JVM_ACC_WRITTEN_FLAGS); } |
161 jint get_flags () const { return (_flags & JVM_ACC_WRITTEN_FLAGS); } |
156 |
162 |
157 // Initialization |
163 // Initialization |
158 void add_promoted_flags(jint flags) { _flags |= (flags & JVM_ACC_PROMOTED_FLAGS); } |
164 void add_promoted_flags(jint flags) { _flags |= (flags & JVM_ACC_PROMOTED_FLAGS); } |
159 void set_field_flags(jint flags) { _flags = (flags & JVM_ACC_FIELD_FLAGS); } |
165 void set_field_flags(jint flags) { |
|
166 assert((flags & JVM_ACC_FIELD_FLAGS) == flags, "only recognized flags"); |
|
167 _flags = (flags & JVM_ACC_FIELD_FLAGS); |
|
168 } |
160 void set_flags(jint flags) { _flags = (flags & JVM_ACC_WRITTEN_FLAGS); } |
169 void set_flags(jint flags) { _flags = (flags & JVM_ACC_WRITTEN_FLAGS); } |
161 |
170 |
162 void set_queued_for_compilation() { atomic_set_bits(JVM_ACC_QUEUED); } |
171 void set_queued_for_compilation() { atomic_set_bits(JVM_ACC_QUEUED); } |
163 void clear_queued_for_compilation() { atomic_clear_bits(JVM_ACC_QUEUED); } |
172 void clear_queued_for_compilation() { atomic_clear_bits(JVM_ACC_QUEUED); } |
164 |
173 |
216 atomic_clear_bits(JVM_ACC_FIELD_MODIFICATION_WATCHED); |
225 atomic_clear_bits(JVM_ACC_FIELD_MODIFICATION_WATCHED); |
217 } |
226 } |
218 } |
227 } |
219 |
228 |
220 // Conversion |
229 // Conversion |
221 jshort as_short() { return (jshort)_flags; } |
230 jshort as_short() const { return (jshort)_flags; } |
222 jint as_int() { return _flags; } |
231 jint as_int() const { return _flags; } |
223 |
232 |
224 inline friend AccessFlags accessFlags_from(jint flags); |
233 inline friend AccessFlags accessFlags_from(jint flags); |
225 |
234 |
226 // Printing/debugging |
235 // Printing/debugging |
227 void print_on(outputStream* st) const PRODUCT_RETURN; |
236 void print_on(outputStream* st) const PRODUCT_RETURN; |