| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/api.h" | 5 #include "src/api.h" |
| 6 | 6 |
| 7 #include <string.h> // For memcpy, strlen. | 7 #include <string.h> // For memcpy, strlen. |
| 8 #ifdef V8_USE_ADDRESS_SANITIZER | 8 #ifdef V8_USE_ADDRESS_SANITIZER |
| 9 #include <sanitizer/asan_interface.h> | 9 #include <sanitizer/asan_interface.h> |
| 10 #endif // V8_USE_ADDRESS_SANITIZER | 10 #endif // V8_USE_ADDRESS_SANITIZER |
| (...skipping 4236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4247 i::Handle<i::JSFunction> fun; | 4247 i::Handle<i::JSFunction> fun; |
| 4248 if (self->IsJSFunction()) { | 4248 if (self->IsJSFunction()) { |
| 4249 fun = i::Handle<i::JSFunction>::cast(self); | 4249 fun = i::Handle<i::JSFunction>::cast(self); |
| 4250 } else { | 4250 } else { |
| 4251 has_pending_exception = | 4251 has_pending_exception = |
| 4252 !i::Execution::GetFunctionDelegate(isolate, self).ToHandle(&fun); | 4252 !i::Execution::GetFunctionDelegate(isolate, self).ToHandle(&fun); |
| 4253 RETURN_ON_FAILED_EXECUTION(Value); | 4253 RETURN_ON_FAILED_EXECUTION(Value); |
| 4254 recv_obj = self; | 4254 recv_obj = self; |
| 4255 } | 4255 } |
| 4256 Local<Value> result; | 4256 Local<Value> result; |
| 4257 has_pending_exception = | 4257 has_pending_exception = !ToLocal<Value>( |
| 4258 !ToLocal<Value>( | 4258 i::Execution::Call(isolate, fun, recv_obj, argc, args), &result); |
| 4259 i::Execution::Call(isolate, fun, recv_obj, argc, args, true), | |
| 4260 &result); | |
| 4261 RETURN_ON_FAILED_EXECUTION(Value); | 4259 RETURN_ON_FAILED_EXECUTION(Value); |
| 4262 RETURN_ESCAPED(result); | 4260 RETURN_ESCAPED(result); |
| 4263 } | 4261 } |
| 4264 | 4262 |
| 4265 | 4263 |
| 4266 Local<v8::Value> Object::CallAsFunction(v8::Local<v8::Value> recv, int argc, | 4264 Local<v8::Value> Object::CallAsFunction(v8::Local<v8::Value> recv, int argc, |
| 4267 v8::Local<v8::Value> argv[]) { | 4265 v8::Local<v8::Value> argv[]) { |
| 4268 auto context = ContextFromHeapObject(Utils::OpenHandle(this)); | 4266 auto context = ContextFromHeapObject(Utils::OpenHandle(this)); |
| 4269 Local<Value>* argv_cast = reinterpret_cast<Local<Value>*>(argv); | 4267 Local<Value>* argv_cast = reinterpret_cast<Local<Value>*>(argv); |
| 4270 RETURN_TO_LOCAL_UNCHECKED(CallAsFunction(context, recv, argc, argv_cast), | 4268 RETURN_TO_LOCAL_UNCHECKED(CallAsFunction(context, recv, argc, argv_cast), |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4358 MaybeLocal<v8::Value> Function::Call(Local<Context> context, | 4356 MaybeLocal<v8::Value> Function::Call(Local<Context> context, |
| 4359 v8::Local<v8::Value> recv, int argc, | 4357 v8::Local<v8::Value> recv, int argc, |
| 4360 v8::Local<v8::Value> argv[]) { | 4358 v8::Local<v8::Value> argv[]) { |
| 4361 PREPARE_FOR_EXECUTION_WITH_CALLBACK(context, "v8::Function::Call()", Value); | 4359 PREPARE_FOR_EXECUTION_WITH_CALLBACK(context, "v8::Function::Call()", Value); |
| 4362 i::TimerEventScope<i::TimerEventExecute> timer_scope(isolate); | 4360 i::TimerEventScope<i::TimerEventExecute> timer_scope(isolate); |
| 4363 auto self = Utils::OpenHandle(this); | 4361 auto self = Utils::OpenHandle(this); |
| 4364 i::Handle<i::Object> recv_obj = Utils::OpenHandle(*recv); | 4362 i::Handle<i::Object> recv_obj = Utils::OpenHandle(*recv); |
| 4365 STATIC_ASSERT(sizeof(v8::Local<v8::Value>) == sizeof(i::Object**)); | 4363 STATIC_ASSERT(sizeof(v8::Local<v8::Value>) == sizeof(i::Object**)); |
| 4366 i::Handle<i::Object>* args = reinterpret_cast<i::Handle<i::Object>*>(argv); | 4364 i::Handle<i::Object>* args = reinterpret_cast<i::Handle<i::Object>*>(argv); |
| 4367 Local<Value> result; | 4365 Local<Value> result; |
| 4368 has_pending_exception = | 4366 has_pending_exception = !ToLocal<Value>( |
| 4369 !ToLocal<Value>( | 4367 i::Execution::Call(isolate, self, recv_obj, argc, args), &result); |
| 4370 i::Execution::Call(isolate, self, recv_obj, argc, args, true), | |
| 4371 &result); | |
| 4372 RETURN_ON_FAILED_EXECUTION(Value); | 4368 RETURN_ON_FAILED_EXECUTION(Value); |
| 4373 RETURN_ESCAPED(result); | 4369 RETURN_ESCAPED(result); |
| 4374 } | 4370 } |
| 4375 | 4371 |
| 4376 | 4372 |
| 4377 Local<v8::Value> Function::Call(v8::Local<v8::Value> recv, int argc, | 4373 Local<v8::Value> Function::Call(v8::Local<v8::Value> recv, int argc, |
| 4378 v8::Local<v8::Value> argv[]) { | 4374 v8::Local<v8::Value> argv[]) { |
| 4379 auto context = ContextFromHeapObject(Utils::OpenHandle(this)); | 4375 auto context = ContextFromHeapObject(Utils::OpenHandle(this)); |
| 4380 RETURN_TO_LOCAL_UNCHECKED(Call(context, recv, argc, argv), Value); | 4376 RETURN_TO_LOCAL_UNCHECKED(Call(context, recv, argc, argv), Value); |
| 4381 } | 4377 } |
| (...skipping 1752 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6134 } | 6130 } |
| 6135 | 6131 |
| 6136 | 6132 |
| 6137 MaybeLocal<Value> Map::Get(Local<Context> context, Local<Value> key) { | 6133 MaybeLocal<Value> Map::Get(Local<Context> context, Local<Value> key) { |
| 6138 PREPARE_FOR_EXECUTION(context, "Map::Get", Value); | 6134 PREPARE_FOR_EXECUTION(context, "Map::Get", Value); |
| 6139 auto self = Utils::OpenHandle(this); | 6135 auto self = Utils::OpenHandle(this); |
| 6140 Local<Value> result; | 6136 Local<Value> result; |
| 6141 i::Handle<i::Object> argv[] = {Utils::OpenHandle(*key)}; | 6137 i::Handle<i::Object> argv[] = {Utils::OpenHandle(*key)}; |
| 6142 has_pending_exception = | 6138 has_pending_exception = |
| 6143 !ToLocal<Value>(i::Execution::Call(isolate, isolate->map_get(), self, | 6139 !ToLocal<Value>(i::Execution::Call(isolate, isolate->map_get(), self, |
| 6144 arraysize(argv), argv, false), | 6140 arraysize(argv), argv), |
| 6145 &result); | 6141 &result); |
| 6146 RETURN_ON_FAILED_EXECUTION(Value); | 6142 RETURN_ON_FAILED_EXECUTION(Value); |
| 6147 RETURN_ESCAPED(result); | 6143 RETURN_ESCAPED(result); |
| 6148 } | 6144 } |
| 6149 | 6145 |
| 6150 | 6146 |
| 6151 MaybeLocal<Map> Map::Set(Local<Context> context, Local<Value> key, | 6147 MaybeLocal<Map> Map::Set(Local<Context> context, Local<Value> key, |
| 6152 Local<Value> value) { | 6148 Local<Value> value) { |
| 6153 PREPARE_FOR_EXECUTION(context, "Map::Set", Map); | 6149 PREPARE_FOR_EXECUTION(context, "Map::Set", Map); |
| 6154 auto self = Utils::OpenHandle(this); | 6150 auto self = Utils::OpenHandle(this); |
| 6155 i::Handle<i::Object> result; | 6151 i::Handle<i::Object> result; |
| 6156 i::Handle<i::Object> argv[] = {Utils::OpenHandle(*key), | 6152 i::Handle<i::Object> argv[] = {Utils::OpenHandle(*key), |
| 6157 Utils::OpenHandle(*value)}; | 6153 Utils::OpenHandle(*value)}; |
| 6158 has_pending_exception = | 6154 has_pending_exception = !i::Execution::Call(isolate, isolate->map_set(), self, |
| 6159 !i::Execution::Call(isolate, isolate->map_set(), self, arraysize(argv), | 6155 arraysize(argv), argv) |
| 6160 argv, false).ToHandle(&result); | 6156 .ToHandle(&result); |
| 6161 RETURN_ON_FAILED_EXECUTION(Map); | 6157 RETURN_ON_FAILED_EXECUTION(Map); |
| 6162 RETURN_ESCAPED(Local<Map>::Cast(Utils::ToLocal(result))); | 6158 RETURN_ESCAPED(Local<Map>::Cast(Utils::ToLocal(result))); |
| 6163 } | 6159 } |
| 6164 | 6160 |
| 6165 | 6161 |
| 6166 Maybe<bool> Map::Has(Local<Context> context, Local<Value> key) { | 6162 Maybe<bool> Map::Has(Local<Context> context, Local<Value> key) { |
| 6167 PREPARE_FOR_EXECUTION_PRIMITIVE(context, "Map::Has", bool); | 6163 PREPARE_FOR_EXECUTION_PRIMITIVE(context, "Map::Has", bool); |
| 6168 auto self = Utils::OpenHandle(this); | 6164 auto self = Utils::OpenHandle(this); |
| 6169 i::Handle<i::Object> result; | 6165 i::Handle<i::Object> result; |
| 6170 i::Handle<i::Object> argv[] = {Utils::OpenHandle(*key)}; | 6166 i::Handle<i::Object> argv[] = {Utils::OpenHandle(*key)}; |
| 6171 has_pending_exception = | 6167 has_pending_exception = !i::Execution::Call(isolate, isolate->map_has(), self, |
| 6172 !i::Execution::Call(isolate, isolate->map_has(), self, arraysize(argv), | 6168 arraysize(argv), argv) |
| 6173 argv, false).ToHandle(&result); | 6169 .ToHandle(&result); |
| 6174 RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool); | 6170 RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool); |
| 6175 return Just(result->IsTrue()); | 6171 return Just(result->IsTrue()); |
| 6176 } | 6172 } |
| 6177 | 6173 |
| 6178 | 6174 |
| 6179 Maybe<bool> Map::Delete(Local<Context> context, Local<Value> key) { | 6175 Maybe<bool> Map::Delete(Local<Context> context, Local<Value> key) { |
| 6180 PREPARE_FOR_EXECUTION_PRIMITIVE(context, "Map::Delete", bool); | 6176 PREPARE_FOR_EXECUTION_PRIMITIVE(context, "Map::Delete", bool); |
| 6181 auto self = Utils::OpenHandle(this); | 6177 auto self = Utils::OpenHandle(this); |
| 6182 i::Handle<i::Object> result; | 6178 i::Handle<i::Object> result; |
| 6183 i::Handle<i::Object> argv[] = {Utils::OpenHandle(*key)}; | 6179 i::Handle<i::Object> argv[] = {Utils::OpenHandle(*key)}; |
| 6184 has_pending_exception = | 6180 has_pending_exception = !i::Execution::Call(isolate, isolate->map_delete(), |
| 6185 !i::Execution::Call(isolate, isolate->map_delete(), self, arraysize(argv), | 6181 self, arraysize(argv), argv) |
| 6186 argv, false).ToHandle(&result); | 6182 .ToHandle(&result); |
| 6187 RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool); | 6183 RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool); |
| 6188 return Just(result->IsTrue()); | 6184 return Just(result->IsTrue()); |
| 6189 } | 6185 } |
| 6190 | 6186 |
| 6191 | 6187 |
| 6192 Local<Array> Map::AsArray() const { | 6188 Local<Array> Map::AsArray() const { |
| 6193 i::Handle<i::JSMap> obj = Utils::OpenHandle(this); | 6189 i::Handle<i::JSMap> obj = Utils::OpenHandle(this); |
| 6194 i::Isolate* isolate = obj->GetIsolate(); | 6190 i::Isolate* isolate = obj->GetIsolate(); |
| 6195 i::Factory* factory = isolate->factory(); | 6191 i::Factory* factory = isolate->factory(); |
| 6196 LOG_API(isolate, "Map::AsArray"); | 6192 LOG_API(isolate, "Map::AsArray"); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 6213 MaybeLocal<Map> Map::FromArray(Local<Context> context, Local<Array> array) { | 6209 MaybeLocal<Map> Map::FromArray(Local<Context> context, Local<Array> array) { |
| 6214 PREPARE_FOR_EXECUTION(context, "Map::FromArray", Map); | 6210 PREPARE_FOR_EXECUTION(context, "Map::FromArray", Map); |
| 6215 if (array->Length() % 2 != 0) { | 6211 if (array->Length() % 2 != 0) { |
| 6216 return MaybeLocal<Map>(); | 6212 return MaybeLocal<Map>(); |
| 6217 } | 6213 } |
| 6218 i::Handle<i::Object> result; | 6214 i::Handle<i::Object> result; |
| 6219 i::Handle<i::Object> argv[] = {Utils::OpenHandle(*array)}; | 6215 i::Handle<i::Object> argv[] = {Utils::OpenHandle(*array)}; |
| 6220 has_pending_exception = | 6216 has_pending_exception = |
| 6221 !i::Execution::Call(isolate, isolate->map_from_array(), | 6217 !i::Execution::Call(isolate, isolate->map_from_array(), |
| 6222 isolate->factory()->undefined_value(), | 6218 isolate->factory()->undefined_value(), |
| 6223 arraysize(argv), argv, false).ToHandle(&result); | 6219 arraysize(argv), argv) |
| 6220 .ToHandle(&result); |
| 6224 RETURN_ON_FAILED_EXECUTION(Map); | 6221 RETURN_ON_FAILED_EXECUTION(Map); |
| 6225 RETURN_ESCAPED(Local<Map>::Cast(Utils::ToLocal(result))); | 6222 RETURN_ESCAPED(Local<Map>::Cast(Utils::ToLocal(result))); |
| 6226 } | 6223 } |
| 6227 | 6224 |
| 6228 | 6225 |
| 6229 Local<v8::Set> v8::Set::New(Isolate* isolate) { | 6226 Local<v8::Set> v8::Set::New(Isolate* isolate) { |
| 6230 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); | 6227 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); |
| 6231 LOG_API(i_isolate, "Set::New"); | 6228 LOG_API(i_isolate, "Set::New"); |
| 6232 ENTER_V8(i_isolate); | 6229 ENTER_V8(i_isolate); |
| 6233 i::Handle<i::JSSet> obj = i_isolate->factory()->NewJSSet(); | 6230 i::Handle<i::JSSet> obj = i_isolate->factory()->NewJSSet(); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 6248 ENTER_V8(isolate); | 6245 ENTER_V8(isolate); |
| 6249 i::JSSet::Clear(self); | 6246 i::JSSet::Clear(self); |
| 6250 } | 6247 } |
| 6251 | 6248 |
| 6252 | 6249 |
| 6253 MaybeLocal<Set> Set::Add(Local<Context> context, Local<Value> key) { | 6250 MaybeLocal<Set> Set::Add(Local<Context> context, Local<Value> key) { |
| 6254 PREPARE_FOR_EXECUTION(context, "Set::Add", Set); | 6251 PREPARE_FOR_EXECUTION(context, "Set::Add", Set); |
| 6255 auto self = Utils::OpenHandle(this); | 6252 auto self = Utils::OpenHandle(this); |
| 6256 i::Handle<i::Object> result; | 6253 i::Handle<i::Object> result; |
| 6257 i::Handle<i::Object> argv[] = {Utils::OpenHandle(*key)}; | 6254 i::Handle<i::Object> argv[] = {Utils::OpenHandle(*key)}; |
| 6258 has_pending_exception = | 6255 has_pending_exception = !i::Execution::Call(isolate, isolate->set_add(), self, |
| 6259 !i::Execution::Call(isolate, isolate->set_add(), self, arraysize(argv), | 6256 arraysize(argv), argv) |
| 6260 argv, false).ToHandle(&result); | 6257 .ToHandle(&result); |
| 6261 RETURN_ON_FAILED_EXECUTION(Set); | 6258 RETURN_ON_FAILED_EXECUTION(Set); |
| 6262 RETURN_ESCAPED(Local<Set>::Cast(Utils::ToLocal(result))); | 6259 RETURN_ESCAPED(Local<Set>::Cast(Utils::ToLocal(result))); |
| 6263 } | 6260 } |
| 6264 | 6261 |
| 6265 | 6262 |
| 6266 Maybe<bool> Set::Has(Local<Context> context, Local<Value> key) { | 6263 Maybe<bool> Set::Has(Local<Context> context, Local<Value> key) { |
| 6267 PREPARE_FOR_EXECUTION_PRIMITIVE(context, "Set::Has", bool); | 6264 PREPARE_FOR_EXECUTION_PRIMITIVE(context, "Set::Has", bool); |
| 6268 auto self = Utils::OpenHandle(this); | 6265 auto self = Utils::OpenHandle(this); |
| 6269 i::Handle<i::Object> result; | 6266 i::Handle<i::Object> result; |
| 6270 i::Handle<i::Object> argv[] = {Utils::OpenHandle(*key)}; | 6267 i::Handle<i::Object> argv[] = {Utils::OpenHandle(*key)}; |
| 6271 has_pending_exception = | 6268 has_pending_exception = !i::Execution::Call(isolate, isolate->set_has(), self, |
| 6272 !i::Execution::Call(isolate, isolate->set_has(), self, arraysize(argv), | 6269 arraysize(argv), argv) |
| 6273 argv, false).ToHandle(&result); | 6270 .ToHandle(&result); |
| 6274 RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool); | 6271 RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool); |
| 6275 return Just(result->IsTrue()); | 6272 return Just(result->IsTrue()); |
| 6276 } | 6273 } |
| 6277 | 6274 |
| 6278 | 6275 |
| 6279 Maybe<bool> Set::Delete(Local<Context> context, Local<Value> key) { | 6276 Maybe<bool> Set::Delete(Local<Context> context, Local<Value> key) { |
| 6280 PREPARE_FOR_EXECUTION_PRIMITIVE(context, "Set::Delete", bool); | 6277 PREPARE_FOR_EXECUTION_PRIMITIVE(context, "Set::Delete", bool); |
| 6281 auto self = Utils::OpenHandle(this); | 6278 auto self = Utils::OpenHandle(this); |
| 6282 i::Handle<i::Object> result; | 6279 i::Handle<i::Object> result; |
| 6283 i::Handle<i::Object> argv[] = {Utils::OpenHandle(*key)}; | 6280 i::Handle<i::Object> argv[] = {Utils::OpenHandle(*key)}; |
| 6284 has_pending_exception = | 6281 has_pending_exception = !i::Execution::Call(isolate, isolate->set_delete(), |
| 6285 !i::Execution::Call(isolate, isolate->set_delete(), self, arraysize(argv), | 6282 self, arraysize(argv), argv) |
| 6286 argv, false).ToHandle(&result); | 6283 .ToHandle(&result); |
| 6287 RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool); | 6284 RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool); |
| 6288 return Just(result->IsTrue()); | 6285 return Just(result->IsTrue()); |
| 6289 } | 6286 } |
| 6290 | 6287 |
| 6291 | 6288 |
| 6292 Local<Array> Set::AsArray() const { | 6289 Local<Array> Set::AsArray() const { |
| 6293 i::Handle<i::JSSet> obj = Utils::OpenHandle(this); | 6290 i::Handle<i::JSSet> obj = Utils::OpenHandle(this); |
| 6294 i::Isolate* isolate = obj->GetIsolate(); | 6291 i::Isolate* isolate = obj->GetIsolate(); |
| 6295 i::Factory* factory = isolate->factory(); | 6292 i::Factory* factory = isolate->factory(); |
| 6296 LOG_API(isolate, "Set::AsArray"); | 6293 LOG_API(isolate, "Set::AsArray"); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 6310 } | 6307 } |
| 6311 | 6308 |
| 6312 | 6309 |
| 6313 MaybeLocal<Set> Set::FromArray(Local<Context> context, Local<Array> array) { | 6310 MaybeLocal<Set> Set::FromArray(Local<Context> context, Local<Array> array) { |
| 6314 PREPARE_FOR_EXECUTION(context, "Set::FromArray", Set); | 6311 PREPARE_FOR_EXECUTION(context, "Set::FromArray", Set); |
| 6315 i::Handle<i::Object> result; | 6312 i::Handle<i::Object> result; |
| 6316 i::Handle<i::Object> argv[] = {Utils::OpenHandle(*array)}; | 6313 i::Handle<i::Object> argv[] = {Utils::OpenHandle(*array)}; |
| 6317 has_pending_exception = | 6314 has_pending_exception = |
| 6318 !i::Execution::Call(isolate, isolate->set_from_array(), | 6315 !i::Execution::Call(isolate, isolate->set_from_array(), |
| 6319 isolate->factory()->undefined_value(), | 6316 isolate->factory()->undefined_value(), |
| 6320 arraysize(argv), argv, false).ToHandle(&result); | 6317 arraysize(argv), argv) |
| 6318 .ToHandle(&result); |
| 6321 RETURN_ON_FAILED_EXECUTION(Set); | 6319 RETURN_ON_FAILED_EXECUTION(Set); |
| 6322 RETURN_ESCAPED(Local<Set>::Cast(Utils::ToLocal(result))); | 6320 RETURN_ESCAPED(Local<Set>::Cast(Utils::ToLocal(result))); |
| 6323 } | 6321 } |
| 6324 | 6322 |
| 6325 | 6323 |
| 6326 bool Value::IsPromise() const { | 6324 bool Value::IsPromise() const { |
| 6327 auto self = Utils::OpenHandle(this); | 6325 auto self = Utils::OpenHandle(this); |
| 6328 return i::Object::IsPromise(self); | 6326 return i::Object::IsPromise(self); |
| 6329 } | 6327 } |
| 6330 | 6328 |
| 6331 | 6329 |
| 6332 MaybeLocal<Promise::Resolver> Promise::Resolver::New(Local<Context> context) { | 6330 MaybeLocal<Promise::Resolver> Promise::Resolver::New(Local<Context> context) { |
| 6333 PREPARE_FOR_EXECUTION(context, "Promise::Resolver::New", Resolver); | 6331 PREPARE_FOR_EXECUTION(context, "Promise::Resolver::New", Resolver); |
| 6334 i::Handle<i::Object> result; | 6332 i::Handle<i::Object> result; |
| 6335 has_pending_exception = !i::Execution::Call( | 6333 has_pending_exception = |
| 6336 isolate, | 6334 !i::Execution::Call(isolate, isolate->promise_create(), |
| 6337 isolate->promise_create(), | 6335 isolate->factory()->undefined_value(), 0, NULL) |
| 6338 isolate->factory()->undefined_value(), | 6336 .ToHandle(&result); |
| 6339 0, NULL, | |
| 6340 false).ToHandle(&result); | |
| 6341 RETURN_ON_FAILED_EXECUTION(Promise::Resolver); | 6337 RETURN_ON_FAILED_EXECUTION(Promise::Resolver); |
| 6342 RETURN_ESCAPED(Local<Promise::Resolver>::Cast(Utils::ToLocal(result))); | 6338 RETURN_ESCAPED(Local<Promise::Resolver>::Cast(Utils::ToLocal(result))); |
| 6343 } | 6339 } |
| 6344 | 6340 |
| 6345 | 6341 |
| 6346 Local<Promise::Resolver> Promise::Resolver::New(Isolate* isolate) { | 6342 Local<Promise::Resolver> Promise::Resolver::New(Isolate* isolate) { |
| 6347 RETURN_TO_LOCAL_UNCHECKED(New(isolate->GetCurrentContext()), | 6343 RETURN_TO_LOCAL_UNCHECKED(New(isolate->GetCurrentContext()), |
| 6348 Promise::Resolver); | 6344 Promise::Resolver); |
| 6349 } | 6345 } |
| 6350 | 6346 |
| 6351 | 6347 |
| 6352 Local<Promise> Promise::Resolver::GetPromise() { | 6348 Local<Promise> Promise::Resolver::GetPromise() { |
| 6353 i::Handle<i::JSObject> promise = Utils::OpenHandle(this); | 6349 i::Handle<i::JSObject> promise = Utils::OpenHandle(this); |
| 6354 return Local<Promise>::Cast(Utils::ToLocal(promise)); | 6350 return Local<Promise>::Cast(Utils::ToLocal(promise)); |
| 6355 } | 6351 } |
| 6356 | 6352 |
| 6357 | 6353 |
| 6358 Maybe<bool> Promise::Resolver::Resolve(Local<Context> context, | 6354 Maybe<bool> Promise::Resolver::Resolve(Local<Context> context, |
| 6359 Local<Value> value) { | 6355 Local<Value> value) { |
| 6360 PREPARE_FOR_EXECUTION_PRIMITIVE(context, "Promise::Resolver::Resolve", bool); | 6356 PREPARE_FOR_EXECUTION_PRIMITIVE(context, "Promise::Resolver::Resolve", bool); |
| 6361 auto self = Utils::OpenHandle(this); | 6357 auto self = Utils::OpenHandle(this); |
| 6362 i::Handle<i::Object> argv[] = {self, Utils::OpenHandle(*value)}; | 6358 i::Handle<i::Object> argv[] = {self, Utils::OpenHandle(*value)}; |
| 6363 has_pending_exception = i::Execution::Call( | 6359 has_pending_exception = |
| 6364 isolate, | 6360 i::Execution::Call(isolate, isolate->promise_resolve(), |
| 6365 isolate->promise_resolve(), | 6361 isolate->factory()->undefined_value(), arraysize(argv), |
| 6366 isolate->factory()->undefined_value(), | 6362 argv) |
| 6367 arraysize(argv), argv, | 6363 .is_null(); |
| 6368 false).is_null(); | |
| 6369 RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool); | 6364 RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool); |
| 6370 return Just(true); | 6365 return Just(true); |
| 6371 } | 6366 } |
| 6372 | 6367 |
| 6373 | 6368 |
| 6374 void Promise::Resolver::Resolve(Local<Value> value) { | 6369 void Promise::Resolver::Resolve(Local<Value> value) { |
| 6375 auto context = ContextFromHeapObject(Utils::OpenHandle(this)); | 6370 auto context = ContextFromHeapObject(Utils::OpenHandle(this)); |
| 6376 USE(Resolve(context, value)); | 6371 USE(Resolve(context, value)); |
| 6377 } | 6372 } |
| 6378 | 6373 |
| 6379 | 6374 |
| 6380 Maybe<bool> Promise::Resolver::Reject(Local<Context> context, | 6375 Maybe<bool> Promise::Resolver::Reject(Local<Context> context, |
| 6381 Local<Value> value) { | 6376 Local<Value> value) { |
| 6382 PREPARE_FOR_EXECUTION_PRIMITIVE(context, "Promise::Resolver::Resolve", bool); | 6377 PREPARE_FOR_EXECUTION_PRIMITIVE(context, "Promise::Resolver::Resolve", bool); |
| 6383 auto self = Utils::OpenHandle(this); | 6378 auto self = Utils::OpenHandle(this); |
| 6384 i::Handle<i::Object> argv[] = {self, Utils::OpenHandle(*value)}; | 6379 i::Handle<i::Object> argv[] = {self, Utils::OpenHandle(*value)}; |
| 6385 has_pending_exception = i::Execution::Call( | 6380 has_pending_exception = |
| 6386 isolate, | 6381 i::Execution::Call(isolate, isolate->promise_reject(), |
| 6387 isolate->promise_reject(), | 6382 isolate->factory()->undefined_value(), arraysize(argv), |
| 6388 isolate->factory()->undefined_value(), | 6383 argv) |
| 6389 arraysize(argv), argv, | 6384 .is_null(); |
| 6390 false).is_null(); | |
| 6391 RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool); | 6385 RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool); |
| 6392 return Just(true); | 6386 return Just(true); |
| 6393 } | 6387 } |
| 6394 | 6388 |
| 6395 | 6389 |
| 6396 void Promise::Resolver::Reject(Local<Value> value) { | 6390 void Promise::Resolver::Reject(Local<Value> value) { |
| 6397 auto context = ContextFromHeapObject(Utils::OpenHandle(this)); | 6391 auto context = ContextFromHeapObject(Utils::OpenHandle(this)); |
| 6398 USE(Reject(context, value)); | 6392 USE(Reject(context, value)); |
| 6399 } | 6393 } |
| 6400 | 6394 |
| 6401 | 6395 |
| 6402 MaybeLocal<Promise> Promise::Chain(Local<Context> context, | 6396 MaybeLocal<Promise> Promise::Chain(Local<Context> context, |
| 6403 Local<Function> handler) { | 6397 Local<Function> handler) { |
| 6404 PREPARE_FOR_EXECUTION(context, "Promise::Chain", Promise); | 6398 PREPARE_FOR_EXECUTION(context, "Promise::Chain", Promise); |
| 6405 auto self = Utils::OpenHandle(this); | 6399 auto self = Utils::OpenHandle(this); |
| 6406 i::Handle<i::Object> argv[] = {Utils::OpenHandle(*handler)}; | 6400 i::Handle<i::Object> argv[] = {Utils::OpenHandle(*handler)}; |
| 6407 i::Handle<i::Object> result; | 6401 i::Handle<i::Object> result; |
| 6408 has_pending_exception = | 6402 has_pending_exception = !i::Execution::Call(isolate, isolate->promise_chain(), |
| 6409 !i::Execution::Call(isolate, isolate->promise_chain(), self, | 6403 self, arraysize(argv), argv) |
| 6410 arraysize(argv), argv, false).ToHandle(&result); | 6404 .ToHandle(&result); |
| 6411 RETURN_ON_FAILED_EXECUTION(Promise); | 6405 RETURN_ON_FAILED_EXECUTION(Promise); |
| 6412 RETURN_ESCAPED(Local<Promise>::Cast(Utils::ToLocal(result))); | 6406 RETURN_ESCAPED(Local<Promise>::Cast(Utils::ToLocal(result))); |
| 6413 } | 6407 } |
| 6414 | 6408 |
| 6415 | 6409 |
| 6416 Local<Promise> Promise::Chain(Local<Function> handler) { | 6410 Local<Promise> Promise::Chain(Local<Function> handler) { |
| 6417 auto context = ContextFromHeapObject(Utils::OpenHandle(this)); | 6411 auto context = ContextFromHeapObject(Utils::OpenHandle(this)); |
| 6418 RETURN_TO_LOCAL_UNCHECKED(Chain(context, handler), Promise); | 6412 RETURN_TO_LOCAL_UNCHECKED(Chain(context, handler), Promise); |
| 6419 } | 6413 } |
| 6420 | 6414 |
| 6421 | 6415 |
| 6422 MaybeLocal<Promise> Promise::Catch(Local<Context> context, | 6416 MaybeLocal<Promise> Promise::Catch(Local<Context> context, |
| 6423 Local<Function> handler) { | 6417 Local<Function> handler) { |
| 6424 PREPARE_FOR_EXECUTION(context, "Promise::Catch", Promise); | 6418 PREPARE_FOR_EXECUTION(context, "Promise::Catch", Promise); |
| 6425 auto self = Utils::OpenHandle(this); | 6419 auto self = Utils::OpenHandle(this); |
| 6426 i::Handle<i::Object> argv[] = { Utils::OpenHandle(*handler) }; | 6420 i::Handle<i::Object> argv[] = { Utils::OpenHandle(*handler) }; |
| 6427 i::Handle<i::Object> result; | 6421 i::Handle<i::Object> result; |
| 6428 has_pending_exception = | 6422 has_pending_exception = !i::Execution::Call(isolate, isolate->promise_catch(), |
| 6429 !i::Execution::Call(isolate, isolate->promise_catch(), self, | 6423 self, arraysize(argv), argv) |
| 6430 arraysize(argv), argv, false).ToHandle(&result); | 6424 .ToHandle(&result); |
| 6431 RETURN_ON_FAILED_EXECUTION(Promise); | 6425 RETURN_ON_FAILED_EXECUTION(Promise); |
| 6432 RETURN_ESCAPED(Local<Promise>::Cast(Utils::ToLocal(result))); | 6426 RETURN_ESCAPED(Local<Promise>::Cast(Utils::ToLocal(result))); |
| 6433 } | 6427 } |
| 6434 | 6428 |
| 6435 | 6429 |
| 6436 Local<Promise> Promise::Catch(Local<Function> handler) { | 6430 Local<Promise> Promise::Catch(Local<Function> handler) { |
| 6437 auto context = ContextFromHeapObject(Utils::OpenHandle(this)); | 6431 auto context = ContextFromHeapObject(Utils::OpenHandle(this)); |
| 6438 RETURN_TO_LOCAL_UNCHECKED(Catch(context, handler), Promise); | 6432 RETURN_TO_LOCAL_UNCHECKED(Catch(context, handler), Promise); |
| 6439 } | 6433 } |
| 6440 | 6434 |
| 6441 | 6435 |
| 6442 MaybeLocal<Promise> Promise::Then(Local<Context> context, | 6436 MaybeLocal<Promise> Promise::Then(Local<Context> context, |
| 6443 Local<Function> handler) { | 6437 Local<Function> handler) { |
| 6444 PREPARE_FOR_EXECUTION(context, "Promise::Then", Promise); | 6438 PREPARE_FOR_EXECUTION(context, "Promise::Then", Promise); |
| 6445 auto self = Utils::OpenHandle(this); | 6439 auto self = Utils::OpenHandle(this); |
| 6446 i::Handle<i::Object> argv[] = { Utils::OpenHandle(*handler) }; | 6440 i::Handle<i::Object> argv[] = { Utils::OpenHandle(*handler) }; |
| 6447 i::Handle<i::Object> result; | 6441 i::Handle<i::Object> result; |
| 6448 has_pending_exception = | 6442 has_pending_exception = !i::Execution::Call(isolate, isolate->promise_then(), |
| 6449 !i::Execution::Call(isolate, isolate->promise_then(), self, | 6443 self, arraysize(argv), argv) |
| 6450 arraysize(argv), argv, false).ToHandle(&result); | 6444 .ToHandle(&result); |
| 6451 RETURN_ON_FAILED_EXECUTION(Promise); | 6445 RETURN_ON_FAILED_EXECUTION(Promise); |
| 6452 RETURN_ESCAPED(Local<Promise>::Cast(Utils::ToLocal(result))); | 6446 RETURN_ESCAPED(Local<Promise>::Cast(Utils::ToLocal(result))); |
| 6453 } | 6447 } |
| 6454 | 6448 |
| 6455 | 6449 |
| 6456 Local<Promise> Promise::Then(Local<Function> handler) { | 6450 Local<Promise> Promise::Then(Local<Function> handler) { |
| 6457 auto context = ContextFromHeapObject(Utils::OpenHandle(this)); | 6451 auto context = ContextFromHeapObject(Utils::OpenHandle(this)); |
| 6458 RETURN_TO_LOCAL_UNCHECKED(Then(context, handler), Promise); | 6452 RETURN_TO_LOCAL_UNCHECKED(Then(context, handler), Promise); |
| 6459 } | 6453 } |
| 6460 | 6454 |
| (...skipping 1926 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8387 Address callback_address = | 8381 Address callback_address = |
| 8388 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); | 8382 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); |
| 8389 VMState<EXTERNAL> state(isolate); | 8383 VMState<EXTERNAL> state(isolate); |
| 8390 ExternalCallbackScope call_scope(isolate, callback_address); | 8384 ExternalCallbackScope call_scope(isolate, callback_address); |
| 8391 callback(info); | 8385 callback(info); |
| 8392 } | 8386 } |
| 8393 | 8387 |
| 8394 | 8388 |
| 8395 } // namespace internal | 8389 } // namespace internal |
| 8396 } // namespace v8 | 8390 } // namespace v8 |
| OLD | NEW |