29 lines
616 B
Go
29 lines
616 B
Go
|
|
package ast
|
||
|
|
|
||
|
|
import (
|
||
|
|
"bytes"
|
||
|
|
|
||
|
|
"code.jmug.me/jmug/interpreter-in-go/pkg/token"
|
||
|
|
)
|
||
|
|
|
||
|
|
type LetStatement struct {
|
||
|
|
Token token.Token // TODO: This is a little redundant, figure out if I can get rid of it.
|
||
|
|
Name *Identifier
|
||
|
|
Value Expression
|
||
|
|
}
|
||
|
|
|
||
|
|
func (ls *LetStatement) statementNode() {}
|
||
|
|
func (ls *LetStatement) TokenLiteral() string {
|
||
|
|
return ls.Token.Literal
|
||
|
|
}
|
||
|
|
func (ls *LetStatement) String() string {
|
||
|
|
var out bytes.Buffer
|
||
|
|
out.WriteString(ls.TokenLiteral() + " ")
|
||
|
|
out.WriteString(ls.Name.String() + " = ")
|
||
|
|
if ls.Value != nil {
|
||
|
|
out.WriteString(ls.Value.String())
|
||
|
|
}
|
||
|
|
out.WriteString(";")
|
||
|
|
return out.String()
|
||
|
|
}
|