Merge pull request #799 from nspcc-dev/fix/for
compiler: allow for loops with empty condition
This commit is contained in:
commit
2a262c6ef4
2 changed files with 22 additions and 3 deletions
|
@ -781,10 +781,12 @@ func (c *codegen) Visit(node ast.Node) ast.Visitor {
|
|||
// Set label and walk the condition.
|
||||
c.pushStackLabel(label, 0)
|
||||
c.setLabel(fstart)
|
||||
ast.Walk(c, n.Cond)
|
||||
if n.Cond != nil {
|
||||
ast.Walk(c, n.Cond)
|
||||
|
||||
// Jump if the condition is false
|
||||
emit.Jmp(c.prog.BinWriter, opcode.JMPIFNOT, fend)
|
||||
// Jump if the condition is false
|
||||
emit.Jmp(c.prog.BinWriter, opcode.JMPIFNOT, fend)
|
||||
}
|
||||
|
||||
// Walk body followed by the iterator (post stmt).
|
||||
ast.Walk(c, n.Body)
|
||||
|
|
|
@ -374,6 +374,23 @@ func TestDec(t *testing.T) {
|
|||
eval(t, src, big.NewInt(1))
|
||||
}
|
||||
|
||||
func TestForLoopEmpty(t *testing.T) {
|
||||
src := `
|
||||
package foo
|
||||
func Main() int {
|
||||
x := 0
|
||||
for {
|
||||
x++
|
||||
if x == 2 {
|
||||
break
|
||||
}
|
||||
}
|
||||
return x
|
||||
}
|
||||
`
|
||||
eval(t, src, big.NewInt(2))
|
||||
}
|
||||
|
||||
func TestForLoopBigIter(t *testing.T) {
|
||||
src := `
|
||||
package foo
|
||||
|
|
Loading…
Reference in a new issue