116 template <typename T> void verify(T* p);
117
118 // Can be used by subclasses to turn off the default verification of oop fields.
119 virtual bool should_verify_oops() { return true; }
120 #endif
121 };
122
123 // Wrapper closure only used to implement oop_iterate_no_header().
124 class NoHeaderExtendedOopClosure : public ExtendedOopClosure {
125 OopClosure* _wrapped_closure;
126 public:
127 NoHeaderExtendedOopClosure(OopClosure* cl) : _wrapped_closure(cl) {}
128 // Warning: this calls the virtual version do_oop in the the wrapped closure.
129 void do_oop_nv(oop* p) { _wrapped_closure->do_oop(p); }
130 void do_oop_nv(narrowOop* p) { _wrapped_closure->do_oop(p); }
131
132 void do_oop(oop* p) { assert(false, "Only the _nv versions should be used");
133 _wrapped_closure->do_oop(p); }
134 void do_oop(narrowOop* p) { assert(false, "Only the _nv versions should be used");
135 _wrapped_closure->do_oop(p);}
136 };
137
138 class KlassClosure : public Closure {
139 public:
140 virtual void do_klass(Klass* k) = 0;
141 };
142
143 class CLDClosure : public Closure {
144 public:
145 virtual void do_cld(ClassLoaderData* cld) = 0;
146 };
147
148
149 class CLDToOopClosure : public CLDClosure {
150 OopClosure* _oop_closure;
151 bool _must_claim_cld;
152
153 public:
154 CLDToOopClosure(OopClosure* oop_closure, bool must_claim_cld = true) :
155 _oop_closure(oop_closure),
|
116 template <typename T> void verify(T* p);
117
118 // Can be used by subclasses to turn off the default verification of oop fields.
119 virtual bool should_verify_oops() { return true; }
120 #endif
121 };
122
123 // Wrapper closure only used to implement oop_iterate_no_header().
124 class NoHeaderExtendedOopClosure : public ExtendedOopClosure {
125 OopClosure* _wrapped_closure;
126 public:
127 NoHeaderExtendedOopClosure(OopClosure* cl) : _wrapped_closure(cl) {}
128 // Warning: this calls the virtual version do_oop in the the wrapped closure.
129 void do_oop_nv(oop* p) { _wrapped_closure->do_oop(p); }
130 void do_oop_nv(narrowOop* p) { _wrapped_closure->do_oop(p); }
131
132 void do_oop(oop* p) { assert(false, "Only the _nv versions should be used");
133 _wrapped_closure->do_oop(p); }
134 void do_oop(narrowOop* p) { assert(false, "Only the _nv versions should be used");
135 _wrapped_closure->do_oop(p);}
136 #ifdef ASSERT
137 bool should_verify_oops() { return false; }
138 #endif
139 };
140
141 class KlassClosure : public Closure {
142 public:
143 virtual void do_klass(Klass* k) = 0;
144 };
145
146 class CLDClosure : public Closure {
147 public:
148 virtual void do_cld(ClassLoaderData* cld) = 0;
149 };
150
151
152 class CLDToOopClosure : public CLDClosure {
153 OopClosure* _oop_closure;
154 bool _must_claim_cld;
155
156 public:
157 CLDToOopClosure(OopClosure* oop_closure, bool must_claim_cld = true) :
158 _oop_closure(oop_closure),
|