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
pkg/compiler
|
@ -249,9 +249,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.
|
||||||
|
|
|
@ -125,3 +125,14 @@ func TestFunctionWithVoidReturn(t *testing.T) {
|
||||||
`
|
`
|
||||||
eval(t, src, big.NewInt(6))
|
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