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