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_PRIMITIVE_OBJECT_H_
6#define INCLUDE_V8_PRIMITIVE_OBJECT_H_
7
8#include "v8-local-handle.h"  // NOLINT(build/include_directory)
9#include "v8-object.h"        // NOLINT(build/include_directory)
10#include "v8config.h"         // NOLINT(build/include_directory)
11
12namespace v8 {
13
14class Isolate;
15
16/**
17 * A Number object (ECMA-262, 4.3.21).
18 */
19class V8_EXPORT NumberObject : public Object {
20 public:
21  static Local<Value> New(Isolate* isolate, double value);
22
23  double ValueOf() const;
24
25  V8_INLINE static NumberObject* Cast(Value* value) {
26#ifdef V8_ENABLE_CHECKS
27    CheckCast(value);
28#endif
29    return static_cast<NumberObject*>(value);
30  }
31
32 private:
33  static void CheckCast(Value* obj);
34};
35
36/**
37 * A BigInt object (https://tc39.github.io/proposal-bigint)
38 */
39class V8_EXPORT BigIntObject : public Object {
40 public:
41  static Local<Value> New(Isolate* isolate, int64_t value);
42
43  Local<BigInt> ValueOf() const;
44
45  V8_INLINE static BigIntObject* Cast(Value* value) {
46#ifdef V8_ENABLE_CHECKS
47    CheckCast(value);
48#endif
49    return static_cast<BigIntObject*>(value);
50  }
51
52 private:
53  static void CheckCast(Value* obj);
54};
55
56/**
57 * A Boolean object (ECMA-262, 4.3.15).
58 */
59class V8_EXPORT BooleanObject : public Object {
60 public:
61  static Local<Value> New(Isolate* isolate, bool value);
62
63  bool ValueOf() const;
64
65  V8_INLINE static BooleanObject* Cast(Value* value) {
66#ifdef V8_ENABLE_CHECKS
67    CheckCast(value);
68#endif
69    return static_cast<BooleanObject*>(value);
70  }
71
72 private:
73  static void CheckCast(Value* obj);
74};
75
76/**
77 * A String object (ECMA-262, 4.3.18).
78 */
79class V8_EXPORT StringObject : public Object {
80 public:
81  static Local<Value> New(Isolate* isolate, Local<String> value);
82
83  Local<String> ValueOf() const;
84
85  V8_INLINE static StringObject* Cast(Value* value) {
86#ifdef V8_ENABLE_CHECKS
87    CheckCast(value);
88#endif
89    return static_cast<StringObject*>(value);
90  }
91
92 private:
93  static void CheckCast(Value* obj);
94};
95
96/**
97 * A Symbol object (ECMA-262 edition 6).
98 */
99class V8_EXPORT SymbolObject : public Object {
100 public:
101  static Local<Value> New(Isolate* isolate, Local<Symbol> value);
102
103  Local<Symbol> ValueOf() const;
104
105  V8_INLINE static SymbolObject* Cast(Value* value) {
106#ifdef V8_ENABLE_CHECKS
107    CheckCast(value);
108#endif
109    return static_cast<SymbolObject*>(value);
110  }
111
112 private:
113  static void CheckCast(Value* obj);
114};
115
116}  // namespace v8
117
118#endif  // INCLUDE_V8_PRIMITIVE_OBJECT_H_
119