/
call_expression.go
53 lines (42 loc) · 1000 Bytes
/
call_expression.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package ast
import (
"bytes"
"strings"
)
type CallExpression struct {
TokenAble
Callee Expression
ChainCallee Expression
Function Expression
Arguments []Expression
Block *BlockStatement
ElseBlock *BlockStatement
}
var _ Comparable = &CallExpression{}
var _ Expression = &CallExpression{}
func (ce *CallExpression) validIfCondition() bool { return true }
func (ce *CallExpression) expressionNode() {}
func (ce *CallExpression) String() string {
var out bytes.Buffer
args := []string{}
for _, a := range ce.Arguments {
if a != nil {
args = append(args, a.String())
}
}
out.WriteString(ce.Function.String())
out.WriteString("(")
out.WriteString(strings.Join(args, ", "))
out.WriteString(")")
if ce.Block != nil {
out.WriteString(" {\n")
out.WriteString(ce.Block.String())
out.WriteString("}")
}
if ce.ElseBlock != nil {
out.WriteString(" else { ")
out.WriteString(ce.ElseBlock.String())
out.WriteString(" }")
}
return out.String()
}