32 lines
696 B
Go
32 lines
696 B
Go
package ast
|
|
|
|
import (
|
|
"bytes"
|
|
"strings"
|
|
|
|
"code.jmug.me/jmug/interpreter-in-go/pkg/token"
|
|
)
|
|
|
|
type FunctionLiteral struct {
|
|
Token token.Token // The fn token
|
|
Parameters []*Identifier
|
|
Body *BlockStatement
|
|
}
|
|
|
|
func (fl *FunctionLiteral) expressionNode() {}
|
|
func (fl *FunctionLiteral) TokenLiteral() string {
|
|
return fl.Token.Literal
|
|
}
|
|
func (fl *FunctionLiteral) String() string {
|
|
var out bytes.Buffer
|
|
params := []string{}
|
|
for _, p := range fl.Parameters {
|
|
params = append(params, p.String())
|
|
}
|
|
out.WriteString(fl.TokenLiteral())
|
|
out.WriteString("(")
|
|
out.WriteString(strings.Join(params, ", "))
|
|
out.WriteString(") ")
|
|
out.WriteString(fl.Body.String())
|
|
return out.String()
|
|
}
|