compiler: support implicit type in function arguments

Go supports declaring multiple arguments of the same type without
duplicating type name. Now we support this too.
This commit is contained in:
Evgenii Stratonikov 2020-05-06 18:20:12 +03:00
parent e097e86bfa
commit 37813f1020
2 changed files with 15 additions and 3 deletions

View file

@ -249,10 +249,11 @@ func (c *codegen) convertFuncDecl(file ast.Node, decl *ast.FuncDecl) {
// Load the arguments in scope.
for _, arg := range decl.Type.Params.List {
name := arg.Names[0].Name // for now.
l := c.scope.newLocal(name)
for _, id := range arg.Names {
l := c.scope.newLocal(id.Name)
c.emitStoreLocal(l)
}
}
// Load in all the global variables in to the scope of the function.
// This is not necessary for syscalls.
if !isSyscall(f) {

View file

@ -125,3 +125,14 @@ func TestFunctionWithVoidReturn(t *testing.T) {
`
eval(t, src, big.NewInt(6))
}
func TestFunctionWithMultipleArgumentNames(t *testing.T) {
src := `package foo
func Main() int {
return add(1, 2)
}
func add(a, b int) int {
return a + b
}`
eval(t, src, big.NewInt(3))
}