145 return artifact_id(cld);
146 }
147
148 template <typename T>
149 static s4 get_flags(const T* ptr) {
150 assert(ptr != NULL, "invariant");
151 return ptr->access_flags().get_flags();
152 }
153
154 static bool is_unsafe_anonymous(const Klass* klass) {
155 assert(klass != NULL, "invariant");
156 assert(!klass->is_objArray_klass(), "invariant");
157 return klass->is_instance_klass() && InstanceKlass::cast(klass)->is_unsafe_anonymous();
158 }
159
160 static ClassLoaderData* get_cld(const Klass* klass) {
161 assert(klass != NULL, "invariant");
162 if (klass->is_objArray_klass()) {
163 klass = ObjArrayKlass::cast(klass)->bottom_klass();
164 }
165 if (klass->is_hidden_weak()) return NULL;
166 return is_unsafe_anonymous(klass) ?
167 InstanceKlass::cast(klass)->unsafe_anonymous_host()->class_loader_data() : klass->class_loader_data();
168 }
169
170 template <typename T>
171 static void set_serialized(const T* ptr) {
172 assert(ptr != NULL, "invariant");
173 SET_SERIALIZED(ptr);
174 assert(IS_SERIALIZED(ptr), "invariant");
175 CLEAR_THIS_EPOCH_CLEARED_BIT(ptr);
176 }
177
178 /*
179 * In C++03, functions used as template parameters must have external linkage;
180 * this restriction was removed in C++11. Change back to "static" and
181 * rename functions when C++11 becomes available.
182 *
183 * The weird naming is an effort to decrease the risk of name clashes.
184 */
185
|
145 return artifact_id(cld);
146 }
147
148 template <typename T>
149 static s4 get_flags(const T* ptr) {
150 assert(ptr != NULL, "invariant");
151 return ptr->access_flags().get_flags();
152 }
153
154 static bool is_unsafe_anonymous(const Klass* klass) {
155 assert(klass != NULL, "invariant");
156 assert(!klass->is_objArray_klass(), "invariant");
157 return klass->is_instance_klass() && InstanceKlass::cast(klass)->is_unsafe_anonymous();
158 }
159
160 static ClassLoaderData* get_cld(const Klass* klass) {
161 assert(klass != NULL, "invariant");
162 if (klass->is_objArray_klass()) {
163 klass = ObjArrayKlass::cast(klass)->bottom_klass();
164 }
165 if (klass->is_non_strong_hidden()) return NULL;
166 return is_unsafe_anonymous(klass) ?
167 InstanceKlass::cast(klass)->unsafe_anonymous_host()->class_loader_data() : klass->class_loader_data();
168 }
169
170 template <typename T>
171 static void set_serialized(const T* ptr) {
172 assert(ptr != NULL, "invariant");
173 SET_SERIALIZED(ptr);
174 assert(IS_SERIALIZED(ptr), "invariant");
175 CLEAR_THIS_EPOCH_CLEARED_BIT(ptr);
176 }
177
178 /*
179 * In C++03, functions used as template parameters must have external linkage;
180 * this restriction was removed in C++11. Change back to "static" and
181 * rename functions when C++11 becomes available.
182 *
183 * The weird naming is an effort to decrease the risk of name clashes.
184 */
185
|