use v6-alpha; use Test; plan 9; # L =kwid Tests for the goto() builtin We have "phases" to make sure the gotos didn't run wild. =cut our $phase; sub test1_ok { return 1 } sub test1 { &test1_ok.goto(); return 0; } ok(test1(), "&sub.goto does"); is(++$phase, 1, "phase completed"); # the same, but with subs declared after the call. sub test2 { &test2_ok.goto(); return 0; } sub test2_ok { return 1 } ok(test2(), "&sub.goto does (forward reference)"); is(++$phase, 2, "phase completed"); ok(test3(), "&sub.goto does (real forward reference)"); sub test3 { &test3_ok.goto(); return 0; } sub test3_ok { 1 } is(++$phase, 3, "phase completed"); is(moose(), $?LINE, "regular call to moose() is consistent"); is(foo(), $?LINE, "goto eliminates call stack frames"); sub foo { &moose.goto(); } sub moose { $?CALLER::LINE; } is(++$phase, 4, "phase completed");