compiler: support variables in slice literals
This commit is contained in:
parent
eb59460032
commit
def73db8e9
2 changed files with 25 additions and 2 deletions
|
@ -365,7 +365,7 @@ func (c *codegen) Visit(node ast.Node) ast.Visitor {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
for i := ln - 1; i >= 0; i-- {
|
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))
|
emitInt(c.prog.BinWriter, int64(ln))
|
||||||
emitOpcode(c.prog.BinWriter, opcode.PACK)
|
emitOpcode(c.prog.BinWriter, opcode.PACK)
|
||||||
|
|
|
@ -45,9 +45,32 @@ var sliceTestCases = []testCase{
|
||||||
`,
|
`,
|
||||||
big.NewInt(9),
|
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) {
|
func TestSliceOperations(t *testing.T) {
|
||||||
runTestCases(t, sliceTestCases)
|
runTestCases(t, sliceTestCases)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue