Added more tests
This commit is contained in:
parent
e6ae755e60
commit
5cedb516c5
4 changed files with 29 additions and 3 deletions
|
@ -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,
|
||||
}
|
||||
|
|
13
src/errors/VariableAlreadyExists.go
Normal file
13
src/errors/VariableAlreadyExists.go
Normal 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)
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue