See this:
https://github.com/rakudo/rakudo/blob/6c76ed0abe352316eb58283fa6ce6b8150fc6830/src/core/Backtrace.pm#L144

It goes like this:

             # now *that's* an evil hack
             next if $file.ends-with('BOOTSTRAP.nqp')
                  || $file.ends-with('QRegex.nqp')
                  || $file.ends-with('Perl6/Ops.nqp');

I think the whole concept of defining what's "interesting" in a backtrace by looking at the file name is pretty evil:

1) It cannot handle non-runtime code that one might want to filter.
2) It hardcodes the definition of what's interesting.
3) You cannot have runtime code that you *want* to be included in the backtrace. 4) It adds a design constraint about what can go into which module of the runtime.
5) The design constraint is nonobvious.
6) If somebody writes his own module in a different location but with a matching name (e.g. they might be writing a wrapper, or an emulator), then these files will be filtered as well.

Maybe it's smarter to have a function annotation (i.e. a trait, I believe) for "don't include this in backtraces"; this would deal with all problems except (2). To address (2), the runtime could offer a setting that defines what traits cause backtracking exclusion.

If a trait is not the way to go, one could deal at least with (5) by adding a comment at the top of the filtered files:

# Functions in this file will not show up in backtraces.
# See the filename filtering logic in Backtrace::AT-POS
# of rakudo/src/core/Backtrace.pm.


I think line 148 has the same kind of evilness (decide what to do depending on the name of the source file), I just couldn't determine what the body of the "if" statement is actually doing:

> if $file.ends-with('NQPHLL.nqp') || $file.ends-with('NQPHLL.moarvm') {

Reply via email to