forked from TrueCloudLab/neoneo-go
compiler: allow to use multiple underscores in func arguments
It should still be present in the argument array in VM so just don't save them in the map. Signed-off-by: Evgeniy Stratonikov <evgeniy@nspcc.ru>
This commit is contained in:
parent
fb31a81fd2
commit
8d562cef99
2 changed files with 18 additions and 0 deletions
|
@ -313,3 +313,14 @@ func TestJumpOptimize(t *testing.T) {
|
||||||
require.Equal(t, b[mi.Range.End], byte(opcode.RET))
|
require.Equal(t, b[mi.Range.End], byte(opcode.RET))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestFunctionUnusedParameters(t *testing.T) {
|
||||||
|
src := `package foo
|
||||||
|
func add13(a int, _ int, _1 int, _ int) int {
|
||||||
|
return a + _1
|
||||||
|
}
|
||||||
|
func Main() int {
|
||||||
|
return add13(1, 10, 100, 1000)
|
||||||
|
}`
|
||||||
|
eval(t, src, big.NewInt(101))
|
||||||
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ package compiler
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"go/ast"
|
"go/ast"
|
||||||
|
"strconv"
|
||||||
)
|
)
|
||||||
|
|
||||||
type varScope struct {
|
type varScope struct {
|
||||||
|
@ -70,6 +71,12 @@ func (c *varScope) newVariable(t varType, name string) int {
|
||||||
case varLocal:
|
case varLocal:
|
||||||
return c.newLocal(name)
|
return c.newLocal(name)
|
||||||
case varArgument:
|
case varArgument:
|
||||||
|
if name == "_" {
|
||||||
|
// See #2204. This name won't actually be referenced.
|
||||||
|
// This approach simplifies argument allocation and
|
||||||
|
// makes debugging easier.
|
||||||
|
name = "%_" + strconv.FormatUint(uint64(len(c.arguments)), 10)
|
||||||
|
}
|
||||||
_, ok := c.arguments[name]
|
_, ok := c.arguments[name]
|
||||||
if ok {
|
if ok {
|
||||||
panic("argument is already allocated")
|
panic("argument is already allocated")
|
||||||
|
|
Loading…
Reference in a new issue