Update Changes.
[p5sagit/p5-mst-13.2.git] / t / lib / b.t
CommitLineData
ccc418af 1#!./perl
2
3BEGIN {
4 chdir 't' if -d 't';
5 unshift @INC, '../lib';
6}
7
8$| = 1;
9use warnings;
10use strict;
11use Config;
12
9b86dfa2 13print "1..13\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
885a8af1 56my $a;
57my $Is_VMS = $^O eq 'VMS';
58if ($Is_VMS) {
59 $^X = "MCR $^X";
60 $a = `$^X "-I../lib" "-MO=Deparse" -anle "1"`;
61}
62else {
63 $a = `$^X -I../lib -MO=Deparse -anle 1 2>&1`;
64}
5fb4d820 65$a =~ s/-e syntax OK\n//g;
ccc418af 66$b = <<'EOF';
ccc418af 67
68LINE: while (defined($_ = <ARGV>)) {
69 chomp $_;
70 @F = split(/\s+/, $_, 0);
71 '???'
72}
73continue {
74 '???'
75}
76
77EOF
5fb4d820 78print "# [$a]\n\# vs\n# [$b]\nnot " if $a ne $b;
ccc418af 79ok;
80
81#6
885a8af1 82if ($Is_VMS) {
83 $a = `$^X "-I../lib" "-MO=Debug" -e "1"`;
84}
85else {
86 $a = `$^X -I../lib -MO=Debug -e 1 2>&1`;
87}
ccc418af 88print "not " unless $a =~
89/\bLISTOP\b.*\bOP\b.*\bCOP\b.*\bOP\b/s;
90ok;
91
92#7
885a8af1 93if ($Is_VMS) {
94 $a = `$^X "-I../lib" "-MO=Terse" -e "1"`;
95}
96else {
97 $a = `$^X -I../lib -MO=Terse -e 1 2>&1`;
98}
ccc418af 99print "not " unless $a =~
100/\bLISTOP\b.*leave.*\bOP\b.*enter.*\bCOP\b.*nextstate.*\bOP\b.*null/s;
101ok;
102
885a8af1 103if ($Is_VMS) {
104 $a = `$^X "-I../lib" "-MO=Terse" -ane "s/foo/bar/"`;
105}
106else {
107 $a = `$^X -I../lib -MO=Terse -ane "s/foo/bar/" 2>&1`;
108}
ccc418af 109$a =~ s/\(0x[^)]+\)//g;
110$a =~ s/\[[^\]]+\]//g;
111$a =~ s/-e syntax OK//;
112$a =~ s/[^a-z ]+//g;
113$a =~ s/\s+/ /g;
b2ec7025 114$a =~ s/\b(s|foo|bar|ullsv)\b\s?//g;
ccc418af 115$a =~ s/^\s+//;
116$a =~ s/\s+$//;
117$b=<<EOF;
118leave enter nextstate label leaveloop enterloop null and defined null
119null gvsv readline gv lineseq nextstate aassign null pushmark split pushre
120null gvsv const null pushmark rvav gv nextstate subst const unstack
121nextstate
122EOF
123$b=~s/\n/ /g;$b=~s/\s+/ /g;
124$b =~ s/\s+$//;
125print "# [$a] vs [$b]\nnot " if $a ne $b;
126ok;
127
885a8af1 128if ($Is_VMS) {
129 chomp($a = `$^X "-I../lib" "-MB::Stash" "-Mwarnings" -e "1"`);
130}
131else {
132 chomp($a = `$^X -I../lib -MB::Stash -Mwarnings -e1`);
133}
ccc418af 134$a = join ',', sort split /,/, $a;
754a99e1 135$a =~ s/-uWin32,// if $^O eq 'MSWin32';
136$a =~ s/-u(Cwd|File|File::Copy|OS2),//g if $^O eq 'os2';
f3ff050f 137if ($Config{static_ext} eq ' ') {
138 $b = '-uCarp,-uCarp::Heavy,-uDB,-uExporter,-uExporter::Heavy,-uattributes,'
139 . '-umain,-uwarnings';
140 print "# [$a] vs [$b]\nnot " if $a ne $b;
141 ok;
142} else {
143 print "ok $test # skipped: one or more static extensions\n"; $test++;
144}
ccc418af 145
885a8af1 146if ($Is_VMS) {
147 $a = `$^X "-I../lib" "-MO=Showlex" -e "my %one"`;
148}
149else {
150 $a = `$^X -I../lib -MO=Showlex -e "my %one" 2>&1`;
151}
ccc418af 152print "# [$a]\nnot " unless $a =~ /sv_undef.*PVNV.*%one.*sv_undef.*HV/s;
153ok;