128 {
132 StackFrame*
frame = frames.NextFrame();
133 if (
frame ==
nullptr)
return false;
134 handler_pc_set_ = false;
136 bool is_catch_all = false;
138 bool is_optimized = false;
139 code_ = nullptr;
141
142 while (!
frame->IsEntryFrame()) {
143 if (
frame->IsDartFrame()) {
144 if (
frame->FindExceptionHandler(thread_, &temp_handler_pc,
146 &is_optimized)) {
147 if (!handler_pc_set_) {
148 handler_pc_set_ = true;
152 if (is_optimized &&
154 StubCode::AsyncExceptionHandler().EntryPoint())) {
157 CatchEntryMovesRefPtr* cached_catch_entry_moves =
158 catch_entry_moves_cache_->
Lookup(pc_);
159 if (cached_catch_entry_moves != nullptr) {
160 cached_catch_entry_moves_ = *cached_catch_entry_moves;
161 }
162 if (cached_catch_entry_moves_.
IsEmpty()) {
163#if defined(DART_PRECOMPILED_RUNTIME)
164
165 ReadCompressedCatchEntryMoves();
166#elif defined(DART_PRECOMPILER)
167
168 if (FLAG_precompiled_mode) {
169 ReadCompressedCatchEntryMoves();
170 } else {
172 }
173#else
174
175 ASSERT(!FLAG_precompiled_mode);
177#endif
178 }
179 }
180 }
182 return true;
183 }
184 }
185 }
186 frame = frames.NextFrame();
188 }
190 if (!handler_pc_set_) {
194 }
195
197 return handler_pc_set_;
198 }
intptr_t num_variables() const
void GetCatchEntryMovesFromDeopt(intptr_t num_vars, StackFrame *frame)
CatchEntryMovesCache * catch_entry_moves_cache()
Isolate * isolate() const
constexpr uword kUwordMax