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