issue130.t 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #! /usr/bin/env perl
  2. # http://code.google.com/p/perl-compiler/issues/detail?id=120
  3. # support lexsubs and its various B::CV::GV changes
  4. use strict;
  5. BEGIN {
  6. unshift @INC, 't';
  7. require "test.pl";
  8. }
  9. use Test::More;
  10. if ($] < 5.018) {
  11. plan skip_all => "lexical subs since 5.18";
  12. exit;
  13. }
  14. plan tests => 4;
  15. use Config;
  16. my $issue = <<'EOF';
  17. no warnings "experimental::lexical_subs";
  18. use feature 'lexical_subs';
  19. my sub p{q(ok)}; my $a=\&p;
  20. print p;
  21. EOF
  22. sub compile_check {
  23. my ($num,$b,$base,$script,$cmt) = @_;
  24. my $name = $base."_$num";
  25. unlink("$name.c", "$name.pl");
  26. open F, ">", "$name.pl";
  27. print F $script;
  28. close F;
  29. my $X = $^X =~ m/\s/ ? qq{"$^X"} : $^X;
  30. $b .= ',-DCsp,-v';
  31. my $Mblib = Mblib;
  32. my ($result,$out,$stderr) =
  33. run_cmd("$X $Mblib -MO=$b,-o$name.c $name.pl", 20);
  34. unless (-e "$name.c") {
  35. print "not ok $num # $name B::$b failed\n";
  36. exit;
  37. }
  38. # check stderr for "Can't locate object method "STASH" via package "B::SPECIAL"
  39. # or crashes
  40. if (!$stderr and $out) {
  41. $stderr = $out;
  42. }
  43. my $notfound = $stderr =~ /Can't locate object method/;
  44. ok(!$notfound, $cmt);
  45. }
  46. my $todobc = "";
  47. $todobc = "5.18thr bytecode" if $] >= 5.018 and $] < 5.019005 and $Config{useithreads};
  48. compile_check(1,'C,-O3,-UB','ccode130i',$issue,"lexsubs compile ok");
  49. ctestok(2,'C,-O3,-UB','ccode130i',$issue,"TODO lexsubs run C ok");
  50. ctestok(3,'CC,-UB','cccode130i',$issue,"TODO lexsubs run CC ok");
  51. plctestok(4,'ccode130i',$issue,$todobc."lexsubs run BC ok"); # needs xcv_name_hek