#!/usr/bin/perl # Hack. Use this as HARNESS_PUGS for run-smoke.pl. # (*Only* for run-smoke.pl, as this script highly depends on the # exact commandline options given.) # Searching for a way to keep pugs from loading Test.pm, # pugs -MMarkTestPMAsLoaded -CPIL ...normal options here... # with MarkTestPMAsLoaded.pm containing # %*INC = ""; # should work, but doesn't (pugs dies with "can't open file"). use FindBin; use File::Spec; sub pwd { File::Spec->catfile($FindBin::Bin, @_) } if($ARGV[1] eq "-w" and $ARGV[2]) { # XXX hack if($ENV{DISABLE_RULE_TESTS} && $ARGV[2] =~ /rules/) { my $tests = get_plan_count($ARGV[2]); print "1..$tests\n"; print "ok $_ - # skip PIL2JS exhausts too much swap on this test\n" for 1..$tests; exit; } local $/; open my $fh, "<", $ARGV[2] or die "Couldn't open \"$ARGV[2]\": $!\n"; my $src = <$fh>; # Don't load Test.pm, as we precompile and automatically load it. # Pugs doesn't know that we've a precompiled copy of Test.pm lying around and # that we'll link it in; thus we've to sourcefilter $src. # If we did not s/^use Test//gm, things will still work but performance will # suffer, as Test.pm would be re-parsed, re-compiled-to-PIL1 and # re-compiled-to-JS on every invocation. # $src =~ s/^use Test//gm; # hack # As of r8689, this hack b0rks PIL2JS, so I removed the hack (temporarily?). # --iblech # XXX ABSOLUTELY EVIL BLOODY HACK # XXX ABSOLUTELY EVIL BLOODY HACK # XXX ABSOLUTELY EVIL BLOODY HACK # XXX SOURCE FILTER # XXX SOURCE FILTER # Needs PIL2 or fixes to PIL1 # my $a; sub b { $a++ }; b(); # does not work, as &b is *only* in # # pilGlob, i.e. it doesn't have any # # relation to its lexical pad. # my $a; our sub b { $a++ }; b(); # does work, as &b is not only in # # pilGlob: "our sub foo {...}" gets # # emitted as "our &foo := sub {...}". # There's no other possibility for us to work around this; by the time the # source is compiled to PIL1, global subs will already have lost their lexpad # info. # The s/sub/our sub/ hack is semantically relatively harmless, as &b should # be our() anyway. # This hack does not fix this problem: # my $a; b(); sub b { $a++ } # dies (can't find &b) # With PIL2 the hack won't be necessary any longer, as PIL2 will report # proper lexpad info by leaving subs in pilMain. $src =~ s/^(\s*)sub(\s+)(\w+)/$1our sub$2$3/gm; my @args = (); @args = qw(--run=jspm --perl5) if $ENV{PUGS_RUNTIME} and $ENV{PUGS_RUNTIME} eq 'JSPERL5'; warn "# runjs.pl @args @ARGV[2]\n"; exec pwd("runjs.pl"), @args, "-e", $src; } else { warn "# @ARGV\n"; exec pwd("..", "..", "pugs"), @ARGV[1..$#ARGV]; } sub get_plan_count { my $file = shift; local $/; open my $fh, "<", $file or die "Couldn't open \"$file\": $!\n"; my $src = <$fh>; $src =~ /^\s+plan\s*\(?\s*(\d+)/m and return $1; return 0; }