Mercurial > hg > truffle
annotate src/share/vm/utilities/accessFlags.hpp @ 17716:cdb71841f4bc
6498581: ThreadInterruptTest3 produces wrong output on Windows
Summary: There is race condition between os::interrupt and os::is_interrupted on Windows. In JVM_Sleep(Thread.sleep), check if thread gets interrupted, it may see interrupted but not really interrupted so cause spurious waking up (early return from sleep). Fix by checking if interrupt event really gets set thus prevent false return. For intrinsic of _isInterrupted, on Windows, go fastpath only on bit not set.
Reviewed-by: acorn, kvn
Contributed-by: david.holmes@oracle.com, yumin.qi@oracle.com
author | minqi |
---|---|
date | Wed, 26 Feb 2014 15:20:41 -0800 |
parents | edb5ab0f3fe5 |
children | b12a2a9b05ca |
rev | line source |
---|---|
0 | 1 /* |
8021
8d9fc28831cc
7182152: Instrumentation hot swap test incorrect monitor count
dcubed
parents:
6800
diff
changeset
|
2 * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. |
0 | 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * | |
5 * This code is free software; you can redistribute it and/or modify it | |
6 * under the terms of the GNU General Public License version 2 only, as | |
7 * published by the Free Software Foundation. | |
8 * | |
9 * This code is distributed in the hope that it will be useful, but WITHOUT | |
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
12 * version 2 for more details (a copy is included in the LICENSE file that | |
13 * accompanied this code). | |
14 * | |
15 * You should have received a copy of the GNU General Public License version | |
16 * 2 along with this work; if not, write to the Free Software Foundation, | |
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
18 * | |
1552
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
710
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
710
diff
changeset
|
20 * or visit www.oracle.com if you need additional information or have any |
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
710
diff
changeset
|
21 * questions. |
0 | 22 * |
23 */ | |
24 | |
1972 | 25 #ifndef SHARE_VM_UTILITIES_ACCESSFLAGS_HPP |
26 #define SHARE_VM_UTILITIES_ACCESSFLAGS_HPP | |
27 | |
28 #include "prims/jvm.h" | |
29 #include "utilities/top.hpp" | |
30 | |
0 | 31 // AccessFlags is an abstraction over Java access flags. |
32 | |
33 | |
34 enum { | |
35 // See jvm.h for shared JVM_ACC_XXX access flags | |
36 | |
37 // HotSpot-specific access flags | |
38 | |
39 // flags actually put in .class file | |
40 JVM_ACC_WRITTEN_FLAGS = 0x00007FFF, | |
41 | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
42 // Method* flags |
0 | 43 JVM_ACC_MONITOR_MATCH = 0x10000000, // True if we know that monitorenter/monitorexit bytecodes match |
44 JVM_ACC_HAS_MONITOR_BYTECODES = 0x20000000, // Method contains monitorenter/monitorexit bytecodes | |
45 JVM_ACC_HAS_LOOPS = 0x40000000, // Method has loops | |
46 JVM_ACC_LOOPS_FLAG_INIT = (int)0x80000000,// The loop flag has been initialized | |
47 JVM_ACC_QUEUED = 0x01000000, // Queued for compilation | |
1783 | 48 JVM_ACC_NOT_C2_COMPILABLE = 0x02000000, |
49 JVM_ACC_NOT_C1_COMPILABLE = 0x04000000, | |
6800
9191895df19d
7200001: failed C1 OSR compile doesn't get recompiled with C2
twisti
parents:
6725
diff
changeset
|
50 JVM_ACC_NOT_C2_OSR_COMPILABLE = 0x08000000, |
0 | 51 JVM_ACC_HAS_LINE_NUMBER_TABLE = 0x00100000, |
52 JVM_ACC_HAS_CHECKED_EXCEPTIONS = 0x00400000, | |
53 JVM_ACC_HAS_JSRS = 0x00800000, | |
54 JVM_ACC_IS_OLD = 0x00010000, // RedefineClasses() has replaced this method | |
55 JVM_ACC_IS_OBSOLETE = 0x00020000, // RedefineClasses() has made method obsolete | |
56 JVM_ACC_IS_PREFIXED_NATIVE = 0x00040000, // JVMTI has prefixed this native method | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
57 JVM_ACC_ON_STACK = 0x00080000, // RedefinedClasses() is used on the stack |
1783 | 58 |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
59 // Klass* flags |
0 | 60 JVM_ACC_HAS_MIRANDA_METHODS = 0x10000000, // True if this class has miranda methods in it's vtable |
61 JVM_ACC_HAS_VANILLA_CONSTRUCTOR = 0x20000000, // True if klass has a vanilla default constructor | |
62 JVM_ACC_HAS_FINALIZER = 0x40000000, // True if klass has a non-empty finalize() method | |
63 JVM_ACC_IS_CLONEABLE = (int)0x80000000,// True if klass supports the Clonable interface | |
64 JVM_ACC_HAS_FINAL_METHOD = 0x01000000, // True if klass has final method | |
65 | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
66 // Klass* and Method* flags |
0 | 67 JVM_ACC_HAS_LOCAL_VARIABLE_TABLE= 0x00200000, |
68 | |
69 JVM_ACC_PROMOTED_FLAGS = 0x00200000, // flags promoted from methods to the holding klass | |
70 | |
71 // field flags | |
72 // Note: these flags must be defined in the low order 16 bits because | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
73 // InstanceKlass only stores a ushort worth of information from the |
0 | 74 // AccessFlags value. |
75 // These bits must not conflict with any other field-related access flags | |
76 // (e.g., ACC_ENUM). | |
77 // Note that the class-related ACC_ANNOTATION bit conflicts with these flags. | |
78 JVM_ACC_FIELD_ACCESS_WATCHED = 0x00002000, // field access is watched by JVMTI | |
79 JVM_ACC_FIELD_MODIFICATION_WATCHED = 0x00008000, // field modification is watched by JVMTI | |
3938 | 80 JVM_ACC_FIELD_INTERNAL = 0x00000400, // internal field, same as JVM_ACC_ABSTRACT |
12190
edb5ab0f3fe5
8001107: @Stable annotation for constant folding of lazily evaluated variables
vlivanov
parents:
9080
diff
changeset
|
81 JVM_ACC_FIELD_STABLE = 0x00000020, // @Stable field, same as JVM_ACC_SYNCHRONIZED |
6100
71afdabfd05b
7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents:
3938
diff
changeset
|
82 JVM_ACC_FIELD_HAS_GENERIC_SIGNATURE = 0x00000800, // field has generic signature |
3938 | 83 |
84 JVM_ACC_FIELD_INTERNAL_FLAGS = JVM_ACC_FIELD_ACCESS_WATCHED | | |
85 JVM_ACC_FIELD_MODIFICATION_WATCHED | | |
6100
71afdabfd05b
7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents:
3938
diff
changeset
|
86 JVM_ACC_FIELD_INTERNAL | |
12190
edb5ab0f3fe5
8001107: @Stable annotation for constant folding of lazily evaluated variables
vlivanov
parents:
9080
diff
changeset
|
87 JVM_ACC_FIELD_STABLE | |
6100
71afdabfd05b
7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents:
3938
diff
changeset
|
88 JVM_ACC_FIELD_HAS_GENERIC_SIGNATURE, |
0 | 89 |
90 // flags accepted by set_field_flags() | |
3938 | 91 JVM_ACC_FIELD_FLAGS = JVM_RECOGNIZED_FIELD_MODIFIERS | JVM_ACC_FIELD_INTERNAL_FLAGS |
710 | 92 |
0 | 93 }; |
94 | |
95 | |
96 class AccessFlags VALUE_OBJ_CLASS_SPEC { | |
97 friend class VMStructs; | |
98 private: | |
99 jint _flags; | |
100 | |
101 public: | |
102 // Java access flags | |
103 bool is_public () const { return (_flags & JVM_ACC_PUBLIC ) != 0; } | |
104 bool is_private () const { return (_flags & JVM_ACC_PRIVATE ) != 0; } | |
105 bool is_protected () const { return (_flags & JVM_ACC_PROTECTED ) != 0; } | |
106 bool is_static () const { return (_flags & JVM_ACC_STATIC ) != 0; } | |
107 bool is_final () const { return (_flags & JVM_ACC_FINAL ) != 0; } | |
108 bool is_synchronized() const { return (_flags & JVM_ACC_SYNCHRONIZED) != 0; } | |
109 bool is_super () const { return (_flags & JVM_ACC_SUPER ) != 0; } | |
110 bool is_volatile () const { return (_flags & JVM_ACC_VOLATILE ) != 0; } | |
111 bool is_transient () const { return (_flags & JVM_ACC_TRANSIENT ) != 0; } | |
112 bool is_native () const { return (_flags & JVM_ACC_NATIVE ) != 0; } | |
113 bool is_interface () const { return (_flags & JVM_ACC_INTERFACE ) != 0; } | |
114 bool is_abstract () const { return (_flags & JVM_ACC_ABSTRACT ) != 0; } | |
115 bool is_strict () const { return (_flags & JVM_ACC_STRICT ) != 0; } | |
116 | |
117 // Attribute flags | |
118 bool is_synthetic () const { return (_flags & JVM_ACC_SYNTHETIC ) != 0; } | |
119 | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
120 // Method* flags |
0 | 121 bool is_monitor_matching () const { return (_flags & JVM_ACC_MONITOR_MATCH ) != 0; } |
122 bool has_monitor_bytecodes () const { return (_flags & JVM_ACC_HAS_MONITOR_BYTECODES ) != 0; } | |
123 bool has_loops () const { return (_flags & JVM_ACC_HAS_LOOPS ) != 0; } | |
124 bool loops_flag_init () const { return (_flags & JVM_ACC_LOOPS_FLAG_INIT ) != 0; } | |
125 bool queued_for_compilation () const { return (_flags & JVM_ACC_QUEUED ) != 0; } | |
6800
9191895df19d
7200001: failed C1 OSR compile doesn't get recompiled with C2
twisti
parents:
6725
diff
changeset
|
126 bool is_not_c1_compilable () const { return (_flags & JVM_ACC_NOT_C1_COMPILABLE ) != 0; } |
9191895df19d
7200001: failed C1 OSR compile doesn't get recompiled with C2
twisti
parents:
6725
diff
changeset
|
127 bool is_not_c2_compilable () const { return (_flags & JVM_ACC_NOT_C2_COMPILABLE ) != 0; } |
9191895df19d
7200001: failed C1 OSR compile doesn't get recompiled with C2
twisti
parents:
6725
diff
changeset
|
128 bool is_not_c2_osr_compilable() const { return (_flags & JVM_ACC_NOT_C2_OSR_COMPILABLE ) != 0; } |
0 | 129 bool has_linenumber_table () const { return (_flags & JVM_ACC_HAS_LINE_NUMBER_TABLE ) != 0; } |
130 bool has_checked_exceptions () const { return (_flags & JVM_ACC_HAS_CHECKED_EXCEPTIONS ) != 0; } | |
131 bool has_jsrs () const { return (_flags & JVM_ACC_HAS_JSRS ) != 0; } | |
132 bool is_old () const { return (_flags & JVM_ACC_IS_OLD ) != 0; } | |
133 bool is_obsolete () const { return (_flags & JVM_ACC_IS_OBSOLETE ) != 0; } | |
134 bool is_prefixed_native () const { return (_flags & JVM_ACC_IS_PREFIXED_NATIVE ) != 0; } | |
135 | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
136 // Klass* flags |
0 | 137 bool has_miranda_methods () const { return (_flags & JVM_ACC_HAS_MIRANDA_METHODS ) != 0; } |
138 bool has_vanilla_constructor () const { return (_flags & JVM_ACC_HAS_VANILLA_CONSTRUCTOR) != 0; } | |
139 bool has_finalizer () const { return (_flags & JVM_ACC_HAS_FINALIZER ) != 0; } | |
140 bool has_final_method () const { return (_flags & JVM_ACC_HAS_FINAL_METHOD ) != 0; } | |
141 bool is_cloneable () const { return (_flags & JVM_ACC_IS_CLONEABLE ) != 0; } | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
142 // Klass* and Method* flags |
0 | 143 bool has_localvariable_table () const { return (_flags & JVM_ACC_HAS_LOCAL_VARIABLE_TABLE) != 0; } |
144 void set_has_localvariable_table() { atomic_set_bits(JVM_ACC_HAS_LOCAL_VARIABLE_TABLE); } | |
145 void clear_has_localvariable_table() { atomic_clear_bits(JVM_ACC_HAS_LOCAL_VARIABLE_TABLE); } | |
146 | |
147 // field flags | |
148 bool is_field_access_watched() const { return (_flags & JVM_ACC_FIELD_ACCESS_WATCHED) != 0; } | |
149 bool is_field_modification_watched() const | |
150 { return (_flags & JVM_ACC_FIELD_MODIFICATION_WATCHED) != 0; } | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
151 bool on_stack() const { return (_flags & JVM_ACC_ON_STACK) != 0; } |
3938 | 152 bool is_internal() const { return (_flags & JVM_ACC_FIELD_INTERNAL) != 0; } |
12190
edb5ab0f3fe5
8001107: @Stable annotation for constant folding of lazily evaluated variables
vlivanov
parents:
9080
diff
changeset
|
153 bool is_stable() const { return (_flags & JVM_ACC_FIELD_STABLE) != 0; } |
6100
71afdabfd05b
7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents:
3938
diff
changeset
|
154 bool field_has_generic_signature() const |
71afdabfd05b
7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents:
3938
diff
changeset
|
155 { return (_flags & JVM_ACC_FIELD_HAS_GENERIC_SIGNATURE) != 0; } |
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); } | |
3938 | 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 } | |
0 | 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: | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
176 friend class Method; |
0 | 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 | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
185 // Method* flags |
0 | 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); } | |
1783 | 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); } | |
6800
9191895df19d
7200001: failed C1 OSR compile doesn't get recompiled with C2
twisti
parents:
6725
diff
changeset
|
192 void set_not_c2_osr_compilable() { atomic_set_bits(JVM_ACC_NOT_C2_OSR_COMPILABLE); } |
0 | 193 void set_has_linenumber_table() { atomic_set_bits(JVM_ACC_HAS_LINE_NUMBER_TABLE); } |
194 void set_has_checked_exceptions() { atomic_set_bits(JVM_ACC_HAS_CHECKED_EXCEPTIONS); } | |
195 void set_has_jsrs() { atomic_set_bits(JVM_ACC_HAS_JSRS); } | |
196 void set_is_old() { atomic_set_bits(JVM_ACC_IS_OLD); } | |
197 void set_is_obsolete() { atomic_set_bits(JVM_ACC_IS_OBSOLETE); } | |
198 void set_is_prefixed_native() { atomic_set_bits(JVM_ACC_IS_PREFIXED_NATIVE); } | |
199 | |
9080
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8021
diff
changeset
|
200 void clear_not_c1_compilable() { atomic_clear_bits(JVM_ACC_NOT_C1_COMPILABLE); } |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8021
diff
changeset
|
201 void clear_not_c2_compilable() { atomic_clear_bits(JVM_ACC_NOT_C2_COMPILABLE); } |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8021
diff
changeset
|
202 void clear_not_c2_osr_compilable() { atomic_clear_bits(JVM_ACC_NOT_C2_OSR_COMPILABLE); } |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
203 // Klass* flags |
0 | 204 void set_has_vanilla_constructor() { atomic_set_bits(JVM_ACC_HAS_VANILLA_CONSTRUCTOR); } |
205 void set_has_finalizer() { atomic_set_bits(JVM_ACC_HAS_FINALIZER); } | |
206 void set_has_final_method() { atomic_set_bits(JVM_ACC_HAS_FINAL_METHOD); } | |
207 void set_is_cloneable() { atomic_set_bits(JVM_ACC_IS_CLONEABLE); } | |
208 void set_has_miranda_methods() { atomic_set_bits(JVM_ACC_HAS_MIRANDA_METHODS); } | |
209 | |
210 public: | |
211 // field flags | |
212 void set_is_field_access_watched(const bool value) | |
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 } | |
6100
71afdabfd05b
7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents:
3938
diff
changeset
|
228 void set_field_has_generic_signature() |
71afdabfd05b
7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents:
3938
diff
changeset
|
229 { |
71afdabfd05b
7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents:
3938
diff
changeset
|
230 atomic_set_bits(JVM_ACC_FIELD_HAS_GENERIC_SIGNATURE); |
71afdabfd05b
7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents:
3938
diff
changeset
|
231 } |
0 | 232 |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
233 void set_on_stack(const bool value) |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
234 { |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
235 if (value) { |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
236 atomic_set_bits(JVM_ACC_ON_STACK); |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
237 } else { |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
238 atomic_clear_bits(JVM_ACC_ON_STACK); |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
239 } |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
240 } |
0 | 241 // Conversion |
3938 | 242 jshort as_short() const { return (jshort)_flags; } |
243 jint as_int() const { return _flags; } | |
0 | 244 |
710 | 245 inline friend AccessFlags accessFlags_from(jint flags); |
246 | |
0 | 247 // Printing/debugging |
8021
8d9fc28831cc
7182152: Instrumentation hot swap test incorrect monitor count
dcubed
parents:
6800
diff
changeset
|
248 #if INCLUDE_JVMTI |
8d9fc28831cc
7182152: Instrumentation hot swap test incorrect monitor count
dcubed
parents:
6800
diff
changeset
|
249 void print_on(outputStream* st) const; |
8d9fc28831cc
7182152: Instrumentation hot swap test incorrect monitor count
dcubed
parents:
6800
diff
changeset
|
250 #else |
0 | 251 void print_on(outputStream* st) const PRODUCT_RETURN; |
8021
8d9fc28831cc
7182152: Instrumentation hot swap test incorrect monitor count
dcubed
parents:
6800
diff
changeset
|
252 #endif |
0 | 253 }; |
710 | 254 |
255 inline AccessFlags accessFlags_from(jint flags) { | |
256 AccessFlags af; | |
257 af._flags = flags; | |
258 return af; | |
259 } | |
1972 | 260 |
261 #endif // SHARE_VM_UTILITIES_ACCESSFLAGS_HPP |