Permalink
Browse files

do not use a nested class for Backtrace::Frame (take 2)

mostly so that .WHAT gives the full name

Now without infinite recursion in the backtrace printer
(contains a workaround for RT #114034)
  • Loading branch information...
1 parent 9315e50 commit d8e7b6628b1995aaba61a065e608fe01b558af1f @moritz moritz committed Jul 8, 2012
Showing with 21 additions and 19 deletions.
  1. +21 −19 src/core/Backtrace.pm
View
@@ -1,28 +1,30 @@
my class Exception { ... }
+my class Backtrace { ... }
-my class Backtrace is List {
- class Frame {
- has Str $.file;
- has Int $.line;
- has Mu $.code;
- has Str $.subname;
-
- method subtype(Frame:D:) {
- my $s = $!code.^name.lc.split('+', 2)[0];
- $s eq 'mu' ?? '' !! $s;
- }
+my class Backtrace::Frame {
+ has Str $.file;
+ has Int $.line;
+ has Mu $.code;
+ has Str $.subname;
- multi method Str(Backtrace::Frame:D:) {
- my $s = self.subtype;
- $s ~= ' ' if $s.chars;
- " in {$s}$.subname at {$.file}:$.line\n"
- }
+ method subtype(Backtrace::Frame:D:) {
+ my $s = $!code.^name.lc.split('+', 2)[0];
+ $s eq 'mu' ?? '' !! $s;
+ }
- method is-hidden(Frame:D:) { $!code.?is_hidden_from_backtrace }
- method is-routine(Frame:D:) { $!code ~~ Routine }
- method is-setting(Frame:D:) { $!file eq 'src/gen/CORE.setting' }
+ multi method Str(Backtrace::Frame:D:) {
+ my $s = self.subtype;
+ $s ~= ' ' if $s.chars;
+ " in {$s}$.subname at {$.file}:$.line\n"
}
+
+ method is-hidden(Backtrace::Frame:D:) { $!code.?is_hidden_from_backtrace }
+ method is-routine(Backtrace::Frame:D:) { $!code ~~ Routine }
+ method is-setting(Backtrace::Frame:D:) { $!file eq 'src/gen/CORE.setting' }
+}
+
+my class Backtrace is List {
proto method new(|$) {*}
multi method new(Exception $e, Int $offset = 0) {

0 comments on commit d8e7b66

Please sign in to comment.