Implemented Value interface

This commit is contained in:
Eduard Urbach 2025-02-28 12:15:19 +01:00
parent fbcadae268
commit 9cfca57111
Signed by: eduard
GPG key ID: 49226B848C78F6C8
36 changed files with 194 additions and 153 deletions

View file

@ -36,8 +36,8 @@ func (f *Function) CompileAssignDivision(expr *expression.Expression) error {
return err
}
quotientVariable.Type = types.Int
remainderVariable.Type = types.Int
quotientVariable.Value.Typ = types.Int
remainderVariable.Value.Typ = types.Int
f.AddVariable(quotientVariable)
f.AddVariable(remainderVariable)
} else {
@ -68,13 +68,13 @@ func (f *Function) CompileAssignDivision(expr *expression.Expression) error {
return err
}
if !types.Is(dividend.Type, types.AnyInt) {
return errors.New(&errors.TypeMismatch{Encountered: dividend.Type.Name(), Expected: types.AnyInt.Name()}, f.File, dividendExpr.Token.Position)
if !types.Is(dividend.Type(), types.AnyInt) {
return errors.New(&errors.TypeMismatch{Encountered: dividend.Type().Name(), Expected: types.AnyInt.Name()}, f.File, dividendExpr.Token.Position)
}
divisor := division.Children[1]
switch dividend.Kind {
switch dividend := dividend.(type) {
case eval.Number:
f.SaveRegister(x86.RAX)
f.RegisterNumber(asm.MOVE, x86.RAX, dividend.Number)
@ -83,10 +83,10 @@ func (f *Function) CompileAssignDivision(expr *expression.Expression) error {
err = f.Execute(division.Token, dividend.Register, divisor)
defer f.FreeRegister(dividend.Register)
default:
panic(fmt.Errorf("%s: not implemented: %d", f.UniqueName, dividend.Kind))
panic(fmt.Errorf("%s: not implemented: %v", f.UniqueName, dividend))
}
f.RegisterRegister(asm.MOVE, quotientVariable.Register, x86.RAX)
f.RegisterRegister(asm.MOVE, remainderVariable.Register, x86.RDX)
f.RegisterRegister(asm.MOVE, quotientVariable.Value.Register, x86.RAX)
f.RegisterRegister(asm.MOVE, remainderVariable.Value.Register, x86.RDX)
return err
}