Add more known sprintf failures.
[p5sagit/p5-mst-13.2.git] / t / op / goto.t
index 1b34acd..96bb8dd 100755 (executable)
@@ -1,10 +1,8 @@
 #!./perl
 
-# $RCSfile: goto.t,v $$Revision: 4.1 $$Date: 92/08/07 18:27:56 $
-
 # "This IS structured code.  It's just randomly structured."
 
-print "1..9\n";
+print "1..16\n";
 
 while ($?) {
     $foo = 1;
@@ -32,8 +30,8 @@ print "#2\t:$foo: == 4\n";
 if ($foo == 4) {print "ok 2\n";} else {print "not ok 2\n";}
 
 $PERL = ($^O eq 'MSWin32') ? '.\perl' : './perl';
-$x = `$PERL -e "goto foo;" 2>&1`;
-if ($x =~ /DCL-W-NOCOMD/) { $x = `\$ mcr sys\$disk:[]perl. -e "goto foo;"`; }
+$CMD = qq[$PERL -e "goto foo;" 2>&1 ];
+$x = `$CMD`;
 
 if ($x =~ /label/) {print "ok 3\n";} else {print "not ok 3\n";}
 
@@ -56,7 +54,28 @@ sub bar {
 exit;
 
 FINALE:
-print "ok 9\n";
+print "ok 13\n";
+
+# does goto LABEL handle block contexts correctly?
+
+my $cond = 1;
+for (1) {
+    if ($cond == 1) {
+       $cond = 0;
+       goto OTHER;
+    }
+    elsif ($cond == 0) {
+      OTHER:
+       $cond = 2;
+       print "ok 14\n";
+       goto THIRD;
+    }
+    else {
+      THIRD:
+       print "ok 15\n";
+    }
+}
+print "ok 16\n";
 exit;
 
 bypass:
@@ -86,5 +105,22 @@ $wherever = NOWHERE;
 eval { goto $wherever };
 print $@ =~ /Can't find label NOWHERE/ ? "ok 8\n" : "not ok 8\n";
 
+# see if a modified @_ propagates
+{
+  package Foo;
+  sub DESTROY  { my $s = shift; print "ok $s->[0]\n"; }
+  sub show     { print "# @_\nnot ok $_[0][0]\n" if @_ != 5; }
+  sub start    { push @_, 1, "foo", {}; goto &show; }
+  for (9..11)  { start(bless([$_]), 'bar'); }
+}
+
+sub auto {
+    goto &loadit;
+}
+
+sub AUTOLOAD { print @_ }
+
+auto("ok 12\n");
+
 $wherever = FINALE;
 goto $wherever;