cuelang.org/go@v0.13.0/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 = ~(a1list) 303 a1: (int){ 101 } 304 a2list: (#list){ 305 0: (int){ 2 } 306 } 307 let A2#2 = ~(a2list) 308 a2: (struct){ 309 b: (int){ 202 } 310 } 311 a3list: (#list){ 312 0: (int){ 3 } 313 } 314 let A3#3 = ~(a3list) 315 a3: (struct){ 316 b: (struct){ 317 c: (int){ 303 } 318 } 319 } 320 a4list: (#list){ 321 0: (int){ 4 } 322 } 323 let A4#4 = ~(a4list) 324 a4: (#list){ 325 0: (struct){ 326 v: (int){ 404 } 327 } 328 } 329 a5list: (#list){ 330 0: (int){ 5 } 331 } 332 let A5#5 = ~(a5list) 333 a5: (struct){ 334 b: (#list){ 335 0: (struct){ 336 v: (int){ 505 } 337 } 338 } 339 } 340 a6list: (#list){ 341 0: (int){ 6 } 342 } 343 let A6#6 = ~(a6list) 344 a6: (struct){ 345 b: (struct){ 346 c: (#list){ 347 0: (struct){ 348 v: (int){ 606 } 349 } 350 } 351 } 352 } 353 a7list: (#list){ 354 0: (int){ 7 } 355 } 356 let A7#7 = ~(a7list) 357 a7: (struct){ 358 v: (int){ 707 } 359 } 360 a8list: (#list){ 361 0: (int){ 8 } 362 } 363 let A8#8 = ~(a8list) 364 a8: (struct){ 365 b: (struct){ 366 v: (int){ 808 } 367 } 368 } 369 a9list: (#list){ 370 0: (int){ 9 } 371 } 372 let A9#9 = ~(a9list) 373 a9: (struct){ 374 b: (struct){ 375 c: (struct){ 376 v: (int){ 909 } 377 } 378 } 379 } 380 incompleteLet: (struct){ 381 input: (#list){ 382 0: (int){ 1 } 383 1: (int){ 2 } 384 2: (int){ 3 } 385 3: (int){ 4 } 386 4: (int){ 5 } 387 } 388 last: (struct){ 389 min: (int){ 1 } 390 max: (int){ 5 } 391 } 392 bar: (struct){ 393 let mn#A = (int){ 1 } 394 let mx#B = (_|_){ 395 // [incomplete] incompleteLet.bar.mx: undefined field: max: 396 // ./in.cue:54:17 397 } 398 min: (int){ 1 } 399 max: (_|_){ 400 // [incomplete] incompleteLet.bar.max: undefined field: max: 401 // ./in.cue:54:17 402 } 403 } 404 x: (_|_){ 405 // [incomplete] incompleteLet.x: undefined field: max: 406 // ./in.cue:61:11 407 } 408 } 409 scalarReference: (struct){ 410 inScalar: (struct){ 411 p0: (int){ 412 5 413 let x#C = (int){ 6 } 414 #b: (int){ 6 } 415 } 416 p1: (int){ 417 5 418 #b: (int){ 6 } 419 let x#D = (int){ 6 } 420 } 421 } 422 inList: (struct){ 423 p0: (#list){ 424 let x#E = (struct){ 425 a: (int){ 1 } 426 } 427 0: (struct){ 428 a: (int){ 1 } 429 } 430 } 431 p1: (#list){ 432 let x#F = (struct){ 433 a: (int){ 1 } 434 } 435 0: (struct){ 436 a: (int){ 1 } 437 } 438 } 439 } 440 } 441 issue1116: (struct){ 442 a: (string){ 443 "b" 444 #a: (#list){ 445 0: (string){ "a" } 446 1: (string){ "b" } 447 } 448 let List#10 = ~(issue1116.a.#a) 449 } 450 b: (string){ 451 "b" 452 let List#11 = ~(issue1116.b.#a) 453 #a: (#list){ 454 0: (string){ "a" } 455 1: (string){ "b" } 456 } 457 } 458 } 459 } 460 -- diff/-out/evalalpha<==>+out/eval -- 461 diff old new 462 --- old 463 +++ new 464 @@ -2,16 +2,12 @@ 465 a1list: (#list){ 466 0: (int){ 1 } 467 } 468 - let A1#1 = (#list){ 469 - 0: (int){ 1 } 470 - } 471 + let A1#1 = ~(a1list) 472 a1: (int){ 101 } 473 a2list: (#list){ 474 0: (int){ 2 } 475 } 476 - let A2#2 = (#list){ 477 - 0: (int){ 2 } 478 - } 479 + let A2#2 = ~(a2list) 480 a2: (struct){ 481 b: (int){ 202 } 482 } 483 @@ -18,9 +14,7 @@ 484 a3list: (#list){ 485 0: (int){ 3 } 486 } 487 - let A3#3 = (#list){ 488 - 0: (int){ 3 } 489 - } 490 + let A3#3 = ~(a3list) 491 a3: (struct){ 492 b: (struct){ 493 c: (int){ 303 } 494 @@ -29,9 +23,7 @@ 495 a4list: (#list){ 496 0: (int){ 4 } 497 } 498 - let A4#4 = (#list){ 499 - 0: (int){ 4 } 500 - } 501 + let A4#4 = ~(a4list) 502 a4: (#list){ 503 0: (struct){ 504 v: (int){ 404 } 505 @@ -40,9 +32,7 @@ 506 a5list: (#list){ 507 0: (int){ 5 } 508 } 509 - let A5#5 = (#list){ 510 - 0: (int){ 5 } 511 - } 512 + let A5#5 = ~(a5list) 513 a5: (struct){ 514 b: (#list){ 515 0: (struct){ 516 @@ -53,9 +43,7 @@ 517 a6list: (#list){ 518 0: (int){ 6 } 519 } 520 - let A6#6 = (#list){ 521 - 0: (int){ 6 } 522 - } 523 + let A6#6 = ~(a6list) 524 a6: (struct){ 525 b: (struct){ 526 c: (#list){ 527 @@ -68,9 +56,7 @@ 528 a7list: (#list){ 529 0: (int){ 7 } 530 } 531 - let A7#7 = (#list){ 532 - 0: (int){ 7 } 533 - } 534 + let A7#7 = ~(a7list) 535 a7: (struct){ 536 v: (int){ 707 } 537 } 538 @@ -77,9 +63,7 @@ 539 a8list: (#list){ 540 0: (int){ 8 } 541 } 542 - let A8#8 = (#list){ 543 - 0: (int){ 8 } 544 - } 545 + let A8#8 = ~(a8list) 546 a8: (struct){ 547 b: (struct){ 548 v: (int){ 808 } 549 @@ -88,9 +72,7 @@ 550 a9list: (#list){ 551 0: (int){ 9 } 552 } 553 - let A9#9 = (#list){ 554 - 0: (int){ 9 } 555 - } 556 + let A9#9 = ~(a9list) 557 a9: (struct){ 558 b: (struct){ 559 c: (struct){ 560 @@ -166,17 +148,11 @@ 561 0: (string){ "a" } 562 1: (string){ "b" } 563 } 564 - let List#10 = (#list){ 565 - 0: (string){ "a" } 566 - 1: (string){ "b" } 567 - } 568 + let List#10 = ~(issue1116.a.#a) 569 } 570 b: (string){ 571 "b" 572 - let List#11 = (_|_){ 573 - // [incomplete] issue1116.b.List: cycle error referencing #a: 574 - // ./in.cue:96:14 575 - } 576 + let List#11 = ~(issue1116.b.#a) 577 #a: (#list){ 578 0: (string){ "a" } 579 1: (string){ "b" } 580 -- out/eval -- 581 (struct){ 582 a1list: (#list){ 583 0: (int){ 1 } 584 } 585 let A1#1 = (#list){ 586 0: (int){ 1 } 587 } 588 a1: (int){ 101 } 589 a2list: (#list){ 590 0: (int){ 2 } 591 } 592 let A2#2 = (#list){ 593 0: (int){ 2 } 594 } 595 a2: (struct){ 596 b: (int){ 202 } 597 } 598 a3list: (#list){ 599 0: (int){ 3 } 600 } 601 let A3#3 = (#list){ 602 0: (int){ 3 } 603 } 604 a3: (struct){ 605 b: (struct){ 606 c: (int){ 303 } 607 } 608 } 609 a4list: (#list){ 610 0: (int){ 4 } 611 } 612 let A4#4 = (#list){ 613 0: (int){ 4 } 614 } 615 a4: (#list){ 616 0: (struct){ 617 v: (int){ 404 } 618 } 619 } 620 a5list: (#list){ 621 0: (int){ 5 } 622 } 623 let A5#5 = (#list){ 624 0: (int){ 5 } 625 } 626 a5: (struct){ 627 b: (#list){ 628 0: (struct){ 629 v: (int){ 505 } 630 } 631 } 632 } 633 a6list: (#list){ 634 0: (int){ 6 } 635 } 636 let A6#6 = (#list){ 637 0: (int){ 6 } 638 } 639 a6: (struct){ 640 b: (struct){ 641 c: (#list){ 642 0: (struct){ 643 v: (int){ 606 } 644 } 645 } 646 } 647 } 648 a7list: (#list){ 649 0: (int){ 7 } 650 } 651 let A7#7 = (#list){ 652 0: (int){ 7 } 653 } 654 a7: (struct){ 655 v: (int){ 707 } 656 } 657 a8list: (#list){ 658 0: (int){ 8 } 659 } 660 let A8#8 = (#list){ 661 0: (int){ 8 } 662 } 663 a8: (struct){ 664 b: (struct){ 665 v: (int){ 808 } 666 } 667 } 668 a9list: (#list){ 669 0: (int){ 9 } 670 } 671 let A9#9 = (#list){ 672 0: (int){ 9 } 673 } 674 a9: (struct){ 675 b: (struct){ 676 c: (struct){ 677 v: (int){ 909 } 678 } 679 } 680 } 681 incompleteLet: (struct){ 682 input: (#list){ 683 0: (int){ 1 } 684 1: (int){ 2 } 685 2: (int){ 3 } 686 3: (int){ 4 } 687 4: (int){ 5 } 688 } 689 last: (struct){ 690 min: (int){ 1 } 691 max: (int){ 5 } 692 } 693 bar: (struct){ 694 let mn#A = (int){ 1 } 695 let mx#B = (_|_){ 696 // [incomplete] incompleteLet.bar.mx: undefined field: max: 697 // ./in.cue:54:17 698 } 699 min: (int){ 1 } 700 max: (_|_){ 701 // [incomplete] incompleteLet.bar.max: undefined field: max: 702 // ./in.cue:54:17 703 } 704 } 705 x: (_|_){ 706 // [incomplete] incompleteLet.x: undefined field: max: 707 // ./in.cue:61:11 708 } 709 } 710 scalarReference: (struct){ 711 inScalar: (struct){ 712 p0: (int){ 713 5 714 let x#C = (int){ 6 } 715 #b: (int){ 6 } 716 } 717 p1: (int){ 718 5 719 #b: (int){ 6 } 720 let x#D = (int){ 6 } 721 } 722 } 723 inList: (struct){ 724 p0: (#list){ 725 let x#E = (struct){ 726 a: (int){ 1 } 727 } 728 0: (struct){ 729 a: (int){ 1 } 730 } 731 } 732 p1: (#list){ 733 let x#F = (struct){ 734 a: (int){ 1 } 735 } 736 0: (struct){ 737 a: (int){ 1 } 738 } 739 } 740 } 741 } 742 issue1116: (struct){ 743 a: (string){ 744 "b" 745 #a: (#list){ 746 0: (string){ "a" } 747 1: (string){ "b" } 748 } 749 let List#10 = (#list){ 750 0: (string){ "a" } 751 1: (string){ "b" } 752 } 753 } 754 b: (string){ 755 "b" 756 let List#11 = (_|_){ 757 // [incomplete] issue1116.b.List: cycle error referencing #a: 758 // ./in.cue:96:14 759 } 760 #a: (#list){ 761 0: (string){ "a" } 762 1: (string){ "b" } 763 } 764 } 765 } 766 }