1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2  * vim: set ts=8 sts=2 et sw=2 tw=80:
3  * This Source Code Form is subject to the terms of the Mozilla Public
4  * License, v. 2.0. If a copy of the MPL was not distributed with this
5  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 
7 #ifndef gc_ClearEdgesTracer_h
8 #define gc_ClearEdgesTracer_h
9 
10 #include "js/TracingAPI.h"
11 
12 namespace js {
13 namespace gc {
14 
15 struct ClearEdgesTracer final : public JS::CallbackTracer {
16   explicit ClearEdgesTracer(JSRuntime* rt);
17   ClearEdgesTracer();
18 
19 #ifdef DEBUG
getTracerKindfinal20   TracerKind getTracerKind() const override { return TracerKind::ClearEdges; }
21 #endif
22 
23   template <typename T>
24   inline bool clearEdge(T** thingp);
25 
26   bool onObjectEdge(JSObject** objp) override;
27   bool onStringEdge(JSString** strp) override;
28   bool onSymbolEdge(JS::Symbol** symp) override;
29   bool onBigIntEdge(JS::BigInt** bip) override;
30   bool onScriptEdge(js::BaseScript** scriptp) override;
31   bool onShapeEdge(js::Shape** shapep) override;
32   bool onObjectGroupEdge(js::ObjectGroup** groupp) override;
33   bool onBaseShapeEdge(js::BaseShape** basep) override;
34   bool onJitCodeEdge(js::jit::JitCode** codep) override;
35   bool onScopeEdge(js::Scope** scopep) override;
36   bool onRegExpSharedEdge(js::RegExpShared** sharedp) override;
37   bool onChild(const JS::GCCellPtr& thing) override;
38 };
39 
40 }  // namespace gc
41 }  // namespace js
42 
43 #endif  // gc_ClearEdgesTracer_h
44