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
e097e86bfa
commit
37813f1020
2 changed files with 15 additions and 3 deletions
|
@ -249,9 +249,10 @@ 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)
|
||||
c.emitStoreLocal(l)
|
||||
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.
|
||||
|
|
|
@ -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))
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue