Improved division split

This commit is contained in:
Eduard Urbach 2024-07-28 18:12:42 +02:00
parent 4ded8260b3
commit 8d629dda72
Signed by: eduard
GPG key ID: 49226B848C78F6C8
11 changed files with 84 additions and 64 deletions

View file

@ -9,20 +9,22 @@ import (
// CompileDefinition compiles a variable definition.
func (f *Function) CompileDefinition(node *ast.Define) error {
name := node.Name.Text(f.File.Bytes)
left := node.Expression.Children[0]
right := node.Expression.Children[1]
name := left.Token.Text(f.File.Bytes)
if f.IdentifierExists(name) {
return errors.New(&errors.VariableAlreadyExists{Name: name}, f.File, node.Name.Position)
return errors.New(&errors.VariableAlreadyExists{Name: name}, f.File, left.Token.Position)
}
uses := token.Count(f.Body, f.File.Bytes, token.Identifier, name) - 1
if uses == 0 {
return errors.New(&errors.UnusedVariable{Name: name}, f.File, node.Name.Position)
return errors.New(&errors.UnusedVariable{Name: name}, f.File, left.Token.Position)
}
register := f.NewRegister()
err := f.ExpressionToRegister(node.Value, register)
err := f.ExpressionToRegister(right, register)
f.AddVariable(&scope.Variable{
Name: name,