• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 "jerryscript_native_value.h"
17 
18 #include "jerryscript-ext/handler.h"
19 #include "jerryscript_native_boolean.h"
20 #include "jerryscript_native_number.h"
21 #include "jerryscript_native_object.h"
22 #include "jerryscript_native_string.h"
23 
JerryScriptNativeValue(JerryScriptNativeEngine * engine,jerry_value_t value)24 JerryScriptNativeValue::JerryScriptNativeValue(JerryScriptNativeEngine* engine, jerry_value_t value) : engine_(engine)
25 {
26     value_ = value;
27     engine_->GetScopeManager()->CreateHandle(this);
28 }
29 
~JerryScriptNativeValue()30 JerryScriptNativeValue::~JerryScriptNativeValue()
31 {
32     jerry_release_value(value_);
33 }
34 
GetInterface(const int interfaceId)35 void* JerryScriptNativeValue::GetInterface(const int interfaceId)
36 {
37     return nullptr;
38 }
39 
TypeOf()40 NativeValueType JerryScriptNativeValue::TypeOf()
41 {
42     NativeValueType result;
43     switch (jerry_value_get_type(value_)) {
44         case JERRY_TYPE_NONE:
45             result = NATIVE_UNDEFINED;
46             break;
47         case JERRY_TYPE_UNDEFINED:
48             result = NATIVE_UNDEFINED;
49             break;
50         case JERRY_TYPE_NULL:
51             result = NATIVE_NULL;
52             break;
53         case JERRY_TYPE_BOOLEAN:
54             result = NATIVE_BOOLEAN;
55             break;
56         case JERRY_TYPE_NUMBER:
57             result = NATIVE_NUMBER;
58             break;
59         case JERRY_TYPE_STRING:
60             result = NATIVE_STRING;
61             break;
62         case JERRY_TYPE_OBJECT:
63             if (jerry_value_is_external(value_)) {
64                 result = NATIVE_EXTERNAL;
65             } else {
66                 result = NATIVE_OBJECT;
67             }
68             break;
69         case JERRY_TYPE_FUNCTION:
70             result = NATIVE_FUNCTION;
71             break;
72         case JERRY_TYPE_ERROR:
73             result = NATIVE_OBJECT;
74             break;
75         case JERRY_TYPE_SYMBOL:
76             result = NATIVE_SYMBOL;
77             break;
78 #if JERRY_API_MINOR_VERSION > 3 // jerryscript2.3: 3,  jerryscript2.4: 4
79         case JERRY_TYPE_BIGINT:
80             result = NATIVE_BIGINT;
81             break;
82 #endif
83         default:
84             result = NATIVE_UNDEFINED;
85             break;
86     }
87     return result;
88 }
89 
InstanceOf(NativeValue * obj)90 bool JerryScriptNativeValue::InstanceOf(NativeValue* obj)
91 {
92     jerry_value_t op = jerry_binary_operation(JERRY_BIN_OP_INSTANCEOF, value_, *obj);
93     return jerry_get_boolean_value(op);
94 }
95 
IsArray()96 bool JerryScriptNativeValue::IsArray()
97 {
98     return jerry_value_is_array(value_);
99 }
100 
IsArrayBuffer()101 bool JerryScriptNativeValue::IsArrayBuffer()
102 {
103     return jerry_value_is_arraybuffer(value_);
104 }
105 
IsBuffer()106 bool JerryScriptNativeValue::IsBuffer()
107 {
108     return false;
109 }
110 
IsDate()111 bool JerryScriptNativeValue::IsDate()
112 {
113     jerry_value_t global = jerry_get_global_object();
114     jerry_value_t date = jerryx_get_property_str(global, "Date");
115     jerry_value_t result = jerry_binary_operation(JERRY_BIN_OP_INSTANCEOF, value_, date);
116 
117     bool retVal = jerry_get_boolean_value(result);
118 
119     jerry_release_value(result);
120     jerry_release_value(date);
121     jerry_release_value(global);
122 
123     return retVal;
124 }
125 
IsError()126 bool JerryScriptNativeValue::IsError()
127 {
128     return jerry_value_is_error(value_);
129 }
130 
IsTypedArray()131 bool JerryScriptNativeValue::IsTypedArray()
132 {
133     return jerry_value_is_typedarray(value_);
134 }
135 
IsDataView()136 bool JerryScriptNativeValue::IsDataView()
137 {
138     return jerry_value_is_dataview(value_);
139 }
140 
IsPromise()141 bool JerryScriptNativeValue::IsPromise()
142 {
143     return jerry_value_is_promise(value_);
144 }
145 
ToBoolean()146 NativeValue* JerryScriptNativeValue::ToBoolean()
147 {
148     return new JerryScriptNativeBoolean(engine_, jerry_value_to_boolean(value_));
149 }
150 
ToNumber()151 NativeValue* JerryScriptNativeValue::ToNumber()
152 {
153     return new JerryScriptNativeNumber(engine_, jerry_value_to_number(value_));
154 }
155 
ToString()156 NativeValue* JerryScriptNativeValue::ToString()
157 {
158     return new JerryScriptNativeString(engine_, jerry_value_to_string(value_));
159 }
160 
ToObject()161 NativeValue* JerryScriptNativeValue::ToObject()
162 {
163     return new JerryScriptNativeObject(engine_, jerry_value_to_object(value_));
164 }
165 
StrictEquals(NativeValue * value)166 bool JerryScriptNativeValue::StrictEquals(NativeValue* value)
167 {
168     jerry_value_t op = jerry_binary_operation(JERRY_BIN_OP_STRICT_EQUAL, value_, *value);
169     return jerry_get_boolean_value(op);
170 }
IsArgumentsObject()171 bool JerryScriptNativeValue::IsArgumentsObject()
172 {
173     return false;
174 }
IsAsyncFunction()175 bool JerryScriptNativeValue::IsAsyncFunction()
176 {
177     return false;
178 }
IsBooleanObject()179 bool JerryScriptNativeValue::IsBooleanObject()
180 {
181     return false;
182 }
IsGeneratorFunction()183 bool JerryScriptNativeValue::IsGeneratorFunction()
184 {
185     return false;
186 }
IsMapIterator()187 bool JerryScriptNativeValue::IsMapIterator()
188 {
189     return false;
190 }
IsSetIterator()191 bool JerryScriptNativeValue::IsSetIterator()
192 {
193     return false;
194 }
IsGeneratorObject()195 bool JerryScriptNativeValue::IsGeneratorObject()
196 {
197     return false;
198 }
IsModuleNamespaceObject()199 bool JerryScriptNativeValue::IsModuleNamespaceObject()
200 {
201     return false;
202 }
IsProxy()203 bool JerryScriptNativeValue::IsProxy()
204 {
205     return false;
206 }
IsRegExp()207 bool JerryScriptNativeValue::IsRegExp()
208 {
209     return false;
210 }
IsNumberObject()211 bool JerryScriptNativeValue::IsNumberObject()
212 {
213     return false;
214 }
IsMap()215 bool JerryScriptNativeValue::IsMap()
216 {
217     return false;
218 }
IsStringObject()219 bool JerryScriptNativeValue::IsStringObject()
220 {
221     return false;
222 }
IsSymbolObject()223 bool JerryScriptNativeValue::IsSymbolObject()
224 {
225     return false;
226 }
IsWeakMap()227 bool JerryScriptNativeValue::IsWeakMap()
228 {
229     return false;
230 }
IsWeakSet()231 bool JerryScriptNativeValue::IsWeakSet()
232 {
233     return false;
234 }
IsSet()235 bool JerryScriptNativeValue::IsSet()
236 {
237     return false;
238 }
IsBigInt64Array()239 bool JerryScriptNativeValue::IsBigInt64Array()
240 {
241     return false;
242 }
IsBigUint64Array()243 bool JerryScriptNativeValue::IsBigUint64Array()
244 {
245     return false;
246 }
IsSharedArrayBuffer()247 bool JerryScriptNativeValue::IsSharedArrayBuffer()
248 {
249     return false;
250 }
251 
252