xref: /third_party/node/deps/v8/include/v8-external.h (revision 1cb0ef41)
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_EXTERNAL_H_
6#define INCLUDE_V8_EXTERNAL_H_
7
8#include "v8-value.h"  // NOLINT(build/include_directory)
9#include "v8config.h"  // NOLINT(build/include_directory)
10
11namespace v8 {
12
13class Isolate;
14
15/**
16 * A JavaScript value that wraps a C++ void*. This type of value is mainly used
17 * to associate C++ data structures with JavaScript objects.
18 */
19class V8_EXPORT External : public Value {
20 public:
21  static Local<External> New(Isolate* isolate, void* value);
22  V8_INLINE static External* Cast(Value* value) {
23#ifdef V8_ENABLE_CHECKS
24    CheckCast(value);
25#endif
26    return static_cast<External*>(value);
27  }
28
29  void* Value() const;
30
31 private:
32  static void CheckCast(v8::Value* obj);
33};
34
35}  // namespace v8
36
37#endif  // INCLUDE_V8_EXTERNAL_H_
38