Avoid Storable locking on DJGPP for now.
[p5sagit/p5-mst-13.2.git] / t / lib / b.t
CommitLineData
ccc418af 1#!./perl
2
3BEGIN {
4 chdir 't' if -d 't';
20822f61 5 @INC = '../lib';
ccc418af 6}
7
8$| = 1;
9use warnings;
10use strict;
11use Config;
12
de3f1649 13print "1..15\n";
ccc418af 14
15my $test = 1;
16
17sub ok { print "ok $test\n"; $test++ }
18
19use B::Deparse;
20my $deparse = B::Deparse->new() or print "not ";
21ok;
22
23print "not " if "{\n 1;\n}" ne $deparse->coderef2text(sub {1});
24ok;
25
26print "not " if "{\n '???';\n 2;\n}" ne
27 $deparse->coderef2text(sub {1;2});
28ok;
29
30print "not " if "{\n \$test /= 2 if ++\$test;\n}" ne
31 $deparse->coderef2text(sub {++$test and $test/=2;});
32ok;
9b86dfa2 33{
34my $a = <<'EOF';
35{
36 $test = sub : lvalue {
37 1;
38 }
39 ;
40}
41EOF
42chomp $a;
43print "not " if $deparse->coderef2text(sub{$test = sub : lvalue { 1 }}) ne $a;
44ok;
45
46$a =~ s/lvalue/method/;
47print "not " if $deparse->coderef2text(sub{$test = sub : method { 1 }}) ne $a;
48ok;
49
50$a =~ s/method/locked method/;
51print "not " if $deparse->coderef2text(sub{$test = sub : method locked { 1 }})
52 ne $a;
53ok;
54}
ccc418af 55
de3f1649 56print "not " if (eval "sub ".$deparse->coderef2text(sub () { 42 }))->() != 42;
57ok;
58
59use constant 'c', 'stuff';
60print "not " if (eval "sub ".$deparse->coderef2text(\&c))->() ne 'stuff';
61ok;
62
63# XXX ToDo - constsub that returns a reference
64#use constant cr => ['hello'];
65#my $string = "sub " . $deparse->coderef2text(\&cr);
66#my $val = (eval $string)->();
67#print "not " if ref($val) ne 'ARRAY' || $val->[0] ne 'hello';
68#ok;
69
885a8af1 70my $a;
71my $Is_VMS = $^O eq 'VMS';
6b462c4a 72$a = `$^X "-I../lib" "-MO=Deparse" -anle 1 2>&1`;
5fb4d820 73$a =~ s/-e syntax OK\n//g;
ccc418af 74$b = <<'EOF';
ccc418af 75
76LINE: while (defined($_ = <ARGV>)) {
77 chomp $_;
78 @F = split(/\s+/, $_, 0);
79 '???'
80}
81continue {
82 '???'
83}
84
85EOF
5fb4d820 86print "# [$a]\n\# vs\n# [$b]\nnot " if $a ne $b;
ccc418af 87ok;
88
6b462c4a 89$a = `$^X "-I../lib" "-MO=Debug" -e 1 2>&1`;
ccc418af 90print "not " unless $a =~
91/\bLISTOP\b.*\bOP\b.*\bCOP\b.*\bOP\b/s;
92ok;
93
6b462c4a 94$a = `$^X "-I../lib" "-MO=Terse" -e 1 2>&1`;
ccc418af 95print "not " unless $a =~
96/\bLISTOP\b.*leave.*\bOP\b.*enter.*\bCOP\b.*nextstate.*\bOP\b.*null/s;
97ok;
98
6b462c4a 99$a = `$^X "-I../lib" "-MO=Terse" -ane "s/foo/bar/" 2>&1`;
ccc418af 100$a =~ s/\(0x[^)]+\)//g;
101$a =~ s/\[[^\]]+\]//g;
102$a =~ s/-e syntax OK//;
103$a =~ s/[^a-z ]+//g;
104$a =~ s/\s+/ /g;
b2ec7025 105$a =~ s/\b(s|foo|bar|ullsv)\b\s?//g;
ccc418af 106$a =~ s/^\s+//;
107$a =~ s/\s+$//;
208edb77 108my $is_thread = $Config{use5005threads} && $Config{use5005threads} eq 'define';
109if ($is_thread) {
cfe9256d 110 $b=<<EOF;
111leave enter nextstate label leaveloop enterloop null and defined null
112threadsv readline gv lineseq nextstate aassign null pushmark split pushre
113threadsv const null pushmark rvav gv nextstate subst const unstack nextstate
114EOF
115} else {
116 $b=<<EOF;
ccc418af 117leave enter nextstate label leaveloop enterloop null and defined null
118null gvsv readline gv lineseq nextstate aassign null pushmark split pushre
cfe9256d 119null gvsv const null pushmark rvav gv nextstate subst const unstack nextstate
ccc418af 120EOF
cfe9256d 121}
ccc418af 122$b=~s/\n/ /g;$b=~s/\s+/ /g;
123$b =~ s/\s+$//;
cfe9256d 124print "# [$a]\n# vs\n# [$b]\nnot " if $a ne $b;
ccc418af 125ok;
126
6b462c4a 127chomp($a = `$^X "-I../lib" "-MB::Stash" "-Mwarnings" -e1`);
ccc418af 128$a = join ',', sort split /,/, $a;
754a99e1 129$a =~ s/-uWin32,// if $^O eq 'MSWin32';
130$a =~ s/-u(Cwd|File|File::Copy|OS2),//g if $^O eq 'os2';
5d129265 131$a =~ s/-uCwd,// if $^O eq 'cygwin';
f3ff050f 132if ($Config{static_ext} eq ' ') {
133 $b = '-uCarp,-uCarp::Heavy,-uDB,-uExporter,-uExporter::Heavy,-uattributes,'
134 . '-umain,-uwarnings';
135 print "# [$a] vs [$b]\nnot " if $a ne $b;
136 ok;
137} else {
138 print "ok $test # skipped: one or more static extensions\n"; $test++;
139}
ccc418af 140
208edb77 141if ($is_thread) {
cfe9256d 142 print "# use5005threads: test $test skipped\n";
143} else {
6b462c4a 144 $a = `$^X "-I../lib" "-MO=Showlex" -e "my %one" 2>&1`;
cfe9256d 145 print "# [$a]\nnot " unless $a =~ /sv_undef.*PVNV.*%one.*sv_undef.*HV/s;
885a8af1 146}
ccc418af 147ok;