diff --git a/src/go/printer/nodes.go b/src/go/printer/nodes.go index f339322cb1..6f0bc7cef0 100644 --- a/src/go/printer/nodes.go +++ b/src/go/printer/nodes.go @@ -1107,13 +1107,16 @@ func (p *printer) expr(x ast.Expr) { func (p *printer) constraint(x *ast.Constraint) { p.print(x.Pos()) + if x.Star.IsValid() { + p.print(token.MUL) + } if x.Param == nil { // embedded contract p.expr(x.Types[0]) return } // method or list of types - p.print(x.Param, blank) + p.print(x.Param, vtab) if len(x.MNames) > 0 && x.MNames[0] != nil { // single method // For now we only support a single method diff --git a/src/go/printer/testdata/contracts.golden b/src/go/printer/testdata/contracts.golden index f45340a072..8c3f4ddd4a 100644 --- a/src/go/printer/testdata/contracts.golden +++ b/src/go/printer/testdata/contracts.golden @@ -13,23 +13,34 @@ contract ( ) contract _(T) { - T int - T float32, string, struct{} + T int + T float32, string, struct{} (C0) C0() C1(T) C2(T, T, T) - T m() - T int + T m() + T int } contract _(A, B, C) { - A a() // only a will be printed for now - B a() + A a() // only a will be printed for now + B a() // a 1st comment // a 2nd comment - C a() + C a() +} + +contract _(A, Aa, Aaaa, Aaaaa) { + A m() + Aa m() + *Aaa m() + *Aaaa m() + Aaaaa int + + A string + Aaaaa float32 } type _(type T) interface{} diff --git a/src/go/printer/testdata/contracts.input b/src/go/printer/testdata/contracts.input index 7d8e9096c8..b3a506bdd8 100644 --- a/src/go/printer/testdata/contracts.input +++ b/src/go/printer/testdata/contracts.input @@ -32,6 +32,17 @@ contract _(A, B, C) { C a() } +contract _(A, Aa, Aaaa, Aaaaa) { + A m() + Aa m() + *Aaa m() + *Aaaa m() + Aaaaa int + + A string + Aaaaa float32 +} + type _(type T) interface{} type _(type T) interface{ m(T)