v8-embedder-state-scope.h 1.5 KB

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