github.com/aykevl/tinygo@v0.5.0/testdata/structs.go (about)

     1  package main
     2  
     3  // TODO: add .ll test files to check the output
     4  
     5  type s0 struct {
     6  }
     7  
     8  type s1 struct {
     9  	a byte
    10  }
    11  
    12  type s2 struct {
    13  	a byte
    14  	b byte
    15  }
    16  
    17  type s3 struct {
    18  	a byte
    19  	b byte
    20  	c byte
    21  }
    22  
    23  // should not be expanded
    24  type s4 struct {
    25  	a byte
    26  	b byte
    27  	c byte
    28  	d byte
    29  }
    30  
    31  // same struct, different type
    32  type s4b struct {
    33  	a byte
    34  	b byte
    35  	c byte
    36  	d byte
    37  }
    38  
    39  type s5 struct {
    40  	a struct {
    41  		aa byte
    42  		ab byte
    43  	}
    44  	b byte
    45  }
    46  
    47  type s6 struct {
    48  	a string
    49  	b byte
    50  }
    51  
    52  type s7 struct {
    53  	a interface{}
    54  	b byte
    55  }
    56  
    57  // should not be expanded
    58  type s8 struct {
    59  	a []byte // 3 elements
    60  	b byte   // 1 element
    61  }
    62  
    63  func test0(s s0) {
    64  	println("test0")
    65  }
    66  
    67  func test1(s s1) {
    68  	println("test1", s.a)
    69  }
    70  
    71  func test2(s s2) {
    72  	println("test2", s.a, s.b)
    73  }
    74  
    75  func test3(s s3) {
    76  	println("test3", s.a, s.b, s.c)
    77  }
    78  
    79  func test4(s s4) {
    80  	println("test4", s.a, s.b, s.c, s.d)
    81  	test4b(s4b(s))
    82  	test4bp((*s4b)(&s))
    83  }
    84  
    85  func test4b(s s4b) {
    86  	println("test4b", s.a, s.b, s.c, s.d)
    87  }
    88  
    89  func test4bp(s *s4b) {
    90  	println("test4bp", s.a, s.b, s.c, s.d)
    91  }
    92  
    93  func test5(s s5) {
    94  	println("test5", s.a.aa, s.a.ab, s.b)
    95  }
    96  
    97  func test6(s s6) {
    98  	println("test6", s.a, len(s.a), s.b)
    99  }
   100  
   101  func test7(s s7) {
   102  	println("test7", s.a, s.b)
   103  }
   104  
   105  func test8(s s8) {
   106  	println("test8", len(s.a), cap(s.a), s.a[0], s.a[1], s.b)
   107  }
   108  
   109  func main() {
   110  	test0(s0{})
   111  	test1(s1{1})
   112  	test2(s2{1, 2})
   113  	test3(s3{1, 2, 3})
   114  	test4(s4{1, 2, 3, 4})
   115  	test5(s5{a: struct {
   116  		aa byte
   117  		ab byte
   118  	}{1, 2}, b: 3})
   119  	test6(s6{"foo", 5})
   120  	test7(s7{a: nil, b: 8})
   121  	test8(s8{[]byte{12, 13, 14}[:2], 6})
   122  }