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:
parent
d3f1ccd518
commit
7ac15a7557
2 changed files with 15 additions and 3 deletions
|
@ -251,9 +251,10 @@ func (c *codegen) convertFuncDecl(file ast.Node, decl *ast.FuncDecl) {
|
||||||
|
|
||||||
// Load the arguments in scope.
|
// Load the arguments in scope.
|
||||||
for _, arg := range decl.Type.Params.List {
|
for _, arg := range decl.Type.Params.List {
|
||||||
name := arg.Names[0].Name // for now.
|
for _, id := range arg.Names {
|
||||||
l := c.scope.newLocal(name)
|
l := c.scope.newLocal(id.Name)
|
||||||
c.emitStoreLocal(l)
|
c.emitStoreLocal(l)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// Load in all the global variables in to the scope of the function.
|
// Load in all the global variables in to the scope of the function.
|
||||||
// This is not necessary for syscalls.
|
// This is not necessary for syscalls.
|
||||||
|
|
|
@ -158,3 +158,14 @@ func TestFunctionWithVoidReturnBranch(t *testing.T) {
|
||||||
eval(t, src, big.NewInt(2))
|
eval(t, src, big.NewInt(2))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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))
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue