From be05c459c07ae9e14f6c09fd3f820d8a459f3254 Mon Sep 17 00:00:00 2001 From: Bobby Date: Wed, 24 Jan 2024 21:26:00 +0000 Subject: fn literals --- ast/ast.go | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'ast') diff --git a/ast/ast.go b/ast/ast.go index 31b1be1..424b4ac 100644 --- a/ast/ast.go +++ b/ast/ast.go @@ -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() +} -- cgit v1.2.3