Chromium Code Reviews| Index: runtime/bin/dartutils.cc |
| =================================================================== |
| --- runtime/bin/dartutils.cc (revision 38636) |
| +++ runtime/bin/dartutils.cc (working copy) |
| @@ -711,10 +711,24 @@ |
| // Callback function, gets called from asynchronous script and library |
| // reading code when there is an i/o error. |
| void FUNCTION_NAME(Builtin_AsyncLoadError)(Dart_NativeArguments args) { |
| - // Dart_Handle script_uri = Dart_GetNativeArgument(args, 0); |
| - Dart_Handle error = Dart_GetNativeArgument(args, 1); |
| - Dart_Handle res = Dart_NewUnhandledExceptionError(error); |
| - Dart_PropagateError(res); |
| + // Dart_Handle source_uri = Dart_GetNativeArgument(args, 0); |
| + Dart_Handle library_uri = Dart_GetNativeArgument(args, 1); |
| + Dart_Handle error = Dart_GetNativeArgument(args, 2); |
| + |
| + Dart_Handle library = Dart_LookupLibrary(library_uri); |
| + // If a library with the given uri exists, give it a chance to handle |
| + // the error. If the load requests stems from a deferred library load, |
| + // The and IO error is not fatal. |
|
Ivan Posva
2014/07/31 18:29:04
Comment does not parse.
hausner
2014/07/31 21:12:45
Done.
|
| + if (!Dart_IsError(library)) { |
| + ASSERT(Dart_IsLibrary(library)); |
| + Dart_Handle res = Dart_LibraryHandleError(library, error); |
| + if (Dart_IsNull(res)) { |
| + return; |
| + } |
| + } |
| + // The error was not handled above. Propagate an unhandled exception. |
| + error = Dart_NewUnhandledExceptionError(error); |
| + Dart_PropagateError(error); |
| } |
| @@ -737,7 +751,12 @@ |
| DART_CHECK_VALID(library); |
| result = Dart_LoadSource(library, resolved_script_uri, sourceText); |
| } |
| - if (Dart_IsError(result)) Dart_PropagateError(result); |
| + if (Dart_IsError(result)) { |
| + // TODO(hausner): If compilation/loading errors are supposed to |
| + // be observable by the program, we need to mark the bad library |
| + // with the error instead of propagating it. |
| + Dart_PropagateError(result); |
| + } |
| } |
| @@ -746,6 +765,9 @@ |
| void FUNCTION_NAME(Builtin_DoneLoading)(Dart_NativeArguments args) { |
| Dart_Handle res = Dart_FinalizeLoading(true); |
| if (Dart_IsError(res)) { |
| + // TODO(hausner): If compilation/loading errors are supposed to |
| + // be observable by the program, we need to mark the bad library |
| + // with the error instead of propagating it. |
| Dart_PropagateError(res); |
| } |
| } |