Chromium Code Reviews| Index: runtime/vm/dart_api_impl.cc |
| diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc |
| index ff628394146695e41eaba62d2a1ff6699da0a638..ddf29f343980accf3c49b434d761003bcfaf9d5a 100644 |
| --- a/runtime/vm/dart_api_impl.cc |
| +++ b/runtime/vm/dart_api_impl.cc |
| @@ -1467,11 +1467,11 @@ DART_EXPORT void Dart_SetStickyError(Dart_Handle error) { |
| Isolate* isolate = thread->isolate(); |
| CHECK_ISOLATE(isolate); |
| NoSafepointScope no_safepoint_scope; |
| - if (isolate->sticky_error() != Error::null()) { |
| + if ((isolate->sticky_error() != Error::null()) && !::Dart_IsNull(error)) { |
| FATAL1("%s expects there to be no sticky error.", CURRENT_FUNC); |
| } |
| - if (!::Dart_IsUnhandledExceptionError(error)) { |
| - FATAL1("%s expects the error to be an unhandled exception error.", |
| + if (!::Dart_IsUnhandledExceptionError(error) && !::Dart_IsNull(error)) { |
| + FATAL1("%s expects the error to be an unhandled exception error or null.", |
| CURRENT_FUNC); |
| } |
| isolate->SetStickyError( |
| @@ -1487,6 +1487,19 @@ DART_EXPORT bool Dart_HasStickyError() { |
| } |
| +DART_EXPORT Dart_Handle Dart_GetStickyError() { |
| + Isolate* I = Isolate::Current(); |
| + CHECK_ISOLATE(I); |
|
siva
2016/09/22 19:43:54
Other places we use the pattern
Thread* T = Thre
|
| + NoSafepointScope no_safepoint_scope; |
| + if (I->sticky_error() != Object::null()) { |
|
siva
2016/09/22 19:43:54
if (I->sticky_error() != Error::null()) {
|
| + Dart_Handle error = |
| + Api::NewHandle(Thread::Current(), I->sticky_error()); |
|
siva
2016/09/22 19:43:54
NewHandle(T, ...);
|
| + return error; |
| + } |
| + return Dart_Null(); |
| +} |
| + |
| + |
| DART_EXPORT void Dart_ExitIsolate() { |
| Thread* T = Thread::Current(); |
| CHECK_ISOLATE(T->isolate()); |