1
2
3
4
5
6
7
8
9 package main
10
11 var log string
12
13 type T int
14
15 func (t T) a(s string) T {
16 log += "a(" + s + ")"
17 return t
18 }
19
20 func (T) b(s string) string {
21 log += "b"
22 return s
23 }
24
25 type F func(s string) F
26
27 func a(s string) F {
28 log += "a(" + s + ")"
29 return F(a)
30 }
31
32 func b(s string) string {
33 log += "b"
34 return s
35 }
36
37 type I interface {
38 a(s string) I
39 b(s string) string
40 }
41
42 type T1 int
43
44 func (t T1) a(s string) I {
45 log += "a(" + s + ")"
46 return t
47 }
48
49 func (T1) b(s string) string {
50 log += "b"
51 return s
52 }
53
54 var ok = true
55
56 func bad() {
57 if !ok {
58 println("BUG")
59 ok = false
60 }
61 println(log)
62 }
63
64 func main() {
65 var t T
66 if t.a("1").a(t.b("2")); log != "a(1)ba(2)" {
67 bad()
68 }
69 log = ""
70 if a("3")(b("4"))(b("5")); log != "a(3)ba(4)ba(5)" {
71 bad()
72 }
73 log = ""
74 var i I = T1(0)
75 if i.a("6").a(i.b("7")).a(i.b("8")).a(i.b("9")); log != "a(6)ba(7)ba(8)ba(9)" {
76 bad()
77 }
78 }
79
80
View as plain text