OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [go.test/] [test/] [interface/] [receiver.go] - Blame information for rev 700

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 700 jeremybenn
// $G $D/$F.go && $L $F.$A && ./$A.out
2
 
3
// Copyright 2009 The Go Authors. All rights reserved.
4
// Use of this source code is governed by a BSD-style
5
// license that can be found in the LICENSE file.
6
 
7
// Implicit methods for embedded types.
8
// Mixed pointer and non-pointer receivers.
9
 
10
package main
11
 
12
type T int
13
 
14
var nv, np int
15
 
16
func (t T) V() {
17
        if t != 42 {
18
                panic(t)
19
        }
20
        nv++
21
}
22
 
23
func (t *T) P() {
24
        if *t != 42 {
25
                println(t, *t)
26
                panic("fail")
27
        }
28
        np++
29
}
30
 
31
type V interface {
32
        V()
33
}
34
type P interface {
35
        P()
36
        V()
37
}
38
 
39
type S struct {
40
        T
41
}
42
 
43
type SP struct {
44
        *T
45
}
46
 
47
func main() {
48
        var t T
49
        var v V
50
        var p P
51
 
52
        t = 42
53
 
54
        t.P()
55
        t.V()
56
 
57
        v = t
58
        v.V()
59
 
60
        p = &t
61
        p.P()
62
        p.V()
63
 
64
        v = &t
65
        v.V()
66
 
67
        //      p = t   // ERROR
68
        var i interface{} = t
69
        if _, ok := i.(P); ok {
70
                println("dynamic i.(P) succeeded incorrectly")
71
                panic("fail")
72
        }
73
 
74
        //      println("--struct--");
75
        var s S
76
        s.T = 42
77
        s.P()
78
        s.V()
79
 
80
        v = s
81
        s.V()
82
 
83
        p = &s
84
        p.P()
85
        p.V()
86
 
87
        v = &s
88
        v.V()
89
 
90
        //      p = s   // ERROR
91
        var j interface{} = s
92
        if _, ok := j.(P); ok {
93
                println("dynamic j.(P) succeeded incorrectly")
94
                panic("fail")
95
        }
96
 
97
        //      println("--struct pointer--");
98
        var sp SP
99
        sp.T = &t
100
        sp.P()
101
        sp.V()
102
 
103
        v = sp
104
        sp.V()
105
 
106
        p = &sp
107
        p.P()
108
        p.V()
109
 
110
        v = &sp
111
        v.V()
112
 
113
        p = sp // not error
114
        p.P()
115
        p.V()
116
 
117
        if nv != 13 || np != 7 {
118
                println("bad count", nv, np)
119
                panic("fail")
120
        }
121
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.