12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- #! /usr/bin/env perl
- # http://code.google.com/p/perl-compiler/issues/detail?id=120
- # support lexsubs and its various B::CV::GV changes
- use strict;
- BEGIN {
- unshift @INC, 't';
- require "test.pl";
- }
- use Test::More;
- if ($] < 5.018) {
- plan skip_all => "lexical subs since 5.18";
- exit;
- }
- plan tests => 4;
- my $issue = <<'EOF';
- no warnings "experimental::lexical_subs";
- use feature 'lexical_subs';
- my sub p{q(ok)}; my $a=\&p;
- print p;
- EOF
- sub compile_check {
- my ($num,$b,$base,$script,$cmt) = @_;
- my $name = $base."_$num";
- unlink("$name.c", "$name.pl");
- open F, ">", "$name.pl";
- print F $script;
- close F;
- my $X = $^X =~ m/\s/ ? qq{"$^X"} : $^X;
- $b .= ',-DCsp,-v';
- my $Mblib = Mblib;
- my ($result,$out,$stderr) =
- run_cmd("$X $Mblib -MO=$b,-o$name.c $name.pl", 20);
- unless (-e "$name.c") {
- print "not ok $num # $name B::$b failed\n";
- exit;
- }
- # check stderr for "Can't locate object method "STASH" via package "B::SPECIAL"
- # or crashes
- if (!$stderr and $out) {
- $stderr = $out;
- }
- my $notfound = $stderr =~ /Can't locate object method/;
- ok(!$notfound, $cmt);
- }
- compile_check(1,'C,-O3,-UB','ccode130i',$issue,"lexsubs compile ok");
- ctestok(2,'C,-O3,-UB','ccode130i',$issue,"lexsubs run C ok");
- ctestok(3,'CC,-UB','cccode130i',$issue,"lexsubs run CC ok");
- plctestok(4,'ccode130i',$issue,"TODO lexsubs run BC ok"); # needs xcv_name_hek
|