cuelang.org/go@v0.10.1/cue/testdata/references/let.txtar (about) 1 -- in.cue -- 2 import "list" 3 4 a1list: [{1}] 5 let A1 = a1list 6 a1: 100*A1[0] + A1[0] 7 8 a2list: [{2}] 9 let A2 = a2list 10 a2: b: 100*A2[0] + A2[0] 11 12 a3list: [{3}] 13 let A3 = a3list 14 a3: b: c: 100*A3[0] + A3[0] 15 16 a4list: [{4}] 17 let A4 = a4list 18 a4: [for x in A4 {v: 404}] 19 20 a5list: [{5}] 21 let A5 = a5list 22 a5: b: [for x in A5 {v: 505}] 23 24 a6list: [{6}] 25 let A6 = a6list 26 a6: b: c: [for x in A6 {v: 606}] 27 28 a7list: [{7}] 29 let A7 = a7list 30 a7: {for x in A7 {v: 707}} 31 32 a8list: [{8}] 33 let A8 = a8list 34 a8: b: {for x in A8 {v: 808}} 35 36 a9list: [{9}] 37 let A9 = a9list 38 a9: b: c: {for x in A9 {v: 909}} 39 40 // Issue #609: 41 // When a let value resolved to an incomplete value, it should pass this 42 // incomplete status to the expression in which it used. But 609 reported 43 // a gobbling of this incomplete status. The problem seemed to be not 44 // exclusive to the use of let, though. 45 incompleteLet: { 46 input: [1, 2, 3, 4, 5] 47 48 last: { 49 min: list.Min(input) 50 max: list.Max(input) 51 } 52 53 bar: { 54 let mn = last.min 55 let mx = list.max 56 57 min: mn 58 max: mx 59 } 60 61 x: { 62 if list.max < 0 { 63 } 64 } 65 } 66 67 // Let references should also work inside embedded scalars. 68 // Issue #1955 69 scalarReference: { 70 inScalar: p0: { 71 5 72 let x = 6 73 #b: x 74 } 75 inScalar: p1: { 76 #b: x 77 let x = 6 78 5 79 } 80 inList: p0: { 81 let x = { a: 1 } 82 [ x ] 83 } 84 inList: p1: { 85 [ x ] 86 let x = { a: 1 } 87 } 88 } 89 90 issue1116: { 91 a: { 92 #a: ["a", "b"] 93 let List = #a 94 List[len(List)-1] 95 } 96 b: { 97 let List = #a 98 List[len(List)-1] 99 #a: ["a", "b"] 100 } 101 } 102 -- out/compile -- 103 --- in.cue 104 { 105 a1list: [ 106 { 107 1 108 }, 109 ] 110 let A1#1 = 〈0;a1list〉 111 a1: ((100 * 〈0;let A1#1〉[0]) + 〈0;let A1#1〉[0]) 112 a2list: [ 113 { 114 2 115 }, 116 ] 117 let A2#2 = 〈0;a2list〉 118 a2: { 119 b: ((100 * 〈1;let A2#2〉[0]) + 〈1;let A2#2〉[0]) 120 } 121 a3list: [ 122 { 123 3 124 }, 125 ] 126 let A3#3 = 〈0;a3list〉 127 a3: { 128 b: { 129 c: ((100 * 〈2;let A3#3〉[0]) + 〈2;let A3#3〉[0]) 130 } 131 } 132 a4list: [ 133 { 134 4 135 }, 136 ] 137 let A4#4 = 〈0;a4list〉 138 a4: [ 139 for _, x in 〈1;let A4#4〉 { 140 v: 404 141 }, 142 ] 143 a5list: [ 144 { 145 5 146 }, 147 ] 148 let A5#5 = 〈0;a5list〉 149 a5: { 150 b: [ 151 for _, x in 〈2;let A5#5〉 { 152 v: 505 153 }, 154 ] 155 } 156 a6list: [ 157 { 158 6 159 }, 160 ] 161 let A6#6 = 〈0;a6list〉 162 a6: { 163 b: { 164 c: [ 165 for _, x in 〈3;let A6#6〉 { 166 v: 606 167 }, 168 ] 169 } 170 } 171 a7list: [ 172 { 173 7 174 }, 175 ] 176 let A7#7 = 〈0;a7list〉 177 a7: { 178 for _, x in 〈1;let A7#7〉 { 179 v: 707 180 } 181 } 182 a8list: [ 183 { 184 8 185 }, 186 ] 187 let A8#8 = 〈0;a8list〉 188 a8: { 189 b: { 190 for _, x in 〈2;let A8#8〉 { 191 v: 808 192 } 193 } 194 } 195 a9list: [ 196 { 197 9 198 }, 199 ] 200 let A9#9 = 〈0;a9list〉 201 a9: { 202 b: { 203 c: { 204 for _, x in 〈3;let A9#9〉 { 205 v: 909 206 } 207 } 208 } 209 } 210 incompleteLet: { 211 input: [ 212 1, 213 2, 214 3, 215 4, 216 5, 217 ] 218 last: { 219 min: 〈import;list〉.Min(〈1;input〉) 220 max: 〈import;list〉.Max(〈1;input〉) 221 } 222 bar: { 223 let mn#A = 〈1;last〉.min 224 let mx#B = 〈import;list〉.max 225 min: 〈0;let mn#A〉 226 max: 〈0;let mx#B〉 227 } 228 x: { 229 if (〈import;list〉.max < 0) {} 230 } 231 } 232 scalarReference: { 233 inScalar: { 234 p0: { 235 5 236 let x#C = 6 237 #b: 〈0;let x#C〉 238 } 239 } 240 inScalar: { 241 p1: { 242 #b: 〈0;let x#D〉 243 let x#D = 6 244 5 245 } 246 } 247 inList: { 248 p0: { 249 let x#E = { 250 a: 1 251 } 252 [ 253 〈1;let x#E〉, 254 ] 255 } 256 } 257 inList: { 258 p1: { 259 [ 260 〈1;let x#F〉, 261 ] 262 let x#F = { 263 a: 1 264 } 265 } 266 } 267 } 268 issue1116: { 269 a: { 270 #a: [ 271 "a", 272 "b", 273 ] 274 let List#10 = 〈0;#a〉 275 〈0;let List#10〉[(len(〈0;let List#10〉) - 1)] 276 } 277 b: { 278 let List#11 = 〈0;#a〉 279 〈0;let List#11〉[(len(〈0;let List#11〉) - 1)] 280 #a: [ 281 "a", 282 "b", 283 ] 284 } 285 } 286 } 287 -- out/eval/stats -- 288 Leaks: 3 289 Freed: 112 290 Reused: 107 291 Allocs: 8 292 Retain: 10 293 294 Unifications: 115 295 Conjuncts: 169 296 Disjuncts: 117 297 -- out/evalalpha -- 298 (struct){ 299 a1list: (#list){ 300 0: (int){ 1 } 301 } 302 let A1#1 = (#list){ 303 0: (int){ 1 } 304 } 305 a1: (int){ 101 } 306 a2list: (#list){ 307 0: (int){ 2 } 308 } 309 let A2#2 = (#list){ 310 0: (int){ 2 } 311 } 312 a2: (struct){ 313 b: (int){ 202 } 314 } 315 a3list: (#list){ 316 0: (int){ 3 } 317 } 318 let A3#3 = (#list){ 319 0: (int){ 3 } 320 } 321 a3: (struct){ 322 b: (struct){ 323 c: (int){ 303 } 324 } 325 } 326 a4list: (#list){ 327 0: (int){ 4 } 328 } 329 let A4#4 = (#list){ 330 0: (int){ 4 } 331 } 332 a4: (#list){ 333 0: (struct){ 334 v: (int){ 404 } 335 } 336 } 337 a5list: (#list){ 338 0: (int){ 5 } 339 } 340 let A5#5 = (#list){ 341 0: (int){ 5 } 342 } 343 a5: (struct){ 344 b: (#list){ 345 0: (struct){ 346 v: (int){ 505 } 347 } 348 } 349 } 350 a6list: (#list){ 351 0: (int){ 6 } 352 } 353 let A6#6 = (#list){ 354 0: (int){ 6 } 355 } 356 a6: (struct){ 357 b: (struct){ 358 c: (#list){ 359 0: (struct){ 360 v: (int){ 606 } 361 } 362 } 363 } 364 } 365 a7list: (#list){ 366 0: (int){ 7 } 367 } 368 let A7#7 = (#list){ 369 0: (int){ 7 } 370 } 371 a7: (struct){ 372 v: (int){ 707 } 373 } 374 a8list: (#list){ 375 0: (int){ 8 } 376 } 377 let A8#8 = (#list){ 378 0: (int){ 8 } 379 } 380 a8: (struct){ 381 b: (struct){ 382 v: (int){ 808 } 383 } 384 } 385 a9list: (#list){ 386 0: (int){ 9 } 387 } 388 let A9#9 = (#list){ 389 0: (int){ 9 } 390 } 391 a9: (struct){ 392 b: (struct){ 393 c: (struct){ 394 v: (int){ 909 } 395 } 396 } 397 } 398 incompleteLet: (struct){ 399 input: (#list){ 400 0: (int){ 1 } 401 1: (int){ 2 } 402 2: (int){ 3 } 403 3: (int){ 4 } 404 4: (int){ 5 } 405 } 406 last: (struct){ 407 min: (int){ 1 } 408 max: (int){ 5 } 409 } 410 bar: (struct){ 411 let mn#A = (int){ 1 } 412 let mx#B = (_|_){ 413 // [incomplete] incompleteLet.bar.mx: undefined field: max: 414 // ./in.cue:54:17 415 } 416 min: (int){ 1 } 417 max: (_|_){ 418 // [incomplete] incompleteLet.bar.mx: undefined field: max: 419 // ./in.cue:54:17 420 } 421 } 422 x: (_|_){ 423 // [incomplete] incompleteLet.x: undefined field: max: 424 // ./in.cue:61:11 425 } 426 } 427 scalarReference: (struct){ 428 inScalar: (struct){ 429 p0: (int){ 430 5 431 let x#C = (int){ 6 } 432 #b: (int){ 6 } 433 } 434 p1: (int){ 435 5 436 #b: (int){ 6 } 437 let x#D = (int){ 6 } 438 } 439 } 440 inList: (struct){ 441 p0: (#list){ 442 let x#E = (struct){ 443 a: (int){ 1 } 444 } 445 0: (struct){ 446 a: (int){ 1 } 447 } 448 } 449 p1: (#list){ 450 let x#F = (struct){ 451 a: (int){ 1 } 452 } 453 0: (struct){ 454 a: (int){ 1 } 455 } 456 } 457 } 458 } 459 issue1116: (struct){ 460 a: (string){ 461 "b" 462 #a: (#list){ 463 0: (string){ "a" } 464 1: (string){ "b" } 465 } 466 let List#10 = (#list){ 467 0: (string){ "a" } 468 1: (string){ "b" } 469 } 470 } 471 b: (string){ 472 "b" 473 let List#11 = (#list){ 474 0: (string){ "a" } 475 1: (string){ "b" } 476 } 477 #a: (#list){ 478 0: (string){ "a" } 479 1: (string){ "b" } 480 } 481 } 482 } 483 } 484 -- diff/-out/evalalpha<==>+out/eval -- 485 diff old new 486 --- old 487 +++ new 488 @@ -118,7 +118,7 @@ 489 } 490 min: (int){ 1 } 491 max: (_|_){ 492 - // [incomplete] incompleteLet.bar.max: undefined field: max: 493 + // [incomplete] incompleteLet.bar.mx: undefined field: max: 494 // ./in.cue:54:17 495 } 496 } 497 @@ -173,9 +173,9 @@ 498 } 499 b: (string){ 500 "b" 501 - let List#11 = (_|_){ 502 - // [incomplete] issue1116.b.List: cycle error referencing #a: 503 - // ./in.cue:96:14 504 + let List#11 = (#list){ 505 + 0: (string){ "a" } 506 + 1: (string){ "b" } 507 } 508 #a: (#list){ 509 0: (string){ "a" } 510 -- diff/todo/p3 -- 511 Investigate let divergence. Probably okay. 512 -- out/eval -- 513 (struct){ 514 a1list: (#list){ 515 0: (int){ 1 } 516 } 517 let A1#1 = (#list){ 518 0: (int){ 1 } 519 } 520 a1: (int){ 101 } 521 a2list: (#list){ 522 0: (int){ 2 } 523 } 524 let A2#2 = (#list){ 525 0: (int){ 2 } 526 } 527 a2: (struct){ 528 b: (int){ 202 } 529 } 530 a3list: (#list){ 531 0: (int){ 3 } 532 } 533 let A3#3 = (#list){ 534 0: (int){ 3 } 535 } 536 a3: (struct){ 537 b: (struct){ 538 c: (int){ 303 } 539 } 540 } 541 a4list: (#list){ 542 0: (int){ 4 } 543 } 544 let A4#4 = (#list){ 545 0: (int){ 4 } 546 } 547 a4: (#list){ 548 0: (struct){ 549 v: (int){ 404 } 550 } 551 } 552 a5list: (#list){ 553 0: (int){ 5 } 554 } 555 let A5#5 = (#list){ 556 0: (int){ 5 } 557 } 558 a5: (struct){ 559 b: (#list){ 560 0: (struct){ 561 v: (int){ 505 } 562 } 563 } 564 } 565 a6list: (#list){ 566 0: (int){ 6 } 567 } 568 let A6#6 = (#list){ 569 0: (int){ 6 } 570 } 571 a6: (struct){ 572 b: (struct){ 573 c: (#list){ 574 0: (struct){ 575 v: (int){ 606 } 576 } 577 } 578 } 579 } 580 a7list: (#list){ 581 0: (int){ 7 } 582 } 583 let A7#7 = (#list){ 584 0: (int){ 7 } 585 } 586 a7: (struct){ 587 v: (int){ 707 } 588 } 589 a8list: (#list){ 590 0: (int){ 8 } 591 } 592 let A8#8 = (#list){ 593 0: (int){ 8 } 594 } 595 a8: (struct){ 596 b: (struct){ 597 v: (int){ 808 } 598 } 599 } 600 a9list: (#list){ 601 0: (int){ 9 } 602 } 603 let A9#9 = (#list){ 604 0: (int){ 9 } 605 } 606 a9: (struct){ 607 b: (struct){ 608 c: (struct){ 609 v: (int){ 909 } 610 } 611 } 612 } 613 incompleteLet: (struct){ 614 input: (#list){ 615 0: (int){ 1 } 616 1: (int){ 2 } 617 2: (int){ 3 } 618 3: (int){ 4 } 619 4: (int){ 5 } 620 } 621 last: (struct){ 622 min: (int){ 1 } 623 max: (int){ 5 } 624 } 625 bar: (struct){ 626 let mn#A = (int){ 1 } 627 let mx#B = (_|_){ 628 // [incomplete] incompleteLet.bar.mx: undefined field: max: 629 // ./in.cue:54:17 630 } 631 min: (int){ 1 } 632 max: (_|_){ 633 // [incomplete] incompleteLet.bar.max: undefined field: max: 634 // ./in.cue:54:17 635 } 636 } 637 x: (_|_){ 638 // [incomplete] incompleteLet.x: undefined field: max: 639 // ./in.cue:61:11 640 } 641 } 642 scalarReference: (struct){ 643 inScalar: (struct){ 644 p0: (int){ 645 5 646 let x#C = (int){ 6 } 647 #b: (int){ 6 } 648 } 649 p1: (int){ 650 5 651 #b: (int){ 6 } 652 let x#D = (int){ 6 } 653 } 654 } 655 inList: (struct){ 656 p0: (#list){ 657 let x#E = (struct){ 658 a: (int){ 1 } 659 } 660 0: (struct){ 661 a: (int){ 1 } 662 } 663 } 664 p1: (#list){ 665 let x#F = (struct){ 666 a: (int){ 1 } 667 } 668 0: (struct){ 669 a: (int){ 1 } 670 } 671 } 672 } 673 } 674 issue1116: (struct){ 675 a: (string){ 676 "b" 677 #a: (#list){ 678 0: (string){ "a" } 679 1: (string){ "b" } 680 } 681 let List#10 = (#list){ 682 0: (string){ "a" } 683 1: (string){ "b" } 684 } 685 } 686 b: (string){ 687 "b" 688 let List#11 = (_|_){ 689 // [incomplete] issue1116.b.List: cycle error referencing #a: 690 // ./in.cue:96:14 691 } 692 #a: (#list){ 693 0: (string){ "a" } 694 1: (string){ "b" } 695 } 696 } 697 } 698 }