Skip to content

Instantly share code, notes, and snippets.

@dogbert17
Created February 13, 2017 10:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dogbert17/45ba25e367fd3850f350cc008018ba06 to your computer and use it in GitHub Desktop.
Save dogbert17/45ba25e367fd3850f350cc008018ba06 to your computer and use it in GitHub Desktop.
MoarVM Panic while running UCD-gen.p6
Writing source/bitfield.c…
Writing source/bitfield.h…
Took 480.024413 seconds.
Converting data to JSON...
Writing source/binary-properties.Dump.p6…
Breakpoint 1, MVM_panic (exitCode=exitCode@entry=17, messageFormat=messageFormat@entry=0xb7d2dd14 "Internal error: invalid thread ID %d in GC work pass") at src/core/exceptions.c:779
779 void MVM_panic(MVMint32 exitCode, const char *messageFormat, ...) {
(gdb) bt
#0 MVM_panic (exitCode=exitCode@entry=17, messageFormat=messageFormat@entry=0xb7d2dd14 "Internal error: invalid thread ID %d in GC work pass") at src/core/exceptions.c:779
#1 0xb7c4ce15 in push_work_to_thread_in_tray (tc=<optimized out>, work=0x3fb7e718, target=<optimized out>) at src/gc/collect.c:422
#2 pass_leftover_work (wtp=<optimized out>, tc=<optimized out>) at src/gc/collect.c:484
#3 MVM_gc_collect (tc=0x804c450, what_to_do=0 '\000', gen=gen@entry=0 '\000') at src/gc/collect.c:149
#4 0xb7c47be6 in run_gc (tc=tc@entry=0x804c450, what_to_do=what_to_do@entry=0 '\000') at src/gc/orchestrate.c:328
#5 0xb7c48808 in MVM_gc_enter_from_allocator (tc=tc@entry=0x804c450) at src/gc/orchestrate.c:462
#6 0xb7c48b00 in MVM_gc_allocate_nursery (tc=tc@entry=0x804c450, size=size@entry=32) at src/gc/allocation.c:32
#7 0xb7c48b7a in MVM_gc_allocate (size=32, tc=0x804c450) at src/gc/allocation.h:13
#8 MVM_gc_allocate_zeroed (tc=tc@entry=0x804c450, size=32) at src/gc/allocation.c:49
#9 0xb7c48e54 in MVM_gc_allocate_object (tc=0x804c450, st=<optimized out>) at src/gc/allocation.c:86
#10 0xb7c625e9 in MVM_repr_alloc_init (tc=tc@entry=0x804c450, type=0x80751b0) at src/6model/reprconv.c:13
#11 0xb7cd01ee in collapse_strands (tc=tc@entry=0x804c450, orig=<optimized out>) at src/strings/ops.c:64
#12 0xb7cd1df2 in MVM_string_repeat (tc=0x804c450, a=<optimized out>, count=4) at src/strings/ops.c:513
#13 0xb7c07cc1 in MVM_interp_run (tc=tc@entry=0x804c450, initial_invoke=initial_invoke@entry=0xb7cf8ab0 <toplevel_initial_invoke>, invoke_data=0xb7d2dd14) at src/core/interp.c:1498
#14 0xb7cf9686 in MVM_vm_run_file (instance=0x804c008, filename=0xbffff2a7 "/home/dogbert/repos/rakudo/perl6.moarvm") at src/moar.c:309
#15 0x08048d39 in main (argc=10, argv=0xbffff054) at src/main.c:192
(gdb) frame 3
#3 MVM_gc_collect (tc=0x804c450, what_to_do=0 '\000', gen=gen@entry=0 '\000') at src/gc/collect.c:149
149 pass_leftover_work(tc, &wtp);
(gdb) p MVM_dump_backtrace(tc)
at <unknown>:1 (./CORE.setting.moarvm:infix:<x>)
from /home/dogbert/repos/rakudo/install/share/perl6/site/lib/Data/Dump.pm6 (Data::Dump):37 (/home/dogbert/repos/rakudo/install/share/perl6/site/lib/.precomp/FDFD75F043950ADFCCED88821793028C685F626E.1486975178.94225/93/93241B901E26C9DE8481C35F64121EA44640525D:Dump)
from /home/dogbert/repos/rakudo/install/share/perl6/site/lib/Data/Dump.pm6 (Data::Dump):56 (/home/dogbert/repos/rakudo/install/share/perl6/site/lib/.precomp/FDFD75F043950ADFCCED88821793028C685F626E.1486975178.94225/93/93241B901E26C9DE8481C35F64121EA44640525D:)
from SETTING::src/core/Any-iterable-methods.pm:466 (./CORE.setting.moarvm:)
from SETTING::src/core/Any-iterable-methods.pm:454 (./CORE.setting.moarvm:sink-all)
from SETTING::src/core/Seq.pm:184 (./CORE.setting.moarvm:sink)
from /home/dogbert/repos/rakudo/install/share/perl6/site/lib/Data/Dump.pm6 (Data::Dump):55 (/home/dogbert/repos/rakudo/install/share/perl6/site/lib/.precomp/FDFD75F043950ADFCCED88821793028C685F626E.1486975178.94225/93/93241B901E26C9DE8481C35F64121EA44640525D:Dump)
from /home/dogbert/repos/rakudo/install/share/perl6/site/lib/Data/Dump.pm6 (Data::Dump):45 (/home/dogbert/repos/rakudo/install/share/perl6/site/lib/.precomp/FDFD75F043950ADFCCED88821793028C685F626E.1486975178.94225/93/93241B901E26C9DE8481C35F64121EA44640525D:)
from /home/dogbert/repos/rakudo/install/share/perl6/site/lib/Data/Dump.pm6 (Data::Dump):45 (/home/dogbert/repos/rakudo/install/share/perl6/site/lib/.precomp/FDFD75F043950ADFCCED88821793028C685F626E.1486975178.94225/93/93241B901E26C9DE8481C35F64121EA44640525D:)
from SETTING::src/core/Any-iterable-methods.pm:466 (./CORE.setting.moarvm:)
from SETTING::src/core/Any-iterable-methods.pm:454 (./CORE.setting.moarvm:sink-all)
from SETTING::src/core/Seq.pm:184 (./CORE.setting.moarvm:sink)
from /home/dogbert/repos/rakudo/install/share/perl6/site/lib/Data/Dump.pm6 (Data::Dump):42 (/home/dogbert/repos/rakudo/install/share/perl6/site/lib/.precomp/FDFD75F043950ADFCCED88821793028C685F626E.1486975178.94225/93/93241B901E26C9DE8481C35F64121EA44640525D:)
from /home/dogbert/repos/rakudo/install/share/perl6/site/lib/Data/Dump.pm6 (Data::Dump):38 (/home/dogbert/repos/rakudo/install/share/perl6/site/lib/.precomp/FDFD75F043950ADFCCED88821793028C685F626E.1486975178.94225/93/93241B901E26C9DE8481C35F64121EA44640525D:Dump)
from /home/dogbert/repos/rakudo/install/share/perl6/site/lib/Data/Dump.pm6 (Data::Dump):45 (/home/dogbert/repos/rakudo/install/share/perl6/site/lib/.precomp/FDFD75F043950ADFCCED88821793028C685F626E.1486975178.94225/93/93241B901E26C9DE8481C35F64121EA44640525D:)
from /home/dogbert/repos/rakudo/install/share/perl6/site/lib/Data/Dump.pm6 (Data::Dump):45 (/home/dogbert/repos/rakudo/install/share/perl6/site/lib/.precomp/FDFD75F043950ADFCCED88821793028C685F626E.1486975178.94225/93/93241B901E26C9DE8481C35F64121EA44640525D:)
from SETTING::src/core/Any-iterable-methods.pm:466 (./CORE.setting.moarvm:)
from SETTING::src/core/Any-iterable-methods.pm:454 (./CORE.setting.moarvm:sink-all)
from SETTING::src/core/Seq.pm:184 (./CORE.setting.moarvm:sink)
from /home/dogbert/repos/rakudo/install/share/perl6/site/lib/Data/Dump.pm6 (Data::Dump):42 (/home/dogbert/repos/rakudo/install/share/perl6/site/lib/.precomp/FDFD75F043950ADFCCED88821793028C685F626E.1486975178.94225/93/93241B901E26C9DE8481C35F64121EA44640525D:)
from /home/dogbert/repos/rakudo/install/share/perl6/site/lib/Data/Dump.pm6 (Data::Dump):38 (/home/dogbert/repos/rakudo/install/share/perl6/site/lib/.precomp/FDFD75F043950ADFCCED88821793028C685F626E.1486975178.94225/93/93241B901E26C9DE8481C35F64121EA44640525D:Dump)
from ../UCD/UCD-gen.p6:880 (<ephemeral file>:)
from SETTING::src/core/Any-iterable-methods.pm:466 (./CORE.setting.moarvm:)
from SETTING::src/core/Any-iterable-methods.pm:454 (./CORE.setting.moarvm:sink-all)
from SETTING::src/core/Seq.pm:184 (./CORE.setting.moarvm:sink)
from ../UCD/UCD-gen.p6:878 (<ephemeral file>:dump-json)
from ../UCD/UCD-gen.p6:131 (<ephemeral file>:MAIN)
from SETTING::src/core/Main.pm:195 (./CORE.setting.moarvm:MAIN_HELPER)
from ../UCD/UCD-gen.p6:872 (<ephemeral file>:<unit>)
from ../UCD/UCD-gen.p6:1 (<ephemeral file>:<unit-outer>)
from gen/moar/stage2/NQPHLL.nqp:1584 (/home/dogbert/repos/rakudo/install/share/nqp/lib/NQPHLL.moarvm:eval)
from gen/moar/stage2/NQPHLL.nqp:1787 (/home/dogbert/repos/rakudo/install/share/nqp/lib/NQPHLL.moarvm:evalfiles)
from gen/moar/stage2/NQPHLL.nqp:1681 (/home/dogbert/repos/rakudo/install/share/nqp/lib/NQPHLL.moarvm:command_eval)
from src/Perl6/Compiler.nqp:42 (./blib/Perl6/Compiler.moarvm:command_eval)
from gen/moar/stage2/NQPHLL.nqp:1655 (/home/dogbert/repos/rakudo/install/share/nqp/lib/NQPHLL.moarvm:command_line)
from gen/moar/main.nqp:47 (/home/dogbert/repos/rakudo/perl6.moarvm:MAIN)
from gen/moar/main.nqp:38 (/home/dogbert/repos/rakudo/perl6.moarvm:<mainline>)
from <unknown>:1 (/home/dogbert/repos/rakudo/perl6.moarvm:<main>)
from <unknown>:1 (/home/dogbert/repos/rakudo/perl6.moarvm:<entry>)
$1 = void
(gdb)
1 module Data::Dump {
2 my $colorizor = sub (Str $s) { '' };
3
4 try {
5 require Terminal::ANSIColor;
6 $colorizor = GLOBAL::Terminal::ANSIColor::EXPORT::DEFAULT::<&color>;
7 }
8
9 sub re-o ($o) {
10 $o // 'undef';
11 }
12
13 sub key ($o) {
14 return $colorizor("red") ~ re-o($o) ~ $colorizor("reset");
15 }
16
17 sub sym ($o) {
18 return $colorizor("bold white") ~ re-o($o) ~ $colorizor("reset");
19 }
20
21 sub val ($o) {
22 return $colorizor("blue") ~ re-o($o) ~ $colorizor("reset");
23 }
24
25 sub what ($o) {
26 return $colorizor("yellow") ~ re-o($o) ~ $colorizor("reset");
27 }
28
29 sub Dump ($obj, Int :$indent? = 2, Int :$ilevel? = 0, Bool :$color? = True, Int :$max-recursion? = 50, Bool :$gist = False, Bool :$skip-methods = False) is export {
30 return '...' if $max-recursion == $ilevel;
31 temp $colorizor = sub (Str $s) { '' } unless $color;
32 try {
33 require 'Terminal::ANSIColor';
34 };
35 my Str $out = '';
36 my Str $space = (' ' x $indent) x $ilevel;
37 my Str $spac2 = (' ' x $indent) x ($ilevel+1);
38 if $obj.WHAT ~~ Hash && !$gist {
39 my @keys = $obj.keys.sort;
40 my $spacing = @keys.map({ .chars }).max;
41 $out ~= "{$space}{sym('{')}" ~ (@keys.elems > 0 ?? "\n" !! "");
42 for @keys -> $key {
43 my $chars = $key.chars;
44 $out ~= $spac2 ~ "{key($chars ?? $key !! '""')}{ ' ' x ($spacing - $key.chars)} {sym('=>')} ";
45 $out ~= (try { Dump($obj{$key}, :$gist, :$color, :$max-recursion, :$indent, :$skip-methods, ilevel => $ilevel+1).trim; } // 'failure') ~ ",\n";
46 }
47 $out ~= "{@keys.elems > 0 ?? $space !! ' '}{sym('}')}\n";
48 } elsif $obj.WHAT ~~ Pair && !$gist {
49 my $key = $obj.key.WHAT ~~ Str
50 ?? key($obj.key eq '' ?? '""' !! $obj.key)
51 !! Dump($obj.key, :$gist, :$max-recursion, :$indent, :$skip-methods, :$color);
52 $out ~= $key ~ ' => ' ~ Dump($obj.value, :$gist, :$max-recursion, :$indent, :$skip-methods, :$color);
53 } elsif $obj.WHAT ~~ List && !$gist {
54 $out ~= "{$space}{sym('[')}" ~ (@($obj).elems > 0 ?? "\n" !! "");
55 for @($obj) -> $o {
56 $out ~= Dump($o, :$color, :$gist, :$max-recursion, :$indent, :$skip-methods, ilevel => $ilevel+1).trim-trailing ~ ",\n";
57 }
58 $out ~= "{@($obj).elems > 0 ?? $space !! ' '}{sym(']')}\n";
59 } elsif $obj.WHAT ~~ any(Int, Str, Rat, Numeric) && !$gist {
60 my $what = $obj.WHAT.^name;
61 $out ~= "{$space}{val($obj.perl // '<undef>')}\.{what($what)}\n";
62 } elsif Any ~~ $obj.WHAT && !$gist {
63 $out ~= $space ~ "(Any)\n";
64 } elsif Method ~~ $obj.WHAT && !$gist {
65 $out ~= $space ~ "{$obj.perl.subst(/'{' .+? $/, '')}\n";
66 } elsif $obj ~~ IO::Path && !$gist {
67 my $what = $obj.WHAT.^name;
68 $out ~= “{$space}{val($obj.perl // '<undef>')}\.{what($what)} :abspath("{$obj.abspath}")\n”;
69 }
70 else {
71 $out ~= $space ~ sym("{$obj.^name} :: (") ~ "\n";
72 if $gist {
73 $out ~= "{$spac2}{$obj.gist},\n";
74 } else {
75 my @attrs = try { $obj.^attributes.sort({ $^x.Str cmp $^y.Str }) } // @();
76 my @meths = try { $obj.^methods.grep({ .^can('Str') }).sort({ $^x.gist.Str cmp $^y.gist.Str }) } // @();
77 my @attr-len = @attrs.map({ next unless .so && .^can('Str'); .Str.chars });
78 my @meth-len = @meths.map({ next unless .^can('gist'); .gist.Str.chars });
79 my $spacing = (@attr-len, @meth-len).max;
80
81
82 for @attrs -> $attr {
83 $out ~= "{$spac2}{key($attr)}{ ' ' x ($spacing - ($attr.so ?? $attr.Str.chars !! 0)) } => ";
84 $out ~= ( try { Dump($attr.get_value($obj), :$color, :$gist, :$max-recursion, :$indent, :$skip-methods, ilevel => $ilevel+1).trim; } //
85 try { Dump($attr.hash, :$color, :$gist, :$max-recursion, :$indent, :$skip-methods, ilevel => $ilevel+1).trim; } //
86 'undefined') ~ ",\n";
87 }
88
89 $out ~= "\n" if @attrs.elems > 0;
90 if !$skip-methods {
91 for @meths -> $meth {
92 my $sig = $meth.signature.params[1..*-2].map({
93 .gist.Str.subst(/'{ ... }'/, .default ~~ Callable ?? .default.() !! '');
94 }).join(sym(', ') ~ $colorizor('blue'));
95
96 $out ~= "{$spac2}{sym('method')} {key($meth.gist.Str)} ({val($sig)}) returns {what($meth.returns.WHAT.^name)} {sym('{...}')},\n";
97 }
98 }
99 }
100
101 $out ~= "{$space}{sym(')')}\n";
102 }
103 $out .=trim if ($ilevel == 0);
104 return $out;
105 }
106 }
107
108 =begin pod
109
110 =head1 Data::Dump for perl6
111
112 that's right folks, here's a quicky for your data dump needs. if you have
113 Term::ANSIColor installed then the output will be so colorful your eyes
114 might bleed.
115
116 feel free to submit bugs or make suggestions, if you submit a bug please
117 provide a concise example that replicates the problem and i'll add some
118 tests and make this thing better.
119
120 =head2 options
121
122 =item C<indent>
123
124 default: C<2>
125
126 perl6
127 <...>
128 say Dump({ some => object }, :indent(4));
129 <...>
130
131 =item C<max-recursion>
132
133 default: C<50>
134
135 perl6
136 <...>
137 say Dump({ some => object }, :max-recursion(3));
138 <...>
139
140 =item C<color>
141
142 default: C<True>
143
144 This will override the default decision to use color on the output if
145 C<Term::ANSIColor> is installed. Passing a value of C<False> will ensure
146 that the output is vanilla.
147
148 perl6
149 <...>
150 say Dump({ some => object }, :color(False));
151 <...>
152
153 =head3 C<gist>
154
155 default: C<False>
156
157 This will override the default object determination and output and use the output of C<.gist>
158
159 perl6
160 <...>
161 say Dump({ some => object }, :gist);
162 <...>
163
164
165
166 =head2 usage
167
168 use Data::Dump;
169
170 say Dump(%(
171 key1 => 'value1',
172 key256 => 1,
173 ));
174
175 output:
176
177 {
178 key1 => "value1".Str,
179 key256 => 1.Int,
180 }
181
182 note: if you have Term::ANSIColor installed then it's going to be amazing.
183 so, prepare yourself.
184
185 =head2 oh you want to C<Dump> your custom class?
186
187 here you go, dude
188
189 use Data::Dump;
190
191 class E {
192 has $.public;
193 has Int $!private = 5;
194 method r(Str $a) { };
195 method s($b, :$named? = 5) { };
196 method e returns Int { say $!private; };
197 };
198
199 say Dump(E.new);
200
201 output:
202
203 E :: (
204 $!private => 5.Int,
205 $!public => (Any),
206
207 method e () returns Int {...},
208 method public () returns Mu {...},
209 method r (Str $a) returns Mu {...},
210 method s (Any $b, Any :named($named) = 5) returns Mu {...},
211 )
212
213 =end pod
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment