github.com/llvm-mirror/llgo@v0.0.0-20190322182713-bf6f0a60fce1/test/execution/interfaces/methods.go (about)

     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  }