summaryrefslogtreecommitdiff
path: root/deps/v8/src/heap/cppgc-js/cpp-marking-state-inl.h
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/heap/cppgc-js/cpp-marking-state-inl.h')
-rw-r--r--deps/v8/src/heap/cppgc-js/cpp-marking-state-inl.h26
1 files changed, 21 insertions, 5 deletions
diff --git a/deps/v8/src/heap/cppgc-js/cpp-marking-state-inl.h b/deps/v8/src/heap/cppgc-js/cpp-marking-state-inl.h
index 23294b4dca..3e52ae3c43 100644
--- a/deps/v8/src/heap/cppgc-js/cpp-marking-state-inl.h
+++ b/deps/v8/src/heap/cppgc-js/cpp-marking-state-inl.h
@@ -6,7 +6,9 @@
#define V8_HEAP_CPPGC_JS_CPP_MARKING_STATE_INL_H_
#include "src/heap/cppgc-js/cpp-marking-state.h"
-#include "src/heap/embedder-tracing-inl.h"
+#include "src/heap/cppgc-js/wrappable-info-inl.h"
+#include "src/heap/cppgc-js/wrappable-info.h"
+#include "src/heap/cppgc/heap-page.h"
#include "src/objects/embedder-data-slot.h"
#include "src/objects/js-objects.h"
@@ -33,11 +35,25 @@ void CppMarkingState::MarkAndPush(const EmbedderDataSnapshot& snapshot) {
void CppMarkingState::MarkAndPush(const EmbedderDataSlot type_slot,
const EmbedderDataSlot instance_slot) {
- LocalEmbedderHeapTracer::WrapperInfo info;
- if (LocalEmbedderHeapTracer::ExtractWrappableInfo(
- isolate_, wrapper_descriptor_, type_slot, instance_slot, &info)) {
+ const auto maybe_info = WrappableInfo::From(
+ isolate_, type_slot, instance_slot, wrapper_descriptor_);
+ if (maybe_info.has_value()) {
marking_state_.MarkAndPush(
- cppgc::internal::HeapObjectHeader::FromObject(info.second));
+ cppgc::internal::HeapObjectHeader::FromObject(maybe_info->instance));
+ }
+}
+
+// TODO(v8:13796): Remove this if it doesn't flush out any issues.
+void CppMarkingState::MarkAndPushForWriteBarrier(
+ const EmbedderDataSlot type_slot, const EmbedderDataSlot instance_slot) {
+ const auto maybe_info = WrappableInfo::From(
+ isolate_, type_slot, instance_slot, wrapper_descriptor_);
+ if (maybe_info.has_value()) {
+ cppgc::internal::HeapObjectHeader& header =
+ cppgc::internal::HeapObjectHeader::FromObject(maybe_info->instance);
+ CHECK_EQ(&header, &cppgc::internal::BasePage::FromPayload(&header)
+ ->ObjectHeaderFromInnerAddress(&header));
+ marking_state_.MarkAndPush(header);
}
}