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