Skip to content

Commit 6f43069

Browse files
committed
Optimizer should return []interface{} as well.
1 parent 971d241 commit 6f43069

File tree

3 files changed

+20
-26
lines changed

3 files changed

+20
-26
lines changed

ast/print.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,17 +29,17 @@ func dump(v reflect.Value, ident string) string {
2929
return out + ident + "}"
3030
case reflect.Slice:
3131
if v.Len() == 0 {
32-
return "[]"
32+
return t.String() + "{}"
3333
}
34-
out := "[\n"
34+
out := t.String() + "{\n"
3535
for i := 0; i < v.Len(); i++ {
3636
s := v.Index(i)
3737
out += fmt.Sprintf("%v%v,", ident+"\t", dump(s, ident+"\t"))
3838
if i+1 < v.Len() {
3939
out += "\n"
4040
}
4141
}
42-
return out + "\n" + ident + "]"
42+
return out + "\n" + ident + "}"
4343
case reflect.Ptr:
4444
return dump(v.Elem(), ident)
4545
case reflect.Interface:

optimizer/fold.go

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -99,34 +99,28 @@ func (fold *fold) Visit(node *Node) {
9999

100100
case *ArrayNode:
101101
if len(n.Nodes) > 0 {
102-
103-
for _, a := range n.Nodes {
104-
if _, ok := a.(*IntegerNode); !ok {
105-
goto string
106-
}
107-
}
108-
{
109-
value := make([]int, len(n.Nodes))
110-
for i, a := range n.Nodes {
111-
value[i] = a.(*IntegerNode).Value
112-
}
113-
patch(&ConstantNode{Value: value})
114-
}
115-
116-
string:
117102
for _, a := range n.Nodes {
118-
if _, ok := a.(*StringNode); !ok {
103+
switch a.(type) {
104+
case *IntegerNode, *FloatNode, *StringNode, *BoolNode:
105+
continue
106+
default:
119107
return
120108
}
121109
}
122-
{
123-
value := make([]string, len(n.Nodes))
124-
for i, a := range n.Nodes {
125-
value[i] = a.(*StringNode).Value
110+
value := make([]interface{}, len(n.Nodes))
111+
for i, a := range n.Nodes {
112+
switch b := a.(type) {
113+
case *IntegerNode:
114+
value[i] = b.Value
115+
case *FloatNode:
116+
value[i] = b.Value
117+
case *StringNode:
118+
value[i] = b.Value
119+
case *BoolNode:
120+
value[i] = b.Value
126121
}
127-
patch(&ConstantNode{Value: value})
128122
}
129-
123+
patch(&ConstantNode{Value: value})
130124
}
131125

132126
case *BuiltinNode:

optimizer/optimizer_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ func TestOptimize_constant_folding(t *testing.T) {
2121
require.NoError(t, err)
2222

2323
expected := &ast.MemberNode{
24-
Node: &ast.ConstantNode{Value: []int{1, 2, 3}},
24+
Node: &ast.ConstantNode{Value: []interface{}{1, 2, 3}},
2525
Property: &ast.IntegerNode{Value: 0},
2626
}
2727

0 commit comments

Comments
 (0)