| 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 <fstream> // NOLINT(readability/streams) | 7 #include <fstream> // NOLINT(readability/streams) |
| 8 #include <sstream> | 8 #include <sstream> |
| 9 | 9 |
| 10 #include "src/v8.h" | 10 #include "src/v8.h" |
| (...skipping 1537 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1548 } | 1548 } |
| 1549 | 1549 |
| 1550 | 1550 |
| 1551 Handle<Object> Isolate::GetPromiseOnStackOnThrow() { | 1551 Handle<Object> Isolate::GetPromiseOnStackOnThrow() { |
| 1552 Handle<Object> undefined = factory()->undefined_value(); | 1552 Handle<Object> undefined = factory()->undefined_value(); |
| 1553 ThreadLocalTop* tltop = thread_local_top(); | 1553 ThreadLocalTop* tltop = thread_local_top(); |
| 1554 if (tltop->promise_on_stack_ == NULL) return undefined; | 1554 if (tltop->promise_on_stack_ == NULL) return undefined; |
| 1555 StackHandler* promise_try = tltop->promise_on_stack_->handler(); | 1555 StackHandler* promise_try = tltop->promise_on_stack_->handler(); |
| 1556 // Find the top-most try-catch handler. | 1556 // Find the top-most try-catch handler. |
| 1557 StackHandler* handler = StackHandler::FromAddress(Isolate::handler(tltop)); | 1557 StackHandler* handler = StackHandler::FromAddress(Isolate::handler(tltop)); |
| 1558 do { | 1558 // Throwing inside a Promise only leads to a reject if not caught by an inner |
| 1559 if (handler == promise_try) { | 1559 // try-catch or try-finally. |
| 1560 return tltop->promise_on_stack_->promise(); | 1560 if (handler == promise_try) return tltop->promise_on_stack_->promise(); |
| 1561 } | |
| 1562 handler = handler->next(); | |
| 1563 // Throwing inside a Promise can be intercepted by an inner try-catch, so | |
| 1564 // we stop at the first try-catch handler. | |
| 1565 } while (handler != NULL && !handler->is_catch()); | |
| 1566 return undefined; | 1561 return undefined; |
| 1567 } | 1562 } |
| 1568 | 1563 |
| 1569 | 1564 |
| 1570 void Isolate::SetCaptureStackTraceForUncaughtExceptions( | 1565 void Isolate::SetCaptureStackTraceForUncaughtExceptions( |
| 1571 bool capture, | 1566 bool capture, |
| 1572 int frame_limit, | 1567 int frame_limit, |
| 1573 StackTrace::StackTraceOptions options) { | 1568 StackTrace::StackTraceOptions options) { |
| 1574 capture_stack_trace_for_uncaught_exceptions_ = capture; | 1569 capture_stack_trace_for_uncaught_exceptions_ = capture; |
| 1575 stack_trace_for_uncaught_exceptions_frame_limit_ = frame_limit; | 1570 stack_trace_for_uncaught_exceptions_frame_limit_ = frame_limit; |
| (...skipping 1083 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2659 if (prev_ && prev_->Intercept(flag)) return true; | 2654 if (prev_ && prev_->Intercept(flag)) return true; |
| 2660 // Then check whether this scope intercepts. | 2655 // Then check whether this scope intercepts. |
| 2661 if ((flag & intercept_mask_)) { | 2656 if ((flag & intercept_mask_)) { |
| 2662 intercepted_flags_ |= flag; | 2657 intercepted_flags_ |= flag; |
| 2663 return true; | 2658 return true; |
| 2664 } | 2659 } |
| 2665 return false; | 2660 return false; |
| 2666 } | 2661 } |
| 2667 | 2662 |
| 2668 } } // namespace v8::internal | 2663 } } // namespace v8::internal |
| OLD | NEW |