| Index: runtime/vm/code_descriptors.cc
|
| ===================================================================
|
| --- runtime/vm/code_descriptors.cc (revision 44434)
|
| +++ runtime/vm/code_descriptors.cc (working copy)
|
| @@ -84,4 +84,41 @@
|
| return map.raw();
|
| }
|
|
|
| +
|
| +RawExceptionHandlers* ExceptionHandlerList::FinalizeExceptionHandlers(
|
| + uword entry_point) const {
|
| + intptr_t num_handlers = Length();
|
| + if (num_handlers == 0) {
|
| + return Object::empty_exception_handlers().raw();
|
| + }
|
| + const ExceptionHandlers& handlers =
|
| + ExceptionHandlers::Handle(ExceptionHandlers::New(num_handlers));
|
| + for (intptr_t i = 0; i < num_handlers; i++) {
|
| + // Assert that every element in the array has been initialized.
|
| + if (list_[i].handler_types == NULL) {
|
| + // Unreachable handler, entry not computed.
|
| + // Initialize it to some meaningful value.
|
| + const bool has_catch_all = false;
|
| + ASSERT((list_[i].outer_try_index == -1) &&
|
| + (list_[i].pc_offset == -1)); // It is uninitialized.
|
| + handlers.SetHandlerInfo(i,
|
| + list_[i].outer_try_index,
|
| + list_[i].pc_offset,
|
| + list_[i].needs_stacktrace,
|
| + has_catch_all);
|
| + handlers.SetHandledTypes(i, Array::null_array());
|
| + } else {
|
| + const bool has_catch_all = ContainsDynamic(*list_[i].handler_types);
|
| + handlers.SetHandlerInfo(i,
|
| + list_[i].outer_try_index,
|
| + list_[i].pc_offset,
|
| + list_[i].needs_stacktrace,
|
| + has_catch_all);
|
| + handlers.SetHandledTypes(i, *list_[i].handler_types);
|
| + }
|
| + }
|
| + return handlers.raw();
|
| +}
|
| +
|
| +
|
| } // namespace dart
|
|
|