X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Flib%2Fb.t;h=1f7dc14884e58568adc318bfcff15e06aaa9ff76;hb=569bd3158af2276a406770e3d68e76b7da59b730;hp=aabfc0dac4db37cf877b6f1939e466f8a6282ff8;hpb=20822f61cc01ab34be1e17db483aceb9d5ec8fb7;p=p5sagit%2Fp5-mst-13.2.git diff --git a/t/lib/b.t b/t/lib/b.t index aabfc0d..1f7dc14 100755 --- a/t/lib/b.t +++ b/t/lib/b.t @@ -10,7 +10,7 @@ use warnings; use strict; use Config; -print "1..13\n"; +print "1..17\n"; my $test = 1; @@ -34,78 +34,68 @@ ok; my $a = <<'EOF'; { $test = sub : lvalue { - 1; + my $x; } ; } EOF chomp $a; -print "not " if $deparse->coderef2text(sub{$test = sub : lvalue { 1 }}) ne $a; +print "not " if $deparse->coderef2text(sub{$test = sub : lvalue{my $x}}) ne $a; ok; $a =~ s/lvalue/method/; -print "not " if $deparse->coderef2text(sub{$test = sub : method { 1 }}) ne $a; +print "not " if $deparse->coderef2text(sub{$test = sub : method{my $x}}) ne $a; ok; $a =~ s/method/locked method/; -print "not " if $deparse->coderef2text(sub{$test = sub : method locked { 1 }}) +print "not " if $deparse->coderef2text(sub{$test = sub : method locked {my $x}}) ne $a; ok; } +print "not " if (eval "sub ".$deparse->coderef2text(sub () { 42 }))->() != 42; +ok; + +use constant 'c', 'stuff'; +print "not " if (eval "sub ".$deparse->coderef2text(\&c))->() ne 'stuff'; +ok; + +# XXX ToDo - constsub that returns a reference +#use constant cr => ['hello']; +#my $string = "sub " . $deparse->coderef2text(\&cr); +#my $val = (eval $string)->(); +#print "not " if ref($val) ne 'ARRAY' || $val->[0] ne 'hello'; +#ok; + my $a; my $Is_VMS = $^O eq 'VMS'; -if ($Is_VMS) { - $^X = "MCR $^X"; - $a = `$^X "-I../lib" "-MO=Deparse" -anle "1"`; -} -else { - $a = `$^X -I../lib -MO=Deparse -anle 1 2>&1`; -} +$a = `$^X "-I../lib" "-MO=Deparse" -anle 1 2>&1`; $a =~ s/-e syntax OK\n//g; +$a =~ s{\\340\\242}{\\s} if (ord("\\") == 224); # EBCDIC, cp 1047 or 037 +$a =~ s{\\274\\242}{\\s} if (ord("\\") == 188); # $^O eq 'posix-bc' $b = <<'EOF'; LINE: while (defined($_ = )) { chomp $_; @F = split(/\s+/, $_, 0); - '???' -} -continue { - '???' + '???'; } EOF print "# [$a]\n\# vs\n# [$b]\nnot " if $a ne $b; ok; -#6 -if ($Is_VMS) { - $a = `$^X "-I../lib" "-MO=Debug" -e "1"`; -} -else { - $a = `$^X -I../lib -MO=Debug -e 1 2>&1`; -} +$a = `$^X "-I../lib" "-MO=Debug" -e 1 2>&1`; print "not " unless $a =~ /\bLISTOP\b.*\bOP\b.*\bCOP\b.*\bOP\b/s; ok; -#7 -if ($Is_VMS) { - $a = `$^X "-I../lib" "-MO=Terse" -e "1"`; -} -else { - $a = `$^X -I../lib -MO=Terse -e 1 2>&1`; -} +$a = `$^X "-I../lib" "-MO=Terse" -e 1 2>&1`; print "not " unless $a =~ -/\bLISTOP\b.*leave.*\bOP\b.*enter.*\bCOP\b.*nextstate.*\bOP\b.*null/s; +/\bLISTOP\b.*leave.*\n OP\b.*enter.*\n COP\b.*nextstate.*\n OP\b.*null/s; ok; -if ($Is_VMS) { - $a = `$^X "-I../lib" "-MO=Terse" -ane "s/foo/bar/"`; -} -else { - $a = `$^X -I../lib -MO=Terse -ane "s/foo/bar/" 2>&1`; -} +$a = `$^X "-I../lib" "-MO=Terse" -ane "s/foo/bar/" 2>&1`; $a =~ s/\(0x[^)]+\)//g; $a =~ s/\[[^\]]+\]//g; $a =~ s/-e syntax OK//; @@ -133,19 +123,18 @@ $b =~ s/\s+$//; print "# [$a]\n# vs\n# [$b]\nnot " if $a ne $b; ok; -if ($Is_VMS) { - chomp($a = `$^X "-I../lib" "-MB::Stash" "-Mwarnings" -e "1"`); -} -else { - chomp($a = `$^X -I../lib -MB::Stash -Mwarnings -e1`); -} +chomp($a = `$^X "-I../lib" "-MB::Stash" "-Mwarnings" -e1`); $a = join ',', sort split /,/, $a; +$a =~ s/-u(perlio|open)(?:::\w+)?,//g if defined $Config{'useperlio'} and $Config{'useperlio'} eq 'define'; $a =~ s/-uWin32,// if $^O eq 'MSWin32'; $a =~ s/-u(Cwd|File|File::Copy|OS2),//g if $^O eq 'os2'; $a =~ s/-uCwd,// if $^O eq 'cygwin'; if ($Config{static_ext} eq ' ') { $b = '-uCarp,-uCarp::Heavy,-uDB,-uExporter,-uExporter::Heavy,-uattributes,' - . '-umain,-uwarnings'; + . '-umain,-ustrict,-uwarnings'; + if (ord('A') == 193) { # EBCDIC sort order is qw(a A) not qw(A a) + $b = join ',', sort split /,/, $b; + } print "# [$a] vs [$b]\nnot " if $a ne $b; ok; } else { @@ -155,12 +144,23 @@ if ($Config{static_ext} eq ' ') { if ($is_thread) { print "# use5005threads: test $test skipped\n"; } else { - if ($Is_VMS) { - $a = `$^X "-I../lib" "-MO=Showlex" -e "my %one"`; - } - else { - $a = `$^X -I../lib -MO=Showlex -e "my %one" 2>&1`; + $a = `$^X "-I../lib" "-MO=Showlex" -e "my %one" 2>&1`; + if (ord('A') != 193) { # ASCIIish + print "# [$a]\nnot " unless $a =~ /sv_undef.*PVNV.*%one.*sv_undef.*HV/s; + } + else { # EBCDICish C<1: PVNV (0x1a7ede34) "%\226\225\205"> + print "# [$a]\nnot " unless $a =~ /sv_undef.*PVNV.*%\\[0-9].*sv_undef.*HV/s; } - print "# [$a]\nnot " unless $a =~ /sv_undef.*PVNV.*%one.*sv_undef.*HV/s; } ok; + +# Bug 20001204.07 +{ +my $foo = $deparse->coderef2text(sub { { 234; }}); +# Constants don't get optimised here. +print "not " unless $foo =~ /{.*{.*234;.*}.*}/sm; +ok; +$foo = $deparse->coderef2text(sub { { 234; } continue { 123; } }); +print "not " unless $foo =~ /{.*{.*234;.*}.*continue.*{.*123.*}/sm; +ok; +}