| 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 <stdlib.h> | 5 #include <stdlib.h> |
| 6 | 6 |
| 7 #include "src/v8.h" | 7 #include "src/v8.h" |
| 8 | 8 |
| 9 #include "src/ast.h" | 9 #include "src/ast.h" |
| 10 #include "src/base/platform/platform.h" | 10 #include "src/base/platform/platform.h" |
| (...skipping 2254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2265 | 2265 |
| 2266 void Isolate::SetPromiseRejectCallback(PromiseRejectCallback callback) { | 2266 void Isolate::SetPromiseRejectCallback(PromiseRejectCallback callback) { |
| 2267 promise_reject_callback_ = callback; | 2267 promise_reject_callback_ = callback; |
| 2268 } | 2268 } |
| 2269 | 2269 |
| 2270 | 2270 |
| 2271 void Isolate::ReportPromiseReject(Handle<JSObject> promise, | 2271 void Isolate::ReportPromiseReject(Handle<JSObject> promise, |
| 2272 Handle<Object> value, | 2272 Handle<Object> value, |
| 2273 v8::PromiseRejectEvent event) { | 2273 v8::PromiseRejectEvent event) { |
| 2274 if (promise_reject_callback_ == NULL) return; | 2274 if (promise_reject_callback_ == NULL) return; |
| 2275 promise_reject_callback_(v8::Utils::PromiseToLocal(promise), | 2275 Handle<JSArray> stack_trace; |
| 2276 v8::Utils::ToLocal(value), event); | 2276 if (event == v8::kPromiseRejectWithNoHandler && value->IsJSObject()) { |
| 2277 Handle<JSObject> error_obj = Handle<JSObject>::cast(value); |
| 2278 Handle<Name> key = factory()->detailed_stack_trace_symbol(); |
| 2279 Handle<Object> property = JSObject::GetDataProperty(error_obj, key); |
| 2280 if (property->IsJSArray()) stack_trace = Handle<JSArray>::cast(property); |
| 2281 } |
| 2282 promise_reject_callback_(v8::PromiseRejectMessage( |
| 2283 v8::Utils::PromiseToLocal(promise), event, v8::Utils::ToLocal(value), |
| 2284 v8::Utils::StackTraceToLocal(stack_trace))); |
| 2277 } | 2285 } |
| 2278 | 2286 |
| 2279 | 2287 |
| 2280 void Isolate::EnqueueMicrotask(Handle<Object> microtask) { | 2288 void Isolate::EnqueueMicrotask(Handle<Object> microtask) { |
| 2281 DCHECK(microtask->IsJSFunction() || microtask->IsCallHandlerInfo()); | 2289 DCHECK(microtask->IsJSFunction() || microtask->IsCallHandlerInfo()); |
| 2282 Handle<FixedArray> queue(heap()->microtask_queue(), this); | 2290 Handle<FixedArray> queue(heap()->microtask_queue(), this); |
| 2283 int num_tasks = pending_microtask_count(); | 2291 int num_tasks = pending_microtask_count(); |
| 2284 DCHECK(num_tasks <= queue->length()); | 2292 DCHECK(num_tasks <= queue->length()); |
| 2285 if (num_tasks == 0) { | 2293 if (num_tasks == 0) { |
| 2286 queue = factory()->NewFixedArray(8); | 2294 queue = factory()->NewFixedArray(8); |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2386 if (prev_ && prev_->Intercept(flag)) return true; | 2394 if (prev_ && prev_->Intercept(flag)) return true; |
| 2387 // Then check whether this scope intercepts. | 2395 // Then check whether this scope intercepts. |
| 2388 if ((flag & intercept_mask_)) { | 2396 if ((flag & intercept_mask_)) { |
| 2389 intercepted_flags_ |= flag; | 2397 intercepted_flags_ |= flag; |
| 2390 return true; | 2398 return true; |
| 2391 } | 2399 } |
| 2392 return false; | 2400 return false; |
| 2393 } | 2401 } |
| 2394 | 2402 |
| 2395 } } // namespace v8::internal | 2403 } } // namespace v8::internal |
| OLD | NEW |