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 
12 namespace v8 {
13 
14 class Isolate;
15 
16 /**
17  * A Number object (ECMA-262, 4.3.21).
18  */
19 class V8_EXPORT NumberObject : public Object {
20  public:
21   static Local<Value> New(Isolate* isolate, double value);
22 
23   double ValueOf() const;
24 
Cast(Value * value)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  */
39 class V8_EXPORT BigIntObject : public Object {
40  public:
41   static Local<Value> New(Isolate* isolate, int64_t value);
42 
43   Local<BigInt> ValueOf() const;
44 
Cast(Value * value)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  */
59 class V8_EXPORT BooleanObject : public Object {
60  public:
61   static Local<Value> New(Isolate* isolate, bool value);
62 
63   bool ValueOf() const;
64 
Cast(Value * value)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  */
79 class V8_EXPORT StringObject : public Object {
80  public:
81   static Local<Value> New(Isolate* isolate, Local<String> value);
82 
83   Local<String> ValueOf() const;
84 
Cast(Value * value)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  */
99 class V8_EXPORT SymbolObject : public Object {
100  public:
101   static Local<Value> New(Isolate* isolate, Local<Symbol> value);
102 
103   Local<Symbol> ValueOf() const;
104 
Cast(Value * value)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