cuelang.org/go@v0.10.1/cue/testdata/eval/letjoin.txtar (about) 1 -- in.cue -- 2 // Test that an error in a let that is merged with itself from two different 3 // origins does not result in an error as long as the error is not referenced 4 // outside the let. 5 t1: { 6 x: { 7 a: int 8 y: { 9 let X = { 10 b: a 11 c: 1 12 } 13 v: X.c 14 } 15 } 16 17 x1: x 18 x1: a: 1 19 20 x2: x 21 x2: a: 2 22 23 xy: x1.y & x2.y 24 } 25 26 t2: { 27 x: { 28 a: {} 29 y: { 30 let X = { 31 b: a 32 c: 1 33 } 34 v: X.c 35 } 36 } 37 38 x1: x 39 x1: a: q: 1 40 41 x2: x 42 x2: a: r: 2 43 44 xy: x1 & x2 45 } 46 -- out/eval/stats -- 47 Leaks: 8 48 Freed: 65 49 Reused: 60 50 Allocs: 13 51 Retain: 8 52 53 Unifications: 73 54 Conjuncts: 123 55 Disjuncts: 69 56 -- out/evalalpha -- 57 (struct){ 58 t1: (struct){ 59 x: (struct){ 60 a: (int){ int } 61 y: (struct){ 62 let X#1 = (struct){ 63 b: (int){ int } 64 c: (int){ 1 } 65 } 66 v: (int){ 1 } 67 } 68 } 69 x1: (struct){ 70 a: (int){ 1 } 71 y: (struct){ 72 let X#1 = (struct){ 73 b: (int){ 1 } 74 c: (int){ 1 } 75 } 76 v: (int){ 1 } 77 } 78 } 79 x2: (struct){ 80 a: (int){ 2 } 81 y: (struct){ 82 let X#1 = (struct){ 83 b: (int){ 2 } 84 c: (int){ 1 } 85 } 86 v: (int){ 1 } 87 } 88 } 89 xy: (struct){ 90 let X#1multi = { 91 b: 〈2;a〉 92 c: 1 93 } 94 v: (int){ 1 } 95 } 96 } 97 t2: (struct){ 98 x: (struct){ 99 a: (struct){ 100 } 101 y: (struct){ 102 let X#2 = (struct){ 103 b: (struct){ 104 } 105 c: (int){ 1 } 106 } 107 v: (int){ 1 } 108 } 109 } 110 x1: (struct){ 111 a: (struct){ 112 q: (int){ 1 } 113 } 114 y: (struct){ 115 let X#2 = (struct){ 116 b: (struct){ 117 q: (int){ 1 } 118 } 119 c: (int){ 1 } 120 } 121 v: (int){ 1 } 122 } 123 } 124 x2: (struct){ 125 a: (struct){ 126 r: (int){ 2 } 127 } 128 y: (struct){ 129 let X#2 = (struct){ 130 b: (struct){ 131 r: (int){ 2 } 132 } 133 c: (int){ 1 } 134 } 135 v: (int){ 1 } 136 } 137 } 138 xy: (struct){ 139 a: (struct){ 140 q: (int){ 1 } 141 r: (int){ 2 } 142 } 143 y: (struct){ 144 let X#2 = (struct){ 145 b: (struct){ 146 q: (int){ 1 } 147 r: (int){ 2 } 148 } 149 c: (int){ 1 } 150 } 151 v: (int){ 1 } 152 } 153 } 154 } 155 } 156 -- diff/-out/evalalpha<==>+out/eval -- 157 diff old new 158 --- old 159 +++ new 160 @@ -85,9 +85,12 @@ 161 r: (int){ 2 } 162 } 163 y: (struct){ 164 - let X#2multi = { 165 - b: 〈2;a〉 166 - c: 1 167 + let X#2 = (struct){ 168 + b: (struct){ 169 + q: (int){ 1 } 170 + r: (int){ 2 } 171 + } 172 + c: (int){ 1 } 173 } 174 v: (int){ 1 } 175 } 176 -- diff/todo/p4 -- 177 Reduce conjunct group size. Semantically correct, though. 178 -- out/eval -- 179 (struct){ 180 t1: (struct){ 181 x: (struct){ 182 a: (int){ int } 183 y: (struct){ 184 let X#1 = (struct){ 185 b: (int){ int } 186 c: (int){ 1 } 187 } 188 v: (int){ 1 } 189 } 190 } 191 x1: (struct){ 192 a: (int){ 1 } 193 y: (struct){ 194 let X#1 = (struct){ 195 b: (int){ 1 } 196 c: (int){ 1 } 197 } 198 v: (int){ 1 } 199 } 200 } 201 x2: (struct){ 202 a: (int){ 2 } 203 y: (struct){ 204 let X#1 = (struct){ 205 b: (int){ 2 } 206 c: (int){ 1 } 207 } 208 v: (int){ 1 } 209 } 210 } 211 xy: (struct){ 212 let X#1multi = { 213 b: 〈2;a〉 214 c: 1 215 } 216 v: (int){ 1 } 217 } 218 } 219 t2: (struct){ 220 x: (struct){ 221 a: (struct){ 222 } 223 y: (struct){ 224 let X#2 = (struct){ 225 b: (struct){ 226 } 227 c: (int){ 1 } 228 } 229 v: (int){ 1 } 230 } 231 } 232 x1: (struct){ 233 a: (struct){ 234 q: (int){ 1 } 235 } 236 y: (struct){ 237 let X#2 = (struct){ 238 b: (struct){ 239 q: (int){ 1 } 240 } 241 c: (int){ 1 } 242 } 243 v: (int){ 1 } 244 } 245 } 246 x2: (struct){ 247 a: (struct){ 248 r: (int){ 2 } 249 } 250 y: (struct){ 251 let X#2 = (struct){ 252 b: (struct){ 253 r: (int){ 2 } 254 } 255 c: (int){ 1 } 256 } 257 v: (int){ 1 } 258 } 259 } 260 xy: (struct){ 261 a: (struct){ 262 q: (int){ 1 } 263 r: (int){ 2 } 264 } 265 y: (struct){ 266 let X#2multi = { 267 b: 〈2;a〉 268 c: 1 269 } 270 v: (int){ 1 } 271 } 272 } 273 } 274 } 275 -- out/compile -- 276 --- in.cue 277 { 278 t1: { 279 x: { 280 a: int 281 y: { 282 let X#1 = { 283 b: 〈2;a〉 284 c: 1 285 } 286 v: 〈0;let X#1〉.c 287 } 288 } 289 x1: 〈0;x〉 290 x1: { 291 a: 1 292 } 293 x2: 〈0;x〉 294 x2: { 295 a: 2 296 } 297 xy: (〈0;x1〉.y & 〈0;x2〉.y) 298 } 299 t2: { 300 x: { 301 a: {} 302 y: { 303 let X#2 = { 304 b: 〈2;a〉 305 c: 1 306 } 307 v: 〈0;let X#2〉.c 308 } 309 } 310 x1: 〈0;x〉 311 x1: { 312 a: { 313 q: 1 314 } 315 } 316 x2: 〈0;x〉 317 x2: { 318 a: { 319 r: 2 320 } 321 } 322 xy: (〈0;x1〉 & 〈0;x2〉) 323 } 324 }