Fixed inconsistent lifetimes

This commit is contained in:
2025-02-28 19:37:06 +01:00
parent a5a8f0f503
commit be6eafddf5
10 changed files with 41 additions and 37 deletions

View File

@ -80,8 +80,14 @@ func (f *Function) CompileAssignDivision(expr *expression.Expression) error {
f.RegisterNumber(asm.MOVE, x86.RAX, dividend.Number)
err = f.Execute(division.Token, x86.RAX, divisor)
case eval.Register:
err = f.Execute(division.Token, dividend.Register, divisor)
defer f.FreeRegister(dividend.Register)
if dividend.Register != quotientVariable.Value.Register && dividend.IsAlive() {
tmp := f.NewRegister()
f.RegisterRegister(asm.MOVE, tmp, dividend.Register)
err = f.Execute(division.Token, tmp, divisor)
f.FreeRegister(tmp)
} else {
err = f.Execute(division.Token, dividend.Register, divisor)
}
default:
panic(fmt.Errorf("%s: not implemented: %v", f.UniqueName, dividend))
}