public void EvalRedo1() {
// redo in loop:
AssertOutput(() => CompilerTest(@"
$x = 0
while (puts('in condition'); true)
puts 'in loop'
eval('module M; redo; end') if ($x += 1) < 2
break
end
"), @"
in condition
in loop
in loop
");
// redo in block:
AssertOutput(() => CompilerTest(@"
$x = 0
2.times do |i|
puts 'in block ' + i.to_s
eval('module M; redo; end') if ($x += 1) < 2
end
"), @"
in block 0
in block 0
in block 1
");
// redo in define_method block:
AssertOutput(() => CompilerTest(@"
$x = 0
class C
define_method :foo do
puts 'in block'
eval('module M; redo; end') if ($x += 1) < 2
end
end
C.new.foo
"), @"
in block
in block
");
}