1 /*
2 * Copyright (c) 2021 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "v8_native_value.h"
17
V8NativeValue(V8NativeEngine * engine,v8::Local<v8::Value> value)18 V8NativeValue::V8NativeValue(V8NativeEngine* engine, v8::Local<v8::Value> value)
19 {
20 engine_ = engine;
21 value_ = value;
22
23 NativeScopeManager* scopeManager = engine_->GetScopeManager();
24 if (scopeManager != nullptr) {
25 scopeManager->CreateHandle(this);
26 }
27 }
28
~V8NativeValue()29 V8NativeValue::~V8NativeValue() {}
30
GetInterface(int interfaceId)31 void* V8NativeValue::GetInterface(int interfaceId)
32 {
33 return nullptr;
34 }
35
TypeOf()36 NativeValueType V8NativeValue::TypeOf()
37 {
38 v8::Local<v8::Value> value = value_;
39 NativeValueType result;
40
41 if (value->IsNumber()) {
42 result = NATIVE_NUMBER;
43 } else if (value->IsBigInt()) {
44 result = NATIVE_BIGINT;
45 } else if (value->IsString()) {
46 result = NATIVE_STRING;
47 } else if (value->IsFunction()) {
48 result = NATIVE_FUNCTION;
49 } else if (value->IsExternal()) {
50 result = NATIVE_EXTERNAL;
51 } else if (value->IsObject()) {
52 result = NATIVE_OBJECT;
53 } else if (value->IsBoolean()) {
54 result = NATIVE_BOOLEAN;
55 } else if (value->IsUndefined()) {
56 result = NATIVE_UNDEFINED;
57 } else if (value->IsSymbol()) {
58 result = NATIVE_SYMBOL;
59 } else if (value->IsNull()) {
60 result = NATIVE_NULL;
61 } else {
62 result = NATIVE_UNDEFINED;
63 }
64
65 return result;
66 }
67
InstanceOf(NativeValue * obj)68 bool V8NativeValue::InstanceOf(NativeValue* obj)
69 {
70 v8::Local<v8::Value> value = value_;
71 return value->InstanceOf(engine_->GetContext(), *obj).FromJust();
72 }
73
IsArray()74 bool V8NativeValue::IsArray()
75 {
76 v8::Local<v8::Value> value = value_;
77 return value->IsArray();
78 }
79
IsArrayBuffer()80 bool V8NativeValue::IsArrayBuffer()
81 {
82 v8::Local<v8::Value> value = value_;
83 return value->IsArrayBuffer();
84 }
85
IsDate()86 bool V8NativeValue::IsDate()
87 {
88 v8::Local<v8::Value> value = value_;
89 return value->IsDate();
90 }
91
IsError()92 bool V8NativeValue::IsError()
93 {
94 v8::Local<v8::Value> value = value_;
95 return value->IsNativeError();
96 }
97
IsTypedArray()98 bool V8NativeValue::IsTypedArray()
99 {
100 v8::Local<v8::Value> value = value_;
101 return value->IsTypedArray();
102 }
103
IsDataView()104 bool V8NativeValue::IsDataView()
105 {
106 v8::Local<v8::Value> value = value_;
107 return value->IsDataView();
108 }
109
IsPromise()110 bool V8NativeValue::IsPromise()
111 {
112 v8::Local<v8::Value> value = value_;
113 return value->IsPromise();
114 }
115
IsCallable()116 bool V8NativeValue::IsCallable()
117 {
118 v8::Local<v8::Value> value = value_;
119 return value->IsFunction();
120 }
121
ToBoolean()122 NativeValue* V8NativeValue::ToBoolean()
123 {
124 v8::Local<v8::Value> value = value_;
125 return V8NativeEngine::V8ValueToNativeValue(engine_, value->ToBoolean(engine_->GetIsolate()));
126 }
127
ToNumber()128 NativeValue* V8NativeValue::ToNumber()
129 {
130 v8::Local<v8::Value> value = value_;
131 return V8NativeEngine::V8ValueToNativeValue(engine_, value->ToNumber(engine_->GetContext()).ToLocalChecked());
132 }
133
ToString()134 NativeValue* V8NativeValue::ToString()
135 {
136 v8::Local<v8::Value> value = value_;
137 return V8NativeEngine::V8ValueToNativeValue(engine_, value->ToString(engine_->GetContext()).ToLocalChecked());
138 }
139
ToObject()140 NativeValue* V8NativeValue::ToObject()
141 {
142 v8::Local<v8::Value> value = value_;
143 return V8NativeEngine::V8ValueToNativeValue(engine_, value->ToObject(engine_->GetContext()).ToLocalChecked());
144 }
145
StrictEquals(NativeValue * value)146 bool V8NativeValue::StrictEquals(NativeValue* value)
147 {
148 v8::Local<v8::Value> v8Value = value_;
149 return v8Value->StrictEquals(*value);
150 }
151