Fixed incorrect register lifetime in for loops
This commit is contained in:
@ -90,7 +90,8 @@ func (c *compiler) compileX86(x asm.Instruction) {
|
||||
c.jump(x)
|
||||
|
||||
case asm.LABEL:
|
||||
c.codeLabels[x.Data.(*asm.Label).Name] = Address(len(c.code))
|
||||
label := x.Data.(*asm.Label)
|
||||
c.codeLabels[label.Name] = Address(len(c.code))
|
||||
|
||||
case asm.LOAD:
|
||||
c.load(x)
|
||||
|
@ -81,11 +81,13 @@ func (f *Function) CompileFor(loop *ast.For) error {
|
||||
case *eval.Register:
|
||||
if value.IsAlive() {
|
||||
tmp := f.NewRegister()
|
||||
f.RegisterRegister(asm.MOVE, tmp, value.Register)
|
||||
defer f.FreeRegister(tmp)
|
||||
f.RegisterRegister(asm.MOVE, tmp, value.Register)
|
||||
f.AddLabel(label)
|
||||
f.RegisterRegister(asm.COMPARE, counter, tmp)
|
||||
} else {
|
||||
f.UseRegister(value.Register)
|
||||
defer f.FreeRegister(value.Register)
|
||||
f.AddLabel(label)
|
||||
f.RegisterRegister(asm.COMPARE, counter, value.Register)
|
||||
}
|
||||
|
Reference in New Issue
Block a user