BEGIN {
chdir 't' if -d 't';
- unshift @INC, '../lib';
+ @INC = '../lib';
}
$| = 1;
use strict;
use Config;
-print "1..13\n";
+print "1..17\n";
my $test = 1;
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;
$b = <<'EOF';
@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;
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//;
$a =~ s/\b(s|foo|bar|ullsv)\b\s?//g;
$a =~ s/^\s+//;
$a =~ s/\s+$//;
-if ($Config{use5005threads} eq 'define') {
+my $is_thread = $Config{use5005threads} && $Config{use5005threads} eq 'define';
+if ($is_thread) {
$b=<<EOF;
leave enter nextstate label leaveloop enterloop null and defined null
threadsv readline gv lineseq nextstate aassign null pushmark split pushre
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';
print "# [$a] vs [$b]\nnot " if $a ne $b;
ok;
} else {
print "ok $test # skipped: one or more static extensions\n"; $test++;
}
-if ($Config{use5005threads} eq 'define') {
+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`;
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;
+}