Implemented Value interface
This commit is contained in:
parent
fbcadae268
commit
9cfca57111
36 changed files with 194 additions and 153 deletions
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue