2025-01-13 19:51:49 -08:00
|
|
|
package ast
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"bytes"
|
|
|
|
|
|
2025-01-13 19:56:56 -08:00
|
|
|
"code.jmug.me/jmug/compiler-in-go/pkg/token"
|
2025-01-13 19:51:49 -08:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type IfExpression struct {
|
|
|
|
|
Token token.Token // The `if` token.
|
|
|
|
|
Condition Expression
|
|
|
|
|
Consequence *BlockStatement
|
|
|
|
|
Alternative *BlockStatement
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (ie *IfExpression) expressionNode() {}
|
|
|
|
|
func (ie *IfExpression) TokenLiteral() string {
|
|
|
|
|
return ie.Token.Literal
|
|
|
|
|
}
|
|
|
|
|
func (ie *IfExpression) String() string {
|
|
|
|
|
var out bytes.Buffer
|
|
|
|
|
out.WriteString("if")
|
|
|
|
|
out.WriteString(ie.Condition.String())
|
|
|
|
|
out.WriteString(" ")
|
|
|
|
|
out.WriteString(ie.Consequence.String())
|
|
|
|
|
if ie.Alternative != nil {
|
|
|
|
|
out.WriteString("else ")
|
|
|
|
|
out.WriteString(ie.Alternative.String())
|
|
|
|
|
}
|
|
|
|
|
return out.String()
|
|
|
|
|
}
|