diff options
Diffstat (limited to 'ast')
| -rw-r--r-- | ast/ast.go | 27 |
1 files changed, 27 insertions, 0 deletions
@@ -3,6 +3,7 @@ package ast import ( "bytes" "mana/tokens" + "strings" ) type Node interface { @@ -247,3 +248,29 @@ func (ie *IfExpression) String() string { return out.String() } + +type FunctionLiteral struct { + Token tokens.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() +} |
