cuelang.org/go@v0.10.1/cue/testdata/disjunctions/defembed.txtar (about) 1 Interaction between defaults, embedding and disjunctions. 2 3 // TODO: at the moment, using a default will select it. 4 -- in.cue -- 5 x: { 6 // All of these resolve to *2 | 3 7 m1: (1 | (*2 | 3)) & (>=2 & <=3) 8 m2: (1 | (*2 | 3)) & (2 | 3) 9 m3: (*1 | *(*2 | 3)) & (2 | 3) 10 } 11 y1: x & { 12 {m4: x.m1 + x.m2 + x.m3} 13 } 14 y2: { 15 x 16 {m4: y2.m1 + y2.m2 + y2.m3} 17 } 18 Y=y3: { 19 x 20 {m4: Y.m1 + Y.m2 + Y.m3} 21 } 22 y4: x & { 23 {m4: y4.m1 + y4.m2 + y4.m3} 24 } 25 26 // Second disjunct in embedding is not possible because of previous declaration 27 // of `b`, so it should be resolved to {a: 1}. 28 z: { 29 b: (*"a" | "b") | "c" 30 {a: b} | {b: int} 31 } 32 -- out/eval/stats -- 33 Leaks: 0 34 Freed: 163 35 Reused: 155 36 Allocs: 8 37 Retain: 0 38 39 Unifications: 29 40 Conjuncts: 198 41 Disjuncts: 163 42 -- out/eval -- 43 (struct){ 44 x: (struct){ 45 m1: (int){ |(*(int){ 2 }, (int){ 3 }) } 46 m2: (int){ |(*(int){ 2 }, (int){ 3 }) } 47 m3: (int){ |(*(int){ 2 }, (int){ 3 }) } 48 } 49 y1: (struct){ 50 m1: (int){ |(*(int){ 2 }, (int){ 3 }) } 51 m2: (int){ |(*(int){ 2 }, (int){ 3 }) } 52 m3: (int){ |(*(int){ 2 }, (int){ 3 }) } 53 m4: (int){ 6 } 54 } 55 y2: (struct){ 56 m1: (int){ |(*(int){ 2 }, (int){ 3 }) } 57 m2: (int){ |(*(int){ 2 }, (int){ 3 }) } 58 m3: (int){ |(*(int){ 2 }, (int){ 3 }) } 59 m4: (int){ 6 } 60 } 61 y3: (struct){ 62 m1: (int){ |(*(int){ 2 }, (int){ 3 }) } 63 m2: (int){ |(*(int){ 2 }, (int){ 3 }) } 64 m3: (int){ |(*(int){ 2 }, (int){ 3 }) } 65 m4: (int){ 6 } 66 } 67 y4: (struct){ 68 m1: (int){ |(*(int){ 2 }, (int){ 3 }) } 69 m2: (int){ |(*(int){ 2 }, (int){ 3 }) } 70 m3: (int){ |(*(int){ 2 }, (int){ 3 }) } 71 m4: (int){ 6 } 72 } 73 z: (struct){ 74 b: (string){ |(*(string){ "a" }, (string){ "b" }, (string){ "c" }) } 75 a: (string){ |(*(string){ "a" }, (string){ "b" }, (string){ "c" }) } 76 } 77 } 78 -- out/evalalpha -- 79 (struct){ 80 x: (struct){ 81 m1: (int){ |(*(int){ 2 }, (int){ 3 }) } 82 m2: (int){ |(*(int){ 2 }, (int){ 3 }) } 83 m3: (int){ |(*(int){ 2 }, (int){ 3 }) } 84 } 85 y1: (struct){ 86 m4: (int){ 6 } 87 m1: (int){ |(*(int){ 2 }, (int){ 3 }) } 88 m2: (int){ |(*(int){ 2 }, (int){ 3 }) } 89 m3: (int){ |(*(int){ 2 }, (int){ 3 }) } 90 } 91 y2: (struct){ 92 m4: (int){ 6 } 93 m1: (int){ |(*(int){ 2 }, (int){ 3 }) } 94 m2: (int){ |(*(int){ 2 }, (int){ 3 }) } 95 m3: (int){ |(*(int){ 2 }, (int){ 3 }) } 96 } 97 y3: (struct){ 98 m4: (int){ 6 } 99 m1: (int){ |(*(int){ 2 }, (int){ 3 }) } 100 m2: (int){ |(*(int){ 2 }, (int){ 3 }) } 101 m3: (int){ |(*(int){ 2 }, (int){ 3 }) } 102 } 103 y4: (struct){ 104 m4: (int){ 6 } 105 m1: (int){ |(*(int){ 2 }, (int){ 3 }) } 106 m2: (int){ |(*(int){ 2 }, (int){ 3 }) } 107 m3: (int){ |(*(int){ 2 }, (int){ 3 }) } 108 } 109 z: (struct){ 110 b: (string){ |(*(string){ "a" }, (string){ "b" }, (string){ "c" }) } 111 a: (string){ |(*(string){ "a" }, (string){ "b" }, (string){ "c" }) } 112 } 113 } 114 -- diff/-out/evalalpha<==>+out/eval -- 115 diff old new 116 --- old 117 +++ new 118 @@ -5,28 +5,28 @@ 119 m3: (int){ |(*(int){ 2 }, (int){ 3 }) } 120 } 121 y1: (struct){ 122 - m1: (int){ |(*(int){ 2 }, (int){ 3 }) } 123 - m2: (int){ |(*(int){ 2 }, (int){ 3 }) } 124 - m3: (int){ |(*(int){ 2 }, (int){ 3 }) } 125 - m4: (int){ 6 } 126 + m4: (int){ 6 } 127 + m1: (int){ |(*(int){ 2 }, (int){ 3 }) } 128 + m2: (int){ |(*(int){ 2 }, (int){ 3 }) } 129 + m3: (int){ |(*(int){ 2 }, (int){ 3 }) } 130 } 131 y2: (struct){ 132 - m1: (int){ |(*(int){ 2 }, (int){ 3 }) } 133 - m2: (int){ |(*(int){ 2 }, (int){ 3 }) } 134 - m3: (int){ |(*(int){ 2 }, (int){ 3 }) } 135 - m4: (int){ 6 } 136 + m4: (int){ 6 } 137 + m1: (int){ |(*(int){ 2 }, (int){ 3 }) } 138 + m2: (int){ |(*(int){ 2 }, (int){ 3 }) } 139 + m3: (int){ |(*(int){ 2 }, (int){ 3 }) } 140 } 141 y3: (struct){ 142 - m1: (int){ |(*(int){ 2 }, (int){ 3 }) } 143 - m2: (int){ |(*(int){ 2 }, (int){ 3 }) } 144 - m3: (int){ |(*(int){ 2 }, (int){ 3 }) } 145 - m4: (int){ 6 } 146 + m4: (int){ 6 } 147 + m1: (int){ |(*(int){ 2 }, (int){ 3 }) } 148 + m2: (int){ |(*(int){ 2 }, (int){ 3 }) } 149 + m3: (int){ |(*(int){ 2 }, (int){ 3 }) } 150 } 151 y4: (struct){ 152 - m1: (int){ |(*(int){ 2 }, (int){ 3 }) } 153 - m2: (int){ |(*(int){ 2 }, (int){ 3 }) } 154 - m3: (int){ |(*(int){ 2 }, (int){ 3 }) } 155 - m4: (int){ 6 } 156 + m4: (int){ 6 } 157 + m1: (int){ |(*(int){ 2 }, (int){ 3 }) } 158 + m2: (int){ |(*(int){ 2 }, (int){ 3 }) } 159 + m3: (int){ |(*(int){ 2 }, (int){ 3 }) } 160 } 161 z: (struct){ 162 b: (string){ |(*(string){ "a" }, (string){ "b" }, (string){ "c" }) } 163 -- diff/todo/p3 -- 164 Reordering. 165 -- out/compile -- 166 --- in.cue 167 { 168 x: { 169 m1: ((1|(*2|3)) & (>=2 & <=3)) 170 m2: ((1|(*2|3)) & (2|3)) 171 m3: ((*1|*(*2|3)) & (2|3)) 172 } 173 y1: (〈0;x〉 & { 174 { 175 m4: ((〈2;x〉.m1 + 〈2;x〉.m2) + 〈2;x〉.m3) 176 } 177 }) 178 y2: { 179 〈1;x〉 180 { 181 m4: ((〈2;y2〉.m1 + 〈2;y2〉.m2) + 〈2;y2〉.m3) 182 } 183 } 184 y3: { 185 〈1;x〉 186 { 187 m4: ((〈2;y3〉.m1 + 〈2;y3〉.m2) + 〈2;y3〉.m3) 188 } 189 } 190 y4: (〈0;x〉 & { 191 { 192 m4: ((〈2;y4〉.m1 + 〈2;y4〉.m2) + 〈2;y4〉.m3) 193 } 194 }) 195 z: { 196 b: ((*"a"|"b")|"c") 197 ({ 198 a: 〈1;b〉 199 }|{ 200 b: int 201 }) 202 } 203 }