Added more tests

This commit is contained in:
2024-06-21 10:17:26 +02:00
parent ff2a43e593
commit 2c6999040d
4 changed files with 29 additions and 3 deletions

View File

@ -131,13 +131,21 @@ func (f *Function) CompileInstruction(line token.List) error {
return errors.New(errors.MissingAssignValue, f.File, expr.LastChild().Token.After())
}
name := expr.Children[0]
name := expr.Children[0].Token.Text()
_, exists := f.Variables[name]
if exists {
return errors.New(&errors.VariableAlreadyExists{Name: name}, f.File, expr.Children[0].Token.Position)
}
value := expr.Children[1]
// All expressions are returned to the memory pool.
// To avoid losing variable values, we will remove it from the expression.
expr.RemoveChild(value)
f.Variables[name.Token.Text()] = &Variable{
Name: name.Token.Text(),
f.Variables[name] = &Variable{
Name: name,
Value: value,
IsConst: true,
}

View File

@ -0,0 +1,13 @@
package errors
import "fmt"
// VariableAlreadyExists is used when existing variables are used for new variable declarations.
type VariableAlreadyExists struct {
Name string
}
// Error generates the string representation.
func (err *VariableAlreadyExists) Error() string {
return fmt.Sprintf("Variable '%s' already exists", err.Name)
}