Peter Collingbourne | ad9841e | 2014-11-27 00:06:42 +0000 | [diff] [blame] | 1 | // RUN: llgo -o %t %s |
2 | // RUN: %t 2>&1 | FileCheck %s | ||||
3 | |||||
4 | // CHECK: X() | ||||
5 | // CHECK-NEXT: Y() | ||||
6 | // CHECK-NEXT: X() | ||||
7 | // CHECK-NEXT: Y() | ||||
8 | // CHECK-NEXT: X() | ||||
9 | |||||
10 | package main | ||||
11 | |||||
12 | type Stringer interface { | ||||
13 | String() string | ||||
14 | } | ||||
15 | |||||
16 | type X int | ||||
17 | type Y int | ||||
18 | |||||
19 | type Z1 struct { | ||||
20 | X | ||||
21 | } | ||||
22 | |||||
23 | type Z2 struct { | ||||
24 | Stringer | ||||
25 | } | ||||
26 | |||||
27 | func (x X) String() string { | ||||
28 | return "X()" | ||||
29 | } | ||||
30 | |||||
31 | func (y *Y) String() string { | ||||
32 | return "Y()" | ||||
33 | } | ||||
34 | |||||
35 | func makeX() X { | ||||
36 | return X(0) | ||||
37 | } | ||||
38 | |||||
39 | func main() { | ||||
40 | var z Stringer = X(0) | ||||
41 | println(z.String()) | ||||
42 | |||||
43 | z = new(Y) | ||||
44 | println(z.String()) | ||||
45 | |||||
46 | z = Z1{} | ||||
47 | println(z.String()) | ||||
48 | |||||
49 | z = Z2{new(Y)} | ||||
50 | println(z.String()) | ||||
51 | |||||
52 | println(makeX().String()) | ||||
53 | } |