7 @INC = qw(: ::lib ::macos:lib);
16 if (($Config::Config{'extensions'} !~ /\bB\b/) ){
17 print "1..0 # Skip -- Perl configured without B module\n";
24 use Test::More tests => 50;
27 my $deparse = B::Deparse->new();
30 # Tell B::Deparse about our ambient pragmas
31 { my ($hint_bits, $warning_bits);
32 BEGIN { ($hint_bits, $warning_bits) = ($^H, ${^WARNING_BITS}); }
33 $deparse->ambient_pragmas (
34 hint_bits => $hint_bits,
35 warning_bits => $warning_bits,
44 my ($num, $testname) = $1 =~ m/(\d+)\s*(.*)/;
45 my ($input, $expected);
46 if (/(.*)\n>>>>\n(.*)/s) {
47 ($input, $expected) = ($1, $2);
50 ($input, $expected) = ($_, $_);
53 my $coderef = eval "sub {$input}";
56 diag("$num deparsed: $@");
60 my $deparsed = $deparse->coderef2text( $coderef );
61 my $regex = $expected;
62 $regex =~ s/(\S+)/\Q$1/g;
63 $regex =~ s/\s+/\\s+/g;
64 $regex = '^\{\s*' . $regex . '\s*\}$';
65 like($deparsed, qr/$regex/, $testname);
69 use constant 'c', 'stuff';
70 is((eval "sub ".$deparse->coderef2text(\&c))->(), 'stuff');
73 is("{\n (-1) ** \$a;\n}", $deparse->coderef2text(sub{(-1) ** $a }));
75 use constant cr => ['hello'];
76 my $string = "sub " . $deparse->coderef2text(\&cr);
77 my $val = (eval $string)->();
78 ok( ref($val) eq 'ARRAY' && $val->[0] eq 'hello');
80 my $Is_VMS = $^O eq 'VMS';
81 my $Is_MacOS = $^O eq 'MacOS';
83 my $path = join " ", map { qq["-I$_"] } @INC;
84 $path .= " -MMac::err=unix" if $Is_MacOS;
85 my $redir = $Is_MacOS ? "" : "2>&1";
87 $a = `$^X $path "-MO=Deparse" -anlwi.bak -e 1 $redir`;
88 $a =~ s/-e syntax OK\n//g;
89 $a =~ s/.*possible typo.*\n//; # Remove warning line
90 $a =~ s{\\340\\242}{\\s} if (ord("\\") == 224); # EBCDIC, cp 1047 or 037
91 $a =~ s{\\274\\242}{\\s} if (ord("\\") == 188); # $^O eq 'posix-bc'
93 BEGIN { $^I = ".bak"; }
95 BEGIN { $/ = "\n"; $\ = "\n"; }
96 LINE: while (defined($_ = <ARGV>)) {
98 our(@F) = split(' ', $_, 0);
102 $b =~ s/(LINE:)/sub BEGIN {
103 'MacPerl'->bootstrap;
110 #Re: perlbug #35857, patch #24505
111 #handle warnings::register-ed packages properly.
112 package B::Deparse::Wrapper;
115 use warnings::register;
117 my $deparser = B::Deparse->new();
118 return $deparser->coderef2text(shift);
126 my $res = B::Deparse::Wrapper::getcode($val);
127 like( $res, qr/use warnings/);
130 my $x=sub { ++$q,++$p };
132 eval <<EOFCODE and test($x);
136 use warnings::register;
154 ++$test and $test /= 2;
157 $test /= 2 if ++$test;
164 my $test = sub : lvalue {
172 my $test = sub : method {
180 my $test = sub : locked method {
208 $_ .= <ARGV> . <$foo>;
211 my $foo = "Ab\x{100}\200\x{200}\377Cd\000Ef\x{1000}\cA\x{2000}\cZ";
216 # 16 - various lypes of loop
230 for (my $i = 0; $i < 2;) {
235 for (my $i = 0; $i < 2; ++$i) {
240 for (my $i = 0; $i < 2; ++$i) {
246 while ($i) { my $z = 1; } continue { $i = 99; }
249 foreach my $i (1, 2) {
261 foreach my $i (1, 2) {
266 foreach my $i (1, 2) {
271 foreach our $i (1, 2) {
277 foreach our $i (1, 2) {
283 print reverse sort(@x);
287 print((sort {$b cmp $a} @x));
291 print((reverse sort {$b <=> $a} @x));
295 print $_ foreach (reverse @a);
299 print $_ foreach (reverse 1, 2..5);
303 @ary = split(' ', 'foo', 0);
309 do { my $x = 1; $x };
311 # 37 <20061012113037.GJ25805@c4.convolution.nl>