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),
156 _must_claim_cld(must_claim_cld) {}
157
|
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 DerivedOopClosure : public Closure {
139 public:
140 virtual void do_derived_oop(oop* base, oop* derived) = 0;
141 };
142
143 class KlassClosure : public Closure {
144 public:
145 virtual void do_klass(Klass* k) = 0;
146 };
147
148 class CLDClosure : public Closure {
149 public:
150 virtual void do_cld(ClassLoaderData* cld) = 0;
151 };
152
153
154 class CLDToOopClosure : public CLDClosure {
155 OopClosure* _oop_closure;
156 bool _must_claim_cld;
157
158 public:
159 CLDToOopClosure(OopClosure* oop_closure, bool must_claim_cld = true) :
160 _oop_closure(oop_closure),
161 _must_claim_cld(must_claim_cld) {}
162
|