Changeset 7752
- Timestamp:
- 10/27/05 21:19:10 (3 years ago)
- Files:
-
- 35 modified
-
docs/AES/S29draft.pod (modified) (8 diffs)
-
docs/quickref/namespace (modified) (1 diff)
-
examples/cookbook/10subroutines/10-01arguments.p6 (modified) (1 diff)
-
examples/nested_loops/coroutine.p6 (modified) (2 diffs)
-
examples/nested_loops/iterative.p6 (modified) (1 diff)
-
examples/obfu/l33t.p6 (modified) (1 diff)
-
examples/tutorial_gen/tut.p6 (modified) (2 diffs)
-
examples/vmethods/time.p6 (modified) (2 diffs)
-
ext/CGI/lib/CGI.pm (modified) (4 diffs)
-
ext/DateTime/lib/Date.pm (modified) (2 diffs)
-
ext/FA-DFA/lib/FA/DFA.pm (modified) (1 diff)
-
ext/File-Find/lib/File/Find.pm (modified) (1 diff)
-
ext/HTTP-Server-Simple/lib/HTTP/Server/Simple.pm (modified) (1 diff)
-
ext/Rosetta-Incubator/lib/Locale/KeyedText.pm (modified) (2 diffs)
-
ext/Test/lib/Test.pm (modified) (22 diffs)
-
ext/URI/lib/URI/Escape.pm (modified) (1 diff)
-
ext/libwww-perl/lib/HTTP/Headers.pm (modified) (1 diff)
-
ext/libwww-perl/lib/HTTP/Response.pm (modified) (1 diff)
-
perl5/PIL-Run/lib6/P5Runtime/PrimP6.pm (modified) (1 diff)
-
perl5/PIL2JS/lib6/Prelude/JS.pm (modified) (1 diff)
-
src/Pugs/AST/Internals.hs (modified) (2 diffs)
-
src/Pugs/Lexer.hs (modified) (1 diff)
-
src/Pugs/Parser.hs (modified) (3 diffs)
-
src/perl6/Prelude.pm (modified) (6 diffs)
-
t/builtins/undef.t (modified) (1 diff)
-
t/oo/attributes/instance.t (modified) (3 diffs)
-
t/operators/adverbial_modifiers.t (modified) (5 diffs)
-
t/pugsbugs/named_2_positional.t (modified) (1 diff)
-
t/subroutines/defaults.t (modified) (2 diffs)
-
t/subroutines/primitive_named_params.t (modified) (1 diff)
-
t/subroutines/signature_matching.t (modified) (2 diffs)
-
t/subroutines/slurpy_param.t (modified) (4 diffs)
-
t/subroutines/sub_named_params.t (modified) (8 diffs)
-
t/subroutines/subroutine.t (modified) (1 diff)
-
t/syntax/pairs.t (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
docs/AES/S29draft.pod
r6918 r7752 120 120 =item exp 121 121 122 multi sub Num::exp ( Num $exponent : Num +$base) returns Num123 multi sub Math::Basic::exp (: Num ?$exponent = $CALLER::_, Num +$base) returns Num122 multi sub Num::exp ( Num $exponent : Num :$base) returns Num 123 multi sub Math::Basic::exp (: Num ?$exponent = $CALLER::_, Num :$base) returns Num 124 124 125 125 Performs similar to C<$base ** $exponent>. C<$base> defaults to the … … 129 129 =item log 130 130 131 multi sub Num::log ( Num $x : Num +$base) returns Num132 multi sub Math::Basic::log (: Num ?$x = $CALLER::_, Num +$base) returns Num131 multi sub Num::log ( Num $x : Num :$base) returns Num 132 multi sub Math::Basic::log (: Num ?$x = $CALLER::_, Num :$base) returns Num 133 133 134 134 Logarithm of base C<$base>, default Natural. Calling with C<$x == 0> is an … … 186 186 =item I<Standard Trig Functions> 187 187 188 multi sub Num::func ( Num $x : +$base) returns Num189 multi sub Math::Trig::func (: Num ?$x = $CALLER::_, +$base) returns Num188 multi sub Num::func ( Num $x : :$base) returns Num 189 multi sub Math::Trig::func (: Num ?$x = $CALLER::_, :$base) returns Num 190 190 191 191 where I<func> is one of: … … 209 209 =item atan 210 210 211 multi sub Math::Trig::atan (Num $y, Num $x : Num +$base) returns Num211 multi sub Math::Trig::atan (Num $y, Num $x : Num :$base) returns Num 212 212 213 213 This second form of C<atan> computes the arctangent of $y/$x, and takes … … 430 430 multi sub Array::sort( @values is rw, 431 431 *&by 432 : Bit +$inplace432 : Bit :$inplace 433 433 ) returns Array 434 434 435 435 multi sub Array::sort( @values is rw, 436 436 SortCriterion @by 437 : Bit +$inplace437 : Bit :$inplace 438 438 ) returns Array 439 439 440 440 multi sub Array::sort( @values is rw 441 : SortCriterion +$by = &infix:<cmp>,442 Bit +$inplace441 : SortCriterion :$by = &infix:<cmp>, 442 Bit :$inplace 443 443 ) returns Array 444 444 … … 496 496 =item zip 497 497 498 multi sub Lists::zip (: Array *@lists, Bit +$shortest) returns Lazy {498 multi sub Lists::zip (: Array *@lists, Bit :$shortest) returns Lazy { 499 499 gather { 500 500 while $shortest ?? all (@lists) !! any(@lists) { … … 715 715 =item eval 716 716 717 multi sub Control::Basic::eval (: Str $code = $CALLER::_, Str +$lang = 'Perl6')717 multi sub Control::Basic::eval (: Str $code = $CALLER::_, Str :$lang = 'Perl6') 718 718 719 719 Execute C<$code> as if it were code written in C<$lang>. C<Perl6> is the … … 726 726 =item evalfile 727 727 728 multi sub Control::Basic::evalfile (Str $filename : Str +$lang = 'Perl6')728 multi sub Control::Basic::evalfile (Str $filename : Str :$lang = 'Perl6') 729 729 730 730 Behaves like, and replaces Perl 5 C<do EXPR>, with optional C<$lang> -
docs/quickref/namespace
r7136 r7752 168 168 sub foo ($param) { $param =:= $a } 169 169 170 my ($foo, ?$blarb, +$baz) := some_sub();170 my ($foo, ?$blarb, :$baz) := some_sub(); 171 171 172 172 # ::= is binding at compile-time. -
examples/cookbook/10subroutines/10-01arguments.p6
r3174 r7752 48 48 optional('this', 'that'); 49 49 50 sub named_params ($first, +$second, +$third) {50 sub named_params ($first, :$second, :$third) { 51 51 say $first, $second, $third; 52 52 } -
examples/nested_loops/coroutine.p6
r6365 r7752 9 9 my @loops = ([1..3], ['a'..'e'], ['foo', 'bar']); 10 10 11 sub NestedLoop (+ +@loop, +$only_when, +$code) {11 sub NestedLoop (+:@loop, :$only_when, :$code) { 12 12 my &iter = NL2(loop => @loop); 13 13 … … 25 25 } 26 26 27 sub NL2 (+ +@loop) {27 sub NL2 (+:@loop) { 28 28 coro { 29 29 given (@loop.elems) { -
examples/nested_loops/iterative.p6
r4374 r7752 8 8 my @loops = ([1..3], ['a'..'e'], ['foo', 'bar']); 9 9 10 sub NestedLoop (+ +@loop, +$OnlyWhen, +$code) returns Ref{10 sub NestedLoop (+:@loop, :$OnlyWhen, :$code) returns Ref{ 11 11 my @pos = 0 xx (@loop.elems - 1), -1; 12 12 return sub { -
examples/obfu/l33t.p6
r7548 r7752 117 117 }; 118 118 119 method mem($target is rw, + +$wrap, ?$down) {119 method mem($target is rw, +:$wrap, ?$down) { 120 120 ./IIP; 121 121 $target += (@.mem[$.ip] + 1) * ($down ?? -1 !! 1); -
examples/tutorial_gen/tut.p6
r6851 r7752 121 121 122 122 123 sub get_output ( Str $tut_fp, +$each_line = 0 ) {123 sub get_output ( Str $tut_fp, :$each_line = 0 ) { 124 124 my $file_t = slurp $tut_fp || die "Slurp failed '$tut_fp'\n"; 125 125 my @parts = ( $each_line ) ?? split( "\n", $file_t ) !! split( "\n\n", $file_t ); … … 180 180 @parts, @out_parts, 181 181 Str $prev_tut_fn, Str $tut_fn, Str $next_tut_fn, 182 Str $out_dir, Str +$suffix182 Str $out_dir, Str :$suffix 183 183 ) { 184 184 use HTML::Entities; -
examples/vmethods/time.p6
r4677 r7752 63 63 our ¢ury:=¢uries; 64 64 65 multi sub ago (Int $value: Int +$time = time()) {65 multi sub ago (Int $value: Int :$time = time()) { 66 66 $time - $value; 67 67 } … … 69 69 our &until:=&ago; 70 70 71 multi sub since (Int $value: Int +$time = time()) {71 multi sub since (Int $value: Int :$time = time()) { 72 72 $time + $value; 73 73 } -
ext/CGI/lib/CGI.pm
r6852 r7752 58 58 Str ?$status = '200 OK', 59 59 Str ?$charset, 60 Str +$cookies,61 Str +$target,62 +$expires,63 Bool +$nph,60 Str :$cookies, 61 Str :$target, 62 :$expires, 63 Bool :$nph, 64 64 *%extra 65 65 ) returns Str is export { … … 106 106 Str ?$target, 107 107 Str ?$status = "302 Found", 108 Str +$cookie,109 Bool +$nph,108 Str :$cookie, 109 Bool :$nph, 110 110 *%extra 111 111 ) returns Str is export { … … 241 241 } 242 242 243 sub escapeHTML (Str $string, Bool +$newlines) returns Str is export {243 sub escapeHTML (Str $string, Bool :$newlines) returns Str is export { 244 244 # XXX check for $self.escape == 0 245 245 #unless ($self.escape != 0) { return $toencode; } … … 377 377 =over 4 378 378 379 =item B<header ( +$status = '200 OK', +$content_type = 'text/html', +$charset, +$location) returns Str>379 =item B<header (:$status = '200 OK', :$content_type = 'text/html', :$charset, :$location) returns Str> 380 380 381 381 =item B<redirect (Str $location) returns Str> -
ext/DateTime/lib/Date.pm
r6852 r7752 29 29 } 30 30 31 multi submethod BUILD (Int|Real +$epoch) returns Date {31 multi submethod BUILD (Int|Real :$epoch) returns Date { 32 32 $epoch = int $epoch; 33 33 … … 57 57 58 58 # day as Str where { rx:i/^last$/ } 59 multi submethod BUILD (Int +$year, Int +$month = 1, Int|Str +$day is copy = 1) returns Date {59 multi submethod BUILD (Int :$year, Int :$month = 1, Int|Str :$day is copy = 1) returns Date { 60 60 if $day ~~ rx:perl5<i>/^last$/ { 61 61 my @lengths := _is_leap_year($year) ?? @LeapYearMonthLengths !! @MonthLengths; -
ext/FA-DFA/lib/FA/DFA.pm
r7458 r7752 6 6 has bool $.final; 7 7 8 multi method addarc(Str $trigger, +$node = FA::DFA::Node.new --> FA::DFA::Node) {8 multi method addarc(Str $trigger,:$node = FA::DFA::Node.new --> FA::DFA::Node) { 9 9 %.arc{$trigger} = $node; 10 10 $node; -
ext/File-Find/lib/File/Find.pm
r5284 r7752 13 13 submethod BUILD { $.debug = 0 } 14 14 15 method find ( $self: +@dirs, +$wanted_dir, +$wanted_file ) {15 method find ( $self: :@dirs, :$wanted_dir, :$wanted_file ) { 16 16 my @start = @dirs || @{$.dirs}; 17 17 my $wdir_cb = $wanted_dir || $.wanted_dir || sub { 1 }; -
ext/HTTP-Server-Simple/lib/HTTP/Server/Simple.pm
r5284 r7752 7 7 has IO $.remote; 8 8 9 submethod BUILD ( +$port ) {9 submethod BUILD ( :$port ) { 10 10 $.port = $port || 8080; 11 11 } -
ext/Rosetta-Incubator/lib/Locale/KeyedText.pm
r7748 r7752 36 36 ########################################################################### 37 37 38 submethod BUILD (Str +$msg_key is required, Any +%msg_vars = hash()) {38 submethod BUILD (Str :$msg_key is required, Any :%msg_vars = hash()) { 39 39 40 40 throw 'invalid arg' … … 88 88 ########################################################################### 89 89 90 submethod BUILD (Str +@set_names is required,91 Str +@member_names is required) {90 submethod BUILD (Str :@set_names is required, 91 Str :@member_names is required) { 92 92 93 93 throw 'invalid arg' -
ext/Test/lib/Test.pm
r7414 r7752 36 36 ## ok 37 37 38 sub ok (Bool $cond, Str ?$desc, +$todo, +$depends) returns Bool is export {38 sub ok (Bool $cond, Str ?$desc, :$todo, :$depends) returns Bool is export { 39 39 Test::proclaim($cond, $desc, $todo, :depends($depends)); 40 40 } … … 42 42 ## is 43 43 44 sub is (Str $got, Str $expected, Str ?$desc, +$todo, +$depends) returns Bool is export {44 sub is (Str $got, Str $expected, Str ?$desc, :$todo, :$depends) returns Bool is export { 45 45 my $test := $got eq $expected; 46 46 Test::proclaim($test, $desc, $todo, $got, $expected, $depends); … … 48 48 49 49 ## is_deeply 50 sub is_deeply(Any $wanted, Any $got, Str ?$desc, +$todo, +$depends) returns Bool is export {50 sub is_deeply(Any $wanted, Any $got, Str ?$desc, :$todo, :$depends) returns Bool is export { 51 51 # hack for now 52 52 my $got_perl = $got.perl; … … 59 59 ## isnt 60 60 61 sub isnt (Str $got, Str $expected, Str ?$desc, +$todo, +$depends) returns Bool is export {61 sub isnt (Str $got, Str $expected, Str ?$desc, :$todo, :$depends) returns Bool is export { 62 62 my $test := not($got eq $expected); 63 63 Test::proclaim($test, "Should not match: $desc", $todo, $got, $expected, $depends, :negate); … … 66 66 ## like 67 67 68 sub like (Str $got, Rule $expected, Str ?$desc, +$todo, +$depends) returns Bool is export {68 sub like (Str $got, Rule $expected, Str ?$desc, :$todo, :$depends) returns Bool is export { 69 69 my $test := $got ~~ $expected; 70 70 Test::proclaim($test, $desc, $todo, $got, $expected, $depends); … … 73 73 ## unlike 74 74 75 sub unlike (Str $got, Rule $expected, Str ?$desc, +$todo, +$depends) returns Bool is export {75 sub unlike (Str $got, Rule $expected, Str ?$desc, :$todo, :$depends) returns Bool is export { 76 76 my $test := not($got ~~ $expected); 77 77 Test::proclaim($test, $desc, $todo, $got, $expected, $depends, :negate); … … 80 80 ## eval_ok 81 81 82 sub eval_ok (Str $code, Str ?$desc, +$todo, +$depends) returns Bool is export {82 sub eval_ok (Str $code, Str ?$desc, :$todo, :$depends) returns Bool is export { 83 83 my $result := eval $code; 84 84 if (defined $!) { … … 93 93 ## eval_is 94 94 95 sub eval_is (Str $code, Str $expected, Str ?$desc, +$todo, +$depends) returns Bool is export {95 sub eval_is (Str $code, Str $expected, Str ?$desc, :$todo, :$depends) returns Bool is export { 96 96 my $result := eval $code; 97 97 if (defined $!) { … … 106 106 ## cmp_ok 107 107 108 sub cmp_ok (Str $got, Code &compare_func, Str $expected, Str ?$desc, +$todo, +$depends) returns Bool is export {108 sub cmp_ok (Str $got, Code &compare_func, Str $expected, Str ?$desc, :$todo, :$depends) returns Bool is export { 109 109 my $test := compare_func($got, $expected); 110 110 Test::proclaim($test, $desc, $todo, $got, "&compare_func.name() $expected", $depends); … … 113 113 ## isa_ok 114 114 115 sub isa_ok (Any|Junction|Pair $ref is rw, Str $expected_type, Str ?$desc, +$todo, +$depends) returns Bool is export {115 sub isa_ok (Any|Junction|Pair $ref is rw, Str $expected_type, Str ?$desc, :$todo, :$depends) returns Bool is export { 116 116 my $out := defined($desc) ?? $desc !! "The object is-a '$expected_type'"; 117 117 my $test := $ref.isa($expected_type); … … 121 121 ## use_ok 122 122 123 sub use_ok (Str $module, +$todo, +$depends) is export {123 sub use_ok (Str $module, :$todo, :$depends) is export { 124 124 my $caller = caller().package; 125 125 … … 140 140 ## throws ok 141 141 142 sub throws_ok (Code &code, Any $match, Str ?$desc, +$todo, +$depends) returns Bool is export {142 sub throws_ok (Code &code, Any $match, Str ?$desc, :$todo, :$depends) returns Bool is export { 143 143 try { code() }; 144 144 if ($!) { … … 152 152 ## dies_ok 153 153 154 sub dies_ok (Code &code, Str ?$desc, +$todo, +$depends) returns Bool is export {154 sub dies_ok (Code &code, Str ?$desc, :$todo, :$depends) returns Bool is export { 155 155 try { code() }; 156 156 if ($!) { … … 164 164 ## lives ok 165 165 166 sub lives_ok (Code &code, Str ?$desc, +$todo, +$depends) returns Bool is export {166 sub lives_ok (Code &code, Str ?$desc, :$todo, :$depends) returns Bool is export { 167 167 try { code() }; 168 168 if ($!) { … … 176 176 ## misc. test utilities 177 177 178 multi sub skip (Str ?$reason, +$depends) returns Bool is export {178 multi sub skip (Str ?$reason, :$depends) returns Bool is export { 179 179 Test::proclaim(1, "", "skip $reason", :depends($depends)); 180 180 } 181 181 182 multi sub skip (Int $count, Str $reason, +$depends) returns Bool is export {182 multi sub skip (Int $count, Str $reason, :$depends) returns Bool is export { 183 183 for (1 .. $count) { 184 184 # Hack -- PIL2JS doesn't support multisubs correctly yet … … 191 191 } 192 192 193 sub skip_rest (Str ?$reason, +$depends) returns Bool is export {193 sub skip_rest (Str ?$reason, :$depends) returns Bool is export { 194 194 Test::skip($Test::num_of_tests_planned - $Test::num_of_tests_run, $reason // "", :depends($depends)); 195 195 } … … 199 199 } 200 200 201 sub fail (Str ?$desc, +$todo, +$depends) returns Bool is export {201 sub fail (Str ?$desc, :$todo, :$depends) returns Bool is export { 202 202 Test::proclaim(0, $desc, $todo, :depends($depends)); 203 203 } … … 363 363 == Testing Functions 364 364 365 - `use_ok (Str $module, Bool +$todo, Str +$depends) returns Bool`365 - `use_ok (Str $module, Bool :$todo, Str :$depends) returns Bool` 366 366 367 367 *NOTE:* This function currently uses `require()` since Pugs does not yet have 368 368 a proper `use()` builtin. 369 369 370 - `ok (Bool $cond, Str ?$desc, Bool +$todo, Str +$depends) returns Bool`371 372 - `is (Str $got, Str $expected, Str ?$desc, Bool +$todo, Str +$depends) returns Bool`373 374 - `isnt (Str $got, Str $expected, Str ?$desc, Bool +$todo, Str +$depends) returns Bool`375 376 - `like (Str $got, Rule $expected, Str ?$desc, Bool +$todo, Str +$depends) returns Bool is export`377 - `unlike (Str $got, Rule $expected, Str ?$desc, Bool +$todo, Str +$depends) returns Bool is export`370 - `ok (Bool $cond, Str ?$desc, Bool :$todo, Str :$depends) returns Bool` 371 372 - `is (Str $got, Str $expected, Str ?$desc, Bool :$todo, Str :$depends) returns Bool` 373 374 - `isnt (Str $got, Str $expected, Str ?$desc, Bool :$todo, Str :$depends) returns Bool` 375 376 - `like (Str $got, Rule $expected, Str ?$desc, Bool :$todo, Str :$depends) returns Bool is export` 377 - `unlike (Str $got, Rule $expected, Str ?$desc, Bool :$todo, Str :$depends) returns Bool is export` 378 378 379 379 These functions should work with most reg-exps, but given that they are still a … … 381 381 too funky. 382 382 383 - `cmp_ok (Str $got, Code &compare_func, Str $expected, Str ?$desc, Bool +$todo, Str +$depends) returns Bool`383 - `cmp_ok (Str $got, Code &compare_func, Str $expected, Str ?$desc, Bool :$todo, Str :$depends) returns Bool` 384 384 385 385 This function will compare `$got` and `$expected` using `&compare_func`. This will … … 393 393 cmp_ok('test', sub ($a, $b) { ?($a gt $b) }, 'me', '... testing gt on two strings'); 394 394 395 - `isa_ok ($ref, Str $expected_type, Str ?$desc, Bool +$todo, Str +$depends) returns Bool`395 - `isa_ok ($ref, Str $expected_type, Str ?$desc, Bool :$todo, Str :$depends) returns Bool` 396 396 397 397 This function currently on checks with ref() since we do not yet have … … 399 399 maintain backwards compatibility as well. 400 400 401 - `eval_ok (Str $code, Str ?$desc, Bool +$todo, Str +$depends) returns Bool`402 403 - `eval_is (Str $code, Str $expected, Str ?$desc, Bool +$todo, Str +$depends) returns Bool`401 - `eval_ok (Str $code, Str ?$desc, Bool :$todo, Str :$depends) returns Bool` 402 403 - `eval_is (Str $code, Str $expected, Str ?$desc, Bool :$todo, Str :$depends) returns Bool` 404 404 405 405 These functions will eval a code snippet, and then pass the result to is or ok 406 406 on success, or report that the eval was not successful on failure. 407 407 408 - `throws_ok (Code &code, Any $expected, Str ?$desc, Bool +$todo, Str +$depends) returns Bool`408 - `throws_ok (Code &code, Any $expected, Str ?$desc, Bool :$todo, Str :$depends) returns Bool` 409 409 410 410 This function takes a block of code and runs it. It then smart-matches (`~~`) any `$!` 411 411 value with the `$expected` value. 412 412 413 - `dies_ok (Code &code, Str ?$desc, Bool +$todo, Str +$depends) returns Bool`414 415 - `lives_ok (Code &code, Str ?$desc, Bool +$todo, Str +$depends) returns Bool`413 - `dies_ok (Code &code, Str ?$desc, Bool :$todo, Str :$depends) returns Bool` 414 415 - `lives_ok (Code &code, Str ?$desc, Bool :$todo, Str :$depends) returns Bool` 416 416 417 417 These functions both take blocks of code, run the code, and test whether they live or die. … … 447 447 functions and its compliment the fail() function. 448 448 449 - `fail (Str ?$desc, Bool +$todo) returns Bool`449 - `fail (Str ?$desc, Bool :$todo) returns Bool` 450 450 451 451 This is the opposite of pass() -
ext/URI/lib/URI/Escape.pm
r6852 r7752 14 14 #} 15 15 16 multi sub uri_escape (Str $string is copy, Str $unsafe, Bool +$negate) returns Str is export(:DEFAULT) {16 multi sub uri_escape (Str $string is copy, Str $unsafe, Bool :$negate) returns Str is export(:DEFAULT) { 17 17 my $pattern; 18 18 -
ext/libwww-perl/lib/HTTP/Headers.pm
r6918 r7752 302 302 } 303 303 304 method redirect (::?CLASS ::class: Str $location, Str ?$target, Str ?$status = "302 Found", Str +$cookie, Bool +$nph, *%extra) {304 method redirect (::?CLASS ::class: Str $location, Str ?$target, Str ?$status = "302 Found", Str :$cookie, Bool :$nph, *%extra) { 305 305 my $h = ::class.new(); 306 306 -
ext/libwww-perl/lib/HTTP/Response.pm
r6146 r7752 13 13 has $.request is rw; 14 14 15 submethod BUILD ( +$.code, +$.message) { }15 submethod BUILD (:$.code, :$.message) { } 16 16 17 17 method parse (Str $str is copy) { -
perl5/PIL-Run/lib6/P5Runtime/PrimP6.pm
r7181 r7752 99 99 } 100 100 101 multi sub eval($code, +$langpair = undef) {101 multi sub eval($code,:$langpair = undef) { 102 102 my $lang = "Perl6"; 103 103 try { $lang = $langpair.value }; # XXX - pilrun multi-bug workaround -
perl5/PIL2JS/lib6/Prelude/JS.pm
