File tree Expand file tree Collapse file tree 2 files changed +16
-18
lines changed Expand file tree Collapse file tree 2 files changed +16
-18
lines changed Original file line number Diff line number Diff line change @@ -356,14 +356,13 @@ class Language : public PluginInterface {
356356
357357 virtual llvm::StringRef GetInstanceVariableName () { return {}; }
358358
359- // / Returns true if this SymbolContext should be ignored when setting
360- // / breakpoints by line (number or regex). Helpful for languages that create
361- // / artificial functions without meaningful user code associated with them
362- // / (e.g. code that gets expanded in late compilation stages, like by
363- // / CoroSplitter).
364- virtual bool IgnoreForLineBreakpoints (const SymbolContext &) const {
365- return false ;
366- }
359+ // / Given a symbol context list of matches which supposedly represent the
360+ // / same file and line number in a CU, erases those that should be ignored
361+ // / when setting breakpoints by line (number or regex). Helpful for languages
362+ // / that create split a single source-line into many functions (e.g. call
363+ // / sites transformed by CoroSplitter).
364+ virtual void
365+ FilterForLineBreakpoints (llvm::SmallVectorImpl<SymbolContext> &) const {}
367366
368367 // / Returns a boolean indicating whether two symbol contexts are equal for the
369368 // / purposes of frame comparison. If the plugin has no opinion, it should
Original file line number Diff line number Diff line change @@ -207,16 +207,15 @@ bool operator<(const SourceLoc lhs, const SourceLoc rhs) {
207207void BreakpointResolver::SetSCMatchesByLine (
208208 SearchFilter &filter, SymbolContextList &sc_list, bool skip_prologue,
209209 llvm::StringRef log_ident, uint32_t line, std::optional<uint16_t > column) {
210- llvm::SmallVector<SymbolContext, 16 > all_scs;
211-
212- for (const auto &sc : sc_list) {
213- if (Language::GetGlobalLanguageProperties ()
214- .GetEnableFilterForLineBreakpoints ())
215- if (Language *lang = Language::FindPlugin (sc.GetLanguage ());
216- lang && lang->IgnoreForLineBreakpoints (sc))
217- continue ;
218- all_scs.push_back (sc);
219- }
210+ llvm::SmallVector<SymbolContext, 16 > all_scs (sc_list.begin (), sc_list.end ());
211+
212+ // Let the language plugin filter `sc_list`. Because all symbol contexts in
213+ // sc_list are assumed to belong to the same File, Line and CU, the code below
214+ // assumes they have the same language.
215+ if (!sc_list.IsEmpty () && Language::GetGlobalLanguageProperties ()
216+ .GetEnableFilterForLineBreakpoints ())
217+ if (Language *lang = Language::FindPlugin (sc_list[0 ].GetLanguage ()))
218+ lang->FilterForLineBreakpoints (all_scs);
220219
221220 while (all_scs.size ()) {
222221 uint32_t closest_line = UINT32_MAX;
You can’t perform that action at this time.
0 commit comments