// Copyright 2017 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef V8_OBJECTS_VISITORS_H_ #define V8_OBJECTS_VISITORS_H_ #include "src/common/globals.h" #include "src/objects/casting.h" #include "src/objects/code.h" #include "src/objects/compressed-slots.h" #include "src/objects/instruction-stream.h" #include "src/objects/slots.h" namespace v8 { namespace internal { class Code; #define ROOT_ID_LIST(V) … class VisitorSynchronization : public AllStatic { … }; enum class Root { … }; // Abstract base class for visiting, and optionally modifying, the // pointers contained in roots. Used in GC and serialization/deserialization. class RootVisitor { … }; class RelocIterator; // Abstract base class for visiting, and optionally modifying, the // pointers contained in Objects. Used in GC and serialization/deserialization. class ObjectVisitor { … }; // Helper version of ObjectVisitor that also takes care of caching base values // of the main pointer compression cage and for the code cage. class ObjectVisitorWithCageBases : public ObjectVisitor { … }; // A wrapper class for root visitors that are used by client isolates during a // shared garbage collection. The wrapped visitor only visits heap objects in // the shared spaces and ignores everything else. The type parameter `Visitor` // should be a subclass of `RootVisitor`, or a similar class that provides the // required interface. template <typename Visitor = RootVisitor> class ClientRootVisitor final : public RootVisitor { … }; // A wrapper class for object visitors that are used by client isolates during a // shared garbage collection. The wrapped visitor only visits heap objects in // the shared spaces and ignores everything else. The type parameter `Visitor` // should be a subclass of `ObjectVisitorWithCageBases`, or a similar class that // provides the required interface. template <typename Visitor = ObjectVisitorWithCageBases> class ClientObjectVisitor final : public ObjectVisitorWithCageBases { … }; } // namespace internal } // namespace v8 #endif // V8_OBJECTS_VISITORS_H_