1package foo:foo 2 3interface variants { 4 enum e1 { 5 a, 6 } 7 8 e1-arg: func(x: e1) 9 e1-result: func() -> e1 10 11 union u1 { 12 u32, 13 float32, 14 } 15 16 u1-arg: func(x: u1) 17 u1-result: func() -> u1 18 19 record empty {} 20 21 variant v1 { 22 a, 23 b(u1), 24 c(e1), 25 d(string), 26 e(empty), 27 f, 28 g(u32), 29 } 30 31 v1-arg: func(x: v1) 32 v1-result: func() -> v1 33 34 bool-arg: func(x: bool) 35 bool-result: func() -> bool 36 37 option-arg: func( 38 a: option<bool>, 39 b: option<tuple<>>, 40 c: option<u32>, 41 d: option<e1>, 42 e: option<float32>, 43 f: option<u1>, 44 g: option<option<bool>>, 45 ) 46 option-result: func() -> tuple< 47 option<bool>, 48 option<tuple<>>, 49 option<u32>, 50 option<e1>, 51 option<float32>, 52 option<u1>, 53 option<option<bool>>, 54 > 55 56 variant casts1 { 57 a(s32), 58 b(float32), 59 } 60 61 variant casts2 { 62 a(float64), 63 b(float32), 64 } 65 66 variant casts3 { 67 a(float64), 68 b(u64), 69 } 70 71 variant casts4 { 72 a(u32), 73 b(s64), 74 } 75 76 variant casts5 { 77 a(float32), 78 b(s64), 79 } 80 81 variant casts6 { 82 a(tuple<float32, u32>), 83 b(tuple<u32, u32>), 84 } 85 86 casts: func( 87 a: casts1, 88 b: casts2, 89 c: casts3, 90 d: casts4, 91 e: casts5, 92 f: casts6, 93 ) -> tuple< 94 casts1, 95 casts2, 96 casts3, 97 casts4, 98 casts5, 99 casts6, 100 > 101 102 result-arg: func( 103 a: result, 104 b: result<_, e1>, 105 c: result<e1>, 106 d: result<tuple<>, tuple<>>, 107 e: result<u32, v1>, 108 f: result<string, list<u8>>, 109 ) 110 result-result: func() -> tuple< 111 result, 112 result<_, e1>, 113 result<e1>, 114 result<tuple<>, tuple<>>, 115 result<u32, v1>, 116 result<string, list<u8>>, 117 > 118 119 enum my-errno { 120 bad1, 121 bad2, 122 } 123 124 return-result-sugar: func() -> result<s32, my-errno> 125 return-result-sugar2: func() -> result<_, my-errno> 126 return-result-sugar3: func() -> result<my-errno, my-errno> 127 return-result-sugar4: func() -> result<tuple<s32, u32>, my-errno> 128 return-option-sugar: func() -> option<s32> 129 return-option-sugar2: func() -> option<my-errno> 130 131 result-simple: func() -> result<u32, s32> 132 133 record is-clone { 134 v1: v1, 135 } 136 137 is-clone-arg: func(a: is-clone) 138 is-clone-return: func() -> is-clone 139 140 return-named-option: func() -> (a: option<u8>) 141 return-named-result: func() -> (a: result<u8, my-errno>) 142} 143 144world my-world { 145 import variants 146 export variants 147} 148