• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 INCLUDE_V8_EMBEDDER_STATE_SCOPE_H_
6 #define INCLUDE_V8_EMBEDDER_STATE_SCOPE_H_
7 
8 #include <memory>
9 
10 #include "v8-context.h"       // NOLINT(build/include_directory)
11 #include "v8-internal.h"      // NOLINT(build/include_directory)
12 #include "v8-local-handle.h"  // NOLINT(build/include_directory)
13 
14 namespace v8 {
15 
16 namespace internal {
17 class EmbedderState;
18 }  // namespace internal
19 
20 // A StateTag represents a possible state of the embedder.
21 enum class EmbedderStateTag : uint8_t {
22   // reserved
23   EMPTY = 0,
24   OTHER = 1,
25   // embedder can define any state after
26 };
27 
28 // A stack-allocated class that manages an embedder state on the isolate.
29 // After an EmbedderState scope has been created, a new embedder state will be
30 // pushed on the isolate stack.
31 class V8_EXPORT EmbedderStateScope {
32  public:
33   EmbedderStateScope(Isolate* isolate, Local<v8::Context> context,
34                      EmbedderStateTag tag);
35 
36   ~EmbedderStateScope();
37 
38  private:
39   // Declaring operator new and delete as deleted is not spec compliant.
40   // Therefore declare them private instead to disable dynamic alloc
41   void* operator new(size_t size);
42   void* operator new[](size_t size);
43   void operator delete(void*, size_t);
44   void operator delete[](void*, size_t);
45 
46   std::unique_ptr<internal::EmbedderState> embedder_state_;
47 };
48 
49 }  // namespace v8
50 
51 #endif  // INCLUDE_V8_EMBEDDER_STATE_SCOPE_H_
52