cuelang.org/go@v0.13.0/cue/testdata/comprehensions/issue3763.txtar (about) 1 -- reduced.cue -- 2 reduced: { 3 A: x1: y?: int // needs to be optional 4 A: x2: y?: int 5 A: x3: y?: int 6 7 if true { 8 let Z = [for _, x in A {x}] 9 B: [for z in Z if z.y != _|_ { b: 1 }] 10 } 11 } 12 -- full.cue -- 13 full: { 14 _core_v1: { 15 #cp: { 16 hostPort?: int32 17 cp: int32 18 } 19 } 20 21 k: n: n1: { 22 _CL: "l" 23 } 24 25 let nc = { 26 _ports: [ID=_]: _core_v1.#cp 27 } 28 29 _cl: [ID=_]: nc & { 30 _ports: { 31 "1": {} 32 "2": {} 33 "3": {} 34 } 35 } 36 37 k: n: [ID=_]: { 38 _CL: string 39 _cs: (_CL): _cl[(_CL)] 40 } 41 42 for _, n in k.n { 43 let cps = [for _, c in n._cs for _, cps in c._ports {cps}] 44 ports: [for cp in cps if cp.hostPort != _|_ { 45 port: "\(cp.hostPort)" 46 }] 47 } 48 49 _cl: l: {} 50 } 51 -- out/eval/stats -- 52 Leaks: 4 53 Freed: 66 54 Reused: 58 55 Allocs: 12 56 Retain: 10 57 58 Unifications: 70 59 Conjuncts: 129 60 Disjuncts: 76 61 -- out/evalalpha -- 62 (struct){ 63 full: (struct){ 64 _core_v1: (struct){ 65 #cp: (#struct){ 66 hostPort?: (int){ &(>=-2147483648, <=2147483647, int) } 67 cp: (int){ &(>=-2147483648, <=2147483647, int) } 68 } 69 } 70 k: (struct){ 71 n: (struct){ 72 n1: (struct){ 73 _CL: (string){ "l" } 74 _cs: (struct){ 75 l: ~(full._cl.l) 76 } 77 } 78 } 79 } 80 let nc#1 = (struct){ 81 _ports: (struct){ 82 } 83 } 84 _cl: (struct){ 85 l: (struct){ 86 _ports: (struct){ 87 "1": (#struct){ 88 hostPort?: (int){ &(>=-2147483648, <=2147483647, int) } 89 cp: (int){ &(>=-2147483648, <=2147483647, int) } 90 } 91 "2": (#struct){ 92 hostPort?: (int){ &(>=-2147483648, <=2147483647, int) } 93 cp: (int){ &(>=-2147483648, <=2147483647, int) } 94 } 95 "3": (#struct){ 96 hostPort?: (int){ &(>=-2147483648, <=2147483647, int) } 97 cp: (int){ &(>=-2147483648, <=2147483647, int) } 98 } 99 } 100 } 101 } 102 let cps#2multi = [ 103 for _, c in 〈2;n〉._cs for _, cps in 〈0;c〉._ports { 104 〈1;cps〉 105 }, 106 ] 107 ports: (#list){ 108 } 109 } 110 reduced: (struct){ 111 A: (struct){ 112 x1: (struct){ 113 y?: (int){ int } 114 } 115 x2: (struct){ 116 y?: (int){ int } 117 } 118 x3: (struct){ 119 y?: (int){ int } 120 } 121 } 122 let Z#3multi = [ 123 for _, x in 〈2;A〉 { 124 〈1;x〉 125 }, 126 ] 127 B: (#list){ 128 } 129 } 130 } 131 -- diff/-out/evalalpha<==>+out/eval -- 132 diff old new 133 --- old 134 +++ new 135 @@ -11,22 +11,7 @@ 136 n1: (struct){ 137 _CL: (string){ "l" } 138 _cs: (struct){ 139 - l: (struct){ 140 - _ports: (struct){ 141 - "1": (#struct){ 142 - hostPort?: (int){ &(>=-2147483648, <=2147483647, int) } 143 - cp: (int){ &(>=-2147483648, <=2147483647, int) } 144 - } 145 - "2": (#struct){ 146 - hostPort?: (int){ &(>=-2147483648, <=2147483647, int) } 147 - cp: (int){ &(>=-2147483648, <=2147483647, int) } 148 - } 149 - "3": (#struct){ 150 - hostPort?: (int){ &(>=-2147483648, <=2147483647, int) } 151 - cp: (int){ &(>=-2147483648, <=2147483647, int) } 152 - } 153 - } 154 - } 155 + l: ~(full._cl.l) 156 } 157 } 158 } 159 @@ -73,17 +58,11 @@ 160 y?: (int){ int } 161 } 162 } 163 - let Z#3 = (#list){ 164 - 0: (struct){ 165 - y?: (int){ int } 166 - } 167 - 1: (struct){ 168 - y?: (int){ int } 169 - } 170 - 2: (struct){ 171 - y?: (int){ int } 172 - } 173 - } 174 + let Z#3multi = [ 175 + for _, x in 〈2;A〉 { 176 + 〈1;x〉 177 + }, 178 + ] 179 B: (#list){ 180 } 181 } 182 -- out/eval -- 183 (struct){ 184 full: (struct){ 185 _core_v1: (struct){ 186 #cp: (#struct){ 187 hostPort?: (int){ &(>=-2147483648, <=2147483647, int) } 188 cp: (int){ &(>=-2147483648, <=2147483647, int) } 189 } 190 } 191 k: (struct){ 192 n: (struct){ 193 n1: (struct){ 194 _CL: (string){ "l" } 195 _cs: (struct){ 196 l: (struct){ 197 _ports: (struct){ 198 "1": (#struct){ 199 hostPort?: (int){ &(>=-2147483648, <=2147483647, int) } 200 cp: (int){ &(>=-2147483648, <=2147483647, int) } 201 } 202 "2": (#struct){ 203 hostPort?: (int){ &(>=-2147483648, <=2147483647, int) } 204 cp: (int){ &(>=-2147483648, <=2147483647, int) } 205 } 206 "3": (#struct){ 207 hostPort?: (int){ &(>=-2147483648, <=2147483647, int) } 208 cp: (int){ &(>=-2147483648, <=2147483647, int) } 209 } 210 } 211 } 212 } 213 } 214 } 215 } 216 let nc#1 = (struct){ 217 _ports: (struct){ 218 } 219 } 220 _cl: (struct){ 221 l: (struct){ 222 _ports: (struct){ 223 "1": (#struct){ 224 hostPort?: (int){ &(>=-2147483648, <=2147483647, int) } 225 cp: (int){ &(>=-2147483648, <=2147483647, int) } 226 } 227 "2": (#struct){ 228 hostPort?: (int){ &(>=-2147483648, <=2147483647, int) } 229 cp: (int){ &(>=-2147483648, <=2147483647, int) } 230 } 231 "3": (#struct){ 232 hostPort?: (int){ &(>=-2147483648, <=2147483647, int) } 233 cp: (int){ &(>=-2147483648, <=2147483647, int) } 234 } 235 } 236 } 237 } 238 let cps#2multi = [ 239 for _, c in 〈2;n〉._cs for _, cps in 〈0;c〉._ports { 240 〈1;cps〉 241 }, 242 ] 243 ports: (#list){ 244 } 245 } 246 reduced: (struct){ 247 A: (struct){ 248 x1: (struct){ 249 y?: (int){ int } 250 } 251 x2: (struct){ 252 y?: (int){ int } 253 } 254 x3: (struct){ 255 y?: (int){ int } 256 } 257 } 258 let Z#3 = (#list){ 259 0: (struct){ 260 y?: (int){ int } 261 } 262 1: (struct){ 263 y?: (int){ int } 264 } 265 2: (struct){ 266 y?: (int){ int } 267 } 268 } 269 B: (#list){ 270 } 271 } 272 } 273 -- out/compile -- 274 --- full.cue 275 { 276 full: { 277 _core_v1: { 278 #cp: { 279 hostPort?: &(int, >=-2147483648, <=2147483647) 280 cp: &(int, >=-2147483648, <=2147483647) 281 } 282 } 283 k: { 284 n: { 285 n1: { 286 _CL: "l" 287 } 288 } 289 } 290 let nc#1 = { 291 _ports: { 292 [_]: 〈2;_core_v1〉.#cp 293 } 294 } 295 _cl: { 296 [_]: (〈1;let nc#1〉 & { 297 _ports: { 298 "1": {} 299 "2": {} 300 "3": {} 301 } 302 }) 303 } 304 k: { 305 n: { 306 [_]: { 307 _CL: string 308 _cs: { 309 〈1;_CL〉: 〈4;_cl〉[〈1;_CL〉] 310 } 311 } 312 } 313 } 314 for _, n in 〈0;k〉.n { 315 let cps#2multi = [ 316 for _, c in 〈2;n〉._cs for _, cps in 〈0;c〉._ports { 317 〈1;cps〉 318 }, 319 ] 320 ports: [ 321 for _, cp in 〈1;let cps#2〉 if (〈0;cp〉.hostPort != _|_(explicit error (_|_ literal) in source)) { 322 port: "\(〈1;cp〉.hostPort)" 323 }, 324 ] 325 } 326 _cl: { 327 l: {} 328 } 329 } 330 } 331 --- reduced.cue 332 { 333 reduced: { 334 A: { 335 x1: { 336 y?: int 337 } 338 } 339 A: { 340 x2: { 341 y?: int 342 } 343 } 344 A: { 345 x3: { 346 y?: int 347 } 348 } 349 if true { 350 let Z#3 = [ 351 for _, x in 〈2;A〉 { 352 〈1;x〉 353 }, 354 ] 355 B: [ 356 for _, z in 〈1;let Z#3〉 if (〈0;z〉.y != _|_(explicit error (_|_ literal) in source)) { 357 b: 1 358 }, 359 ] 360 } 361 } 362 }