Created
February 13, 2017 10:12
-
-
Save dogbert17/45ba25e367fd3850f350cc008018ba06 to your computer and use it in GitHub Desktop.
MoarVM Panic while running UCD-gen.p6
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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