1// Copyright 2021 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef V8_EXECUTION_EMBEDDER_STATE_H_
6#define V8_EXECUTION_EMBEDDER_STATE_H_
7
8#include "include/v8-local-handle.h"
9#include "src/execution/isolate.h"
10
11namespace v8 {
12
13enum class EmbedderStateTag : uint8_t;
14
15namespace internal {
16class V8_EXPORT_PRIVATE EmbedderState {
17 public:
18  EmbedderState(v8::Isolate* isolate, Local<v8::Context> context,
19                EmbedderStateTag tag);
20
21  ~EmbedderState();
22
23  EmbedderStateTag GetState() const { return tag_; }
24
25  Address native_context_address() const { return native_context_address_; }
26
27  void OnMoveEvent(Address from, Address to);
28
29 private:
30  Isolate* isolate_;
31  EmbedderStateTag tag_;
32  Address native_context_address_ = kNullAddress;
33  EmbedderState* previous_embedder_state_;
34};
35}  // namespace internal
36
37}  // namespace v8
38
39#endif  // V8_EXECUTION_EMBEDDER_STATE_H_
40