diff options
Diffstat (limited to 'deps/v8/src/visitors.h')
-rw-r--r-- | deps/v8/src/visitors.h | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/deps/v8/src/visitors.h b/deps/v8/src/visitors.h new file mode 100644 index 0000000000..0822d91690 --- /dev/null +++ b/deps/v8/src/visitors.h @@ -0,0 +1,79 @@ +// 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_VISITORS_H_ +#define V8_VISITORS_H_ + +#include "src/allocation.h" + +namespace v8 { +namespace internal { + +class Object; + +#define ROOT_ID_LIST(V) \ + V(kStringTable, "string_table", "(Internalized strings)") \ + V(kExternalStringsTable, "external_strings_table", "(External strings)") \ + V(kStrongRootList, "strong_root_list", "(Strong roots)") \ + V(kSmiRootList, "smi_root_list", "(Smi roots)") \ + V(kBootstrapper, "bootstrapper", "(Bootstrapper)") \ + V(kTop, "top", "(Isolate)") \ + V(kRelocatable, "relocatable", "(Relocatable)") \ + V(kDebug, "debug", "(Debugger)") \ + V(kCompilationCache, "compilationcache", "(Compilation cache)") \ + V(kHandleScope, "handlescope", "(Handle scope)") \ + V(kDispatchTable, "dispatchtable", "(Dispatch table)") \ + V(kBuiltins, "builtins", "(Builtins)") \ + V(kGlobalHandles, "globalhandles", "(Global handles)") \ + V(kEternalHandles, "eternalhandles", "(Eternal handles)") \ + V(kThreadManager, "threadmanager", "(Thread manager)") \ + V(kStrongRoots, "strong roots", "(Strong roots)") \ + V(kExtensions, "Extensions", "(Extensions)") + +class VisitorSynchronization : public AllStatic { + public: +#define DECLARE_ENUM(enum_item, ignore1, ignore2) enum_item, + enum SyncTag { ROOT_ID_LIST(DECLARE_ENUM) kNumberOfSyncTags }; +#undef DECLARE_ENUM + + static const char* const kTags[kNumberOfSyncTags]; + static const char* const kTagNames[kNumberOfSyncTags]; +}; + +enum class Root { +#define DECLARE_ENUM(enum_item, ignore1, ignore2) enum_item, + ROOT_ID_LIST(DECLARE_ENUM) +#undef DECLARE_ENUM + // TODO(ulan): Merge with the ROOT_ID_LIST. + kCodeFlusher, + kPartialSnapshotCache, + kWeakCollections +}; + +// Abstract base class for visiting, and optionally modifying, the +// pointers contained in roots. Used in GC and serialization/deserialization. +class RootVisitor BASE_EMBEDDED { + public: + virtual ~RootVisitor() {} + + // Visits a contiguous arrays of pointers in the half-open range + // [start, end). Any or all of the values may be modified on return. + virtual void VisitRootPointers(Root root, Object** start, Object** end) = 0; + + // Handy shorthand for visiting a single pointer. + virtual void VisitRootPointer(Root root, Object** p) { + VisitRootPointers(root, p, p + 1); + } + + // Intended for serialization/deserialization checking: insert, or + // check for the presence of, a tag at this position in the stream. + // Also used for marking up GC roots in heap snapshots. + // TODO(ulan): Remove this. + virtual void Synchronize(VisitorSynchronization::SyncTag tag) {} +}; + +} // namespace internal +} // namespace v8 + +#endif // V8_VISITORS_H_ |