compiler: support variables in slice literals

This commit is contained in:
Evgenii Stratonikov 2020-01-23 15:42:50 +03:00
parent eb59460032
commit def73db8e9
2 changed files with 25 additions and 2 deletions

View file

@ -365,7 +365,7 @@ func (c *codegen) Visit(node ast.Node) ast.Visitor {
return nil
}
for i := ln - 1; i >= 0; i-- {
c.emitLoadConst(c.typeInfo.Types[n.Elts[i]])
ast.Walk(c, n.Elts[i])
}
emitInt(c.prog.BinWriter, int64(ln))
emitOpcode(c.prog.BinWriter, opcode.PACK)

View file

@ -45,9 +45,32 @@ var sliceTestCases = []testCase{
`,
big.NewInt(9),
},
{
"slice literals with variables",
`
package foo
func Main() int {
elem := 7
a := []int{6, elem, 8}
return a[1]
}
`,
big.NewInt(7),
},
{
"slice literals with expressions",
`
package foo
func Main() int {
elem := []int{3, 7}
a := []int{6, elem[1]*2+1, 24}
return a[1]
}
`,
big.NewInt(15),
},
}
func TestSliceOperations(t *testing.T) {
runTestCases(t, sliceTestCases)
}