cuelang.org/go@v0.13.0/cue/testdata/eval/bulk.txtar (about) 1 -- in.cue -- 2 a: { 3 foo: a: 1 4 [X = =~"foo"]: { 5 b: 1 6 name: X 7 } 8 } 9 d: a & { 10 "foobar": { 11 c: 2 12 } 13 } 14 15 t1: { 16 #a: { 17 [>"e" & <"z"]: int 18 } 19 b: #a & {f: 4} 20 c: #a & {z: 4} 21 } 22 23 t2: { 24 #a: { 25 ["x" | "y"]: int 26 } 27 b: #a & {x: 4} 28 c: #a & {z: 4} 29 } 30 31 -- issue2109.cue -- 32 // Detect cycle: 33 // The pattern constraint of FlagsURLS is applied to countries (because 34 // FlagsURLs is embedded. But the pattern constraint itself refers to 35 // countries. So countries -> or(countries) -> countries. 36 // 37 // Theoretically, or(countries) can be resolved without a cycle. And then we 38 // could see it does not apply to countries. For now we stick with this 39 // approach understanding that it is easier to relax later. 40 patternCycle: issue2109: p1: { 41 countries: ["US", "GB", "AU"] 42 FlagsURLs: {[or(countries)]: string} 43 FlagsURLs 44 } 45 patternCycle: issue2109: p2: { 46 FlagsURLs: {[or(countries)]: string} 47 FlagsURLs 48 countries: ["US", "GB", "AU"] 49 } 50 patternCycle: issue2109: p3: { 51 FlagsURLs 52 FlagsURLs: {[or(countries)]: string} 53 countries: ["US", "GB", "AU"] 54 } 55 56 patternCycle: t1: p1: { 57 countries: "US" | "GB" | "AU" 58 FlagsURLs: {[countries]: string} 59 FlagsURLs 60 } 61 patternCycle: t1: p2: { 62 FlagsURLs 63 countries: "US" | "GB" | "AU" 64 FlagsURLs: {[countries]: string} 65 } 66 patternCycle: t1: p3: { 67 FlagsURLs 68 FlagsURLs: {[countries]: string} 69 countries: "US" | "GB" | "AU" 70 } 71 72 -- intpattern.cue -- 73 issue3670: { 74 #X: [int]: string 75 a: #X 76 a: "not_int": "c" 77 } 78 dual: { 79 _ 80 // As long as it is undecided whether this is a struct or list, this should 81 // not be a conflict. Note that the spec does not allow int patterns, but 82 // both v2 and v3 allow it, and we soon will, so it seems gratuitous to 83 // break it now. 84 [string]: _ 85 [int]: _ 86 } 87 -- multi.cue -- 88 // Ensure that if the same pattern is added multiple times in different 89 // contexts, it is added to all contexts to preserve closedness information. 90 issue3638: full: { 91 routes: default: {} 92 routes: [string]: spec: [{ 93 refs: [{"default"}] 94 }] 95 #Fields: { 96 input: _ 97 output: [for x in input { x }] 98 ... 99 } 100 #Kubernetes: { 101 #Fields & { 102 Routes: route: [_]: spec!: HTTPROUTESPEC.#x 103 } 104 #Fields // Commenting out this line also fixes evalv3. 105 Routes: _ 106 input: res1: Routes 107 } 108 let HTTPROUTESPEC = { 109 #x: [...{ 110 refs: [...{string}] 111 }] | *[{ 112 other: [] 113 }] 114 } 115 116 // Order dependent! Breaks if the lines below are moved to the top of the file. 117 entrypoint: used.output 118 used: #Kubernetes & { 119 Routes: route: routes 120 } 121 } 122 issue3638: reduced: { 123 input: k1: [string]: a: 1 124 input: k1: foo: #x 125 out: { 126 for x in input { x } 127 for x in input { x } 128 } 129 #x: { a: int } | *{ b: 2 } 130 } 131 // We expect that changing the pattern constraint into a field should give 132 // not materially change the outcome. 133 issue3638: compare: { 134 input: k1: foo: a: 1 135 input: k1: foo: #x 136 out: { 137 for x in input { x } 138 for x in input { x } 139 } 140 #x: { a: int } | *{ b: 2 } 141 } 142 -- out/evalalpha/stats -- 143 Leaks: 302 144 Freed: 0 145 Reused: 0 146 Allocs: 302 147 Retain: 0 148 149 Unifications: 229 150 Conjuncts: 453 151 Disjuncts: 53 152 153 CloseIDElems: 121 154 NumCloseIDs: 125 155 -- diff/-out/evalalpha/stats<==>+out/eval/stats -- 156 diff old new 157 --- old 158 +++ new 159 @@ -1,9 +1,12 @@ 160 -Leaks: 4 161 -Freed: 269 162 -Reused: 250 163 -Allocs: 23 164 -Retain: 30 165 - 166 -Unifications: 214 167 -Conjuncts: 639 168 -Disjuncts: 297 169 +Leaks: 302 170 +Freed: 0 171 +Reused: 0 172 +Allocs: 302 173 +Retain: 0 174 + 175 +Unifications: 229 176 +Conjuncts: 453 177 +Disjuncts: 53 178 + 179 +CloseIDElems: 121 180 +NumCloseIDs: 125 181 -- out/eval/stats -- 182 Leaks: 4 183 Freed: 269 184 Reused: 250 185 Allocs: 23 186 Retain: 30 187 188 Unifications: 214 189 Conjuncts: 639 190 Disjuncts: 297 191 -- out/evalalpha -- 192 Errors: 193 issue3670.a.not_int: field not allowed: 194 ./intpattern.cue:4:5 195 t1.c.z: field not allowed: 196 ./in.cue:19:11 197 t2.c.z: field not allowed: 198 ./in.cue:27:11 199 200 Result: 201 (_|_){ 202 // [eval] 203 a: (struct){ 204 foo: (struct){ 205 a: (int){ 1 } 206 b: (int){ 1 } 207 name: (string){ "foo" } 208 } 209 } 210 d: (struct){ 211 foobar: (struct){ 212 c: (int){ 2 } 213 b: (int){ 1 } 214 name: (string){ "foobar" } 215 } 216 foo: (struct){ 217 a: (int){ 1 } 218 b: (int){ 1 } 219 name: (string){ "foo" } 220 } 221 } 222 t1: (_|_){ 223 // [eval] 224 #a: (#struct){ 225 } 226 b: (#struct){ 227 f: (int){ 4 } 228 } 229 c: (_|_){ 230 // [eval] 231 z: (_|_){ 232 // [eval] t1.c.z: field not allowed: 233 // ./in.cue:19:11 234 } 235 } 236 } 237 t2: (_|_){ 238 // [eval] 239 #a: (#struct){ 240 } 241 b: (#struct){ 242 x: (int){ 4 } 243 } 244 c: (_|_){ 245 // [eval] 246 z: (_|_){ 247 // [eval] t2.c.z: field not allowed: 248 // ./in.cue:27:11 249 } 250 } 251 } 252 issue3670: (_|_){ 253 // [eval] 254 #X: (#struct){ 255 } 256 a: (_|_){ 257 // [eval] 258 not_int: (_|_){ 259 // [eval] issue3670.a.not_int: field not allowed: 260 // ./intpattern.cue:4:5 261 } 262 } 263 } 264 dual: (_){ _ } 265 patternCycle: (struct){ 266 issue2109: (struct){ 267 p1: (struct){ 268 countries: (#list){ 269 0: (string){ "US" } 270 1: (string){ "GB" } 271 2: (string){ "AU" } 272 } 273 FlagsURLs: (struct){ 274 } 275 } 276 p2: (struct){ 277 FlagsURLs: (struct){ 278 } 279 countries: (#list){ 280 0: (string){ "US" } 281 1: (string){ "GB" } 282 2: (string){ "AU" } 283 } 284 } 285 p3: (struct){ 286 FlagsURLs: (struct){ 287 } 288 countries: (#list){ 289 0: (string){ "US" } 290 1: (string){ "GB" } 291 2: (string){ "AU" } 292 } 293 } 294 } 295 t1: (struct){ 296 p1: (struct){ 297 countries: (string){ |((string){ "US" }, (string){ "GB" }, (string){ "AU" }) } 298 FlagsURLs: (struct){ 299 } 300 } 301 p2: (struct){ 302 countries: (string){ |((string){ "US" }, (string){ "GB" }, (string){ "AU" }) } 303 FlagsURLs: (struct){ 304 } 305 } 306 p3: (struct){ 307 FlagsURLs: (struct){ 308 } 309 countries: (string){ |((string){ "US" }, (string){ "GB" }, (string){ "AU" }) } 310 } 311 } 312 } 313 issue3638: (struct){ 314 full: (struct){ 315 routes: (struct){ 316 default: (struct){ 317 spec: (#list){ 318 0: (struct){ 319 refs: (#list){ 320 0: (string){ "default" } 321 } 322 } 323 } 324 } 325 } 326 #Fields: (#struct){ 327 input: (_){ _ } 328 output: (_|_){ 329 // [incomplete] issue3638.full.#Fields.output: cannot range over input (incomplete type _): 330 // ./multi.cue:10:21 331 } 332 } 333 #Kubernetes: (#struct){ 334 Routes: (#struct){ 335 route: (#struct){ 336 } 337 } 338 input: (#struct){ 339 res1: ~(issue3638.full.#Kubernetes.Routes) 340 } 341 output: (#list){ 342 0: (#struct){ 343 route: (#struct){ 344 } 345 } 346 } 347 } 348 let HTTPROUTESPEC#1 = (struct){ 349 #x: (#list){ |(*(#list){ 350 0: (#struct){ 351 other: (#list){ 352 } 353 } 354 }, (list){ 355 }) } 356 } 357 entrypoint: ~(issue3638.full.used.output) 358 used: (#struct){ 359 Routes: (#struct){ 360 route: (#struct){ 361 default: (#struct){ 362 spec: (#list){ 363 0: (#struct){ 364 refs: (#list){ 365 0: (string){ "default" } 366 } 367 } 368 } 369 } 370 } 371 } 372 input: (#struct){ 373 res1: (#struct){ 374 route: (#struct){ 375 default: (#struct){ 376 spec: (#list){ 377 0: (#struct){ 378 refs: (#list){ 379 0: (string){ "default" } 380 } 381 } 382 } 383 } 384 } 385 } 386 } 387 output: (#list){ 388 0: (#struct){ 389 route: (#struct){ 390 default: (#struct){ 391 spec: (#list){ 392 0: (#struct){ 393 refs: (#list){ 394 0: (string){ "default" } 395 } 396 } 397 } 398 } 399 } 400 } 401 } 402 } 403 } 404 reduced: (struct){ 405 input: (struct){ 406 k1: (struct){ 407 foo: (#struct){ 408 a: (int){ 1 } 409 } 410 } 411 } 412 out: (struct){ 413 foo: (#struct){ 414 a: (int){ 1 } 415 } 416 } 417 #x: (#struct){ |(*(#struct){ 418 b: (int){ 2 } 419 }, (#struct){ 420 a: (int){ int } 421 }) } 422 } 423 compare: (struct){ 424 input: (struct){ 425 k1: (struct){ 426 foo: (#struct){ 427 a: (int){ 1 } 428 } 429 } 430 } 431 out: (struct){ 432 foo: (#struct){ 433 a: (int){ 1 } 434 } 435 } 436 #x: (#struct){ |(*(#struct){ 437 b: (int){ 2 } 438 }, (#struct){ 439 a: (int){ int } 440 }) } 441 } 442 } 443 } 444 -- diff/-out/evalalpha<==>+out/eval -- 445 diff old new 446 --- old 447 +++ new 448 @@ -1,34 +1,10 @@ 449 Errors: 450 issue3670.a.not_int: field not allowed: 451 - ./intpattern.cue:2:6 452 - ./intpattern.cue:3:5 453 ./intpattern.cue:4:5 454 t1.c.z: field not allowed: 455 - ./in.cue:15:6 456 - ./in.cue:19:5 457 ./in.cue:19:11 458 t2.c.z: field not allowed: 459 - ./in.cue:23:6 460 - ./in.cue:27:5 461 ./in.cue:27:11 462 -patternCycle.issue2109.p1.countries: cyclic pattern constraint: 463 - ./issue2109.cue:11:15 464 - ./issue2109.cue:10:13 465 -patternCycle.issue2109.p2.countries: cyclic pattern constraint: 466 - ./issue2109.cue:15:15 467 - ./issue2109.cue:17:13 468 -patternCycle.issue2109.p3.countries: cyclic pattern constraint: 469 - ./issue2109.cue:21:15 470 - ./issue2109.cue:22:13 471 -patternCycle.t1.p1.countries: cyclic pattern constraint: 472 - ./issue2109.cue:27:15 473 - ./issue2109.cue:26:13 474 -patternCycle.t1.p2.countries: cyclic pattern constraint: 475 - ./issue2109.cue:33:15 476 - ./issue2109.cue:32:13 477 -patternCycle.t1.p3.countries: cyclic pattern constraint: 478 - ./issue2109.cue:37:15 479 - ./issue2109.cue:38:13 480 481 Result: 482 (_|_){ 483 @@ -41,16 +17,16 @@ 484 } 485 } 486 d: (struct){ 487 - foo: (struct){ 488 - a: (int){ 1 } 489 - b: (int){ 1 } 490 - name: (string){ "foo" } 491 - } 492 foobar: (struct){ 493 c: (int){ 2 } 494 b: (int){ 1 } 495 name: (string){ "foobar" } 496 } 497 + foo: (struct){ 498 + a: (int){ 1 } 499 + b: (int){ 1 } 500 + name: (string){ "foo" } 501 + } 502 } 503 t1: (_|_){ 504 // [eval] 505 @@ -63,8 +39,6 @@ 506 // [eval] 507 z: (_|_){ 508 // [eval] t1.c.z: field not allowed: 509 - // ./in.cue:15:6 510 - // ./in.cue:19:5 511 // ./in.cue:19:11 512 } 513 } 514 @@ -80,8 +54,6 @@ 515 // [eval] 516 z: (_|_){ 517 // [eval] t2.c.z: field not allowed: 518 - // ./in.cue:23:6 519 - // ./in.cue:27:5 520 // ./in.cue:27:11 521 } 522 } 523 @@ -94,94 +66,56 @@ 524 // [eval] 525 not_int: (_|_){ 526 // [eval] issue3670.a.not_int: field not allowed: 527 - // ./intpattern.cue:2:6 528 - // ./intpattern.cue:3:5 529 // ./intpattern.cue:4:5 530 } 531 } 532 } 533 dual: (_){ _ } 534 - patternCycle: (_|_){ 535 - // [eval] 536 - issue2109: (_|_){ 537 - // [eval] 538 - p1: (_|_){ 539 - // [eval] 540 - countries: (_|_){ 541 - // [eval] patternCycle.issue2109.p1.countries: cyclic pattern constraint: 542 - // ./issue2109.cue:11:15 543 - // ./issue2109.cue:10:13 544 - 0: (string){ "US" } 545 - 1: (string){ "GB" } 546 - 2: (string){ "AU" } 547 - } 548 - FlagsURLs: (struct){ 549 - } 550 - } 551 - p2: (_|_){ 552 - // [eval] 553 - FlagsURLs: (struct){ 554 - } 555 - countries: (_|_){ 556 - // [eval] patternCycle.issue2109.p2.countries: cyclic pattern constraint: 557 - // ./issue2109.cue:15:15 558 - // ./issue2109.cue:17:13 559 - 0: (_|_){// "US" 560 - } 561 - 1: (_|_){// "GB" 562 - } 563 - 2: (_|_){// "AU" 564 - } 565 - } 566 - } 567 - p3: (_|_){ 568 - // [eval] 569 - FlagsURLs: (struct){ 570 - } 571 - countries: (_|_){ 572 - // [eval] patternCycle.issue2109.p3.countries: cyclic pattern constraint: 573 - // ./issue2109.cue:21:15 574 - // ./issue2109.cue:22:13 575 - 0: (_|_){// "US" 576 - } 577 - 1: (_|_){// "GB" 578 - } 579 - 2: (_|_){// "AU" 580 - } 581 - } 582 - } 583 - } 584 - t1: (_|_){ 585 - // [eval] 586 - p1: (_|_){ 587 - // [eval] 588 - countries: (_|_){ 589 - // [eval] patternCycle.t1.p1.countries: cyclic pattern constraint: 590 - // ./issue2109.cue:27:15 591 - // ./issue2109.cue:26:13 592 - } 593 - FlagsURLs: (struct){ 594 - } 595 - } 596 - p2: (_|_){ 597 - // [eval] 598 - countries: (_|_){ 599 - // [eval] patternCycle.t1.p2.countries: cyclic pattern constraint: 600 - // ./issue2109.cue:33:15 601 - // ./issue2109.cue:32:13 602 - } 603 - FlagsURLs: (struct){ 604 - } 605 - } 606 - p3: (_|_){ 607 - // [eval] 608 - FlagsURLs: (struct){ 609 - } 610 - countries: (_|_){ 611 - // [eval] patternCycle.t1.p3.countries: cyclic pattern constraint: 612 - // ./issue2109.cue:37:15 613 - // ./issue2109.cue:38:13 614 - } 615 + patternCycle: (struct){ 616 + issue2109: (struct){ 617 + p1: (struct){ 618 + countries: (#list){ 619 + 0: (string){ "US" } 620 + 1: (string){ "GB" } 621 + 2: (string){ "AU" } 622 + } 623 + FlagsURLs: (struct){ 624 + } 625 + } 626 + p2: (struct){ 627 + FlagsURLs: (struct){ 628 + } 629 + countries: (#list){ 630 + 0: (string){ "US" } 631 + 1: (string){ "GB" } 632 + 2: (string){ "AU" } 633 + } 634 + } 635 + p3: (struct){ 636 + FlagsURLs: (struct){ 637 + } 638 + countries: (#list){ 639 + 0: (string){ "US" } 640 + 1: (string){ "GB" } 641 + 2: (string){ "AU" } 642 + } 643 + } 644 + } 645 + t1: (struct){ 646 + p1: (struct){ 647 + countries: (string){ |((string){ "US" }, (string){ "GB" }, (string){ "AU" }) } 648 + FlagsURLs: (struct){ 649 + } 650 + } 651 + p2: (struct){ 652 + countries: (string){ |((string){ "US" }, (string){ "GB" }, (string){ "AU" }) } 653 + FlagsURLs: (struct){ 654 + } 655 + } 656 + p3: (struct){ 657 + FlagsURLs: (struct){ 658 + } 659 + countries: (string){ |((string){ "US" }, (string){ "GB" }, (string){ "AU" }) } 660 } 661 } 662 } 663 @@ -206,20 +140,17 @@ 664 } 665 } 666 #Kubernetes: (#struct){ 667 - input: (#struct){ 668 - res1: (#struct){ 669 - route: (#struct){ 670 - } 671 - } 672 - } 673 - output: (#list){ 674 - 0: (#struct){ 675 - route: (#struct){ 676 - } 677 - } 678 - } 679 - Routes: (#struct){ 680 - route: (#struct){ 681 + Routes: (#struct){ 682 + route: (#struct){ 683 + } 684 + } 685 + input: (#struct){ 686 + res1: ~(issue3638.full.#Kubernetes.Routes) 687 + } 688 + output: (#list){ 689 + 0: (#struct){ 690 + route: (#struct){ 691 + } 692 } 693 } 694 } 695 @@ -232,60 +163,8 @@ 696 }, (list){ 697 }) } 698 } 699 - entrypoint: (#list){ 700 - 0: (struct){ 701 - route: (struct){ 702 - default: (struct){ 703 - spec: (#list){ 704 - 0: (#struct){ 705 - refs: (#list){ 706 - 0: (string){ "default" } 707 - } 708 - } 709 - } 710 - } 711 - } 712 - } 713 - } 714 + entrypoint: ~(issue3638.full.used.output) 715 used: (#struct){ 716 - input: (#struct){ 717 - res1: (#struct){ 718 - route: (#struct){ 719 - default: (#struct){ 720 - spec: (#list){ 721 - 0: (#struct){ 722 - refs: (#list){ 723 - 0: (string){ "default" } 724 - } 725 - } 726 - } 727 - } 728 - } 729 - } 730 - } 731 - output: (#list){ 732 - 0: (#struct){ 733 - route: (#struct){ 734 - default: (#struct){ 735 - spec: (list){ |(*(#list){ 736 - 0: (#struct){ 737 - refs: (#list){ 738 - 0: (string){ "default" } 739 - } 740 - other: (#list){ 741 - } 742 - } 743 - }, (#list){ 744 - 0: (#struct){ 745 - refs: (#list){ 746 - 0: (string){ "default" } 747 - } 748 - } 749 - }) } 750 - } 751 - } 752 - } 753 - } 754 Routes: (#struct){ 755 route: (#struct){ 756 default: (#struct){ 757 @@ -299,6 +178,36 @@ 758 } 759 } 760 } 761 + input: (#struct){ 762 + res1: (#struct){ 763 + route: (#struct){ 764 + default: (#struct){ 765 + spec: (#list){ 766 + 0: (#struct){ 767 + refs: (#list){ 768 + 0: (string){ "default" } 769 + } 770 + } 771 + } 772 + } 773 + } 774 + } 775 + } 776 + output: (#list){ 777 + 0: (#struct){ 778 + route: (#struct){ 779 + default: (#struct){ 780 + spec: (#list){ 781 + 0: (#struct){ 782 + refs: (#list){ 783 + 0: (string){ "default" } 784 + } 785 + } 786 + } 787 + } 788 + } 789 + } 790 + } 791 } 792 } 793 reduced: (struct){ 794 @@ -310,12 +219,9 @@ 795 } 796 } 797 out: (struct){ 798 - foo: (#struct){ |(*(#struct){ 799 - a: (int){ 1 } 800 - b: (int){ 2 } 801 - }, (#struct){ 802 - a: (int){ 1 } 803 - }) } 804 + foo: (#struct){ 805 + a: (int){ 1 } 806 + } 807 } 808 #x: (#struct){ |(*(#struct){ 809 b: (int){ 2 } 810 @@ -332,12 +238,9 @@ 811 } 812 } 813 out: (struct){ 814 - foo: (#struct){ |(*(#struct){ 815 - a: (int){ 1 } 816 - b: (int){ 2 } 817 - }, (#struct){ 818 - a: (int){ 1 } 819 - }) } 820 + foo: (#struct){ 821 + a: (int){ 1 } 822 + } 823 } 824 #x: (#struct){ |(*(#struct){ 825 b: (int){ 2 } 826 -- diff/todo/p3 -- 827 Reordering of error messages. 828 -- diff/explanation -- 829 Overall, the previous errors now passing is acceptable and consistent with 830 the behavior of the new evaluator. 831 issue3638: in V2, there was a spurious default marker to disambiguate 832 a disjunction that should have already been disambiguated. 833 In V3, the disjunction is properly disambiguated. 834 -- out/eval -- 835 Errors: 836 issue3670.a.not_int: field not allowed: 837 ./intpattern.cue:2:6 838 ./intpattern.cue:3:5 839 ./intpattern.cue:4:5 840 t1.c.z: field not allowed: 841 ./in.cue:15:6 842 ./in.cue:19:5 843 ./in.cue:19:11 844 t2.c.z: field not allowed: 845 ./in.cue:23:6 846 ./in.cue:27:5 847 ./in.cue:27:11 848 patternCycle.issue2109.p1.countries: cyclic pattern constraint: 849 ./issue2109.cue:11:15 850 ./issue2109.cue:10:13 851 patternCycle.issue2109.p2.countries: cyclic pattern constraint: 852 ./issue2109.cue:15:15 853 ./issue2109.cue:17:13 854 patternCycle.issue2109.p3.countries: cyclic pattern constraint: 855 ./issue2109.cue:21:15 856 ./issue2109.cue:22:13 857 patternCycle.t1.p1.countries: cyclic pattern constraint: 858 ./issue2109.cue:27:15 859 ./issue2109.cue:26:13 860 patternCycle.t1.p2.countries: cyclic pattern constraint: 861 ./issue2109.cue:33:15 862 ./issue2109.cue:32:13 863 patternCycle.t1.p3.countries: cyclic pattern constraint: 864 ./issue2109.cue:37:15 865 ./issue2109.cue:38:13 866 867 Result: 868 (_|_){ 869 // [eval] 870 a: (struct){ 871 foo: (struct){ 872 a: (int){ 1 } 873 b: (int){ 1 } 874 name: (string){ "foo" } 875 } 876 } 877 d: (struct){ 878 foo: (struct){ 879 a: (int){ 1 } 880 b: (int){ 1 } 881 name: (string){ "foo" } 882 } 883 foobar: (struct){ 884 c: (int){ 2 } 885 b: (int){ 1 } 886 name: (string){ "foobar" } 887 } 888 } 889 t1: (_|_){ 890 // [eval] 891 #a: (#struct){ 892 } 893 b: (#struct){ 894 f: (int){ 4 } 895 } 896 c: (_|_){ 897 // [eval] 898 z: (_|_){ 899 // [eval] t1.c.z: field not allowed: 900 // ./in.cue:15:6 901 // ./in.cue:19:5 902 // ./in.cue:19:11 903 } 904 } 905 } 906 t2: (_|_){ 907 // [eval] 908 #a: (#struct){ 909 } 910 b: (#struct){ 911 x: (int){ 4 } 912 } 913 c: (_|_){ 914 // [eval] 915 z: (_|_){ 916 // [eval] t2.c.z: field not allowed: 917 // ./in.cue:23:6 918 // ./in.cue:27:5 919 // ./in.cue:27:11 920 } 921 } 922 } 923 issue3670: (_|_){ 924 // [eval] 925 #X: (#struct){ 926 } 927 a: (_|_){ 928 // [eval] 929 not_int: (_|_){ 930 // [eval] issue3670.a.not_int: field not allowed: 931 // ./intpattern.cue:2:6 932 // ./intpattern.cue:3:5 933 // ./intpattern.cue:4:5 934 } 935 } 936 } 937 dual: (_){ _ } 938 patternCycle: (_|_){ 939 // [eval] 940 issue2109: (_|_){ 941 // [eval] 942 p1: (_|_){ 943 // [eval] 944 countries: (_|_){ 945 // [eval] patternCycle.issue2109.p1.countries: cyclic pattern constraint: 946 // ./issue2109.cue:11:15 947 // ./issue2109.cue:10:13 948 0: (string){ "US" } 949 1: (string){ "GB" } 950 2: (string){ "AU" } 951 } 952 FlagsURLs: (struct){ 953 } 954 } 955 p2: (_|_){ 956 // [eval] 957 FlagsURLs: (struct){ 958 } 959 countries: (_|_){ 960 // [eval] patternCycle.issue2109.p2.countries: cyclic pattern constraint: 961 // ./issue2109.cue:15:15 962 // ./issue2109.cue:17:13 963 0: (_|_){// "US" 964 } 965 1: (_|_){// "GB" 966 } 967 2: (_|_){// "AU" 968 } 969 } 970 } 971 p3: (_|_){ 972 // [eval] 973 FlagsURLs: (struct){ 974 } 975 countries: (_|_){ 976 // [eval] patternCycle.issue2109.p3.countries: cyclic pattern constraint: 977 // ./issue2109.cue:21:15 978 // ./issue2109.cue:22:13 979 0: (_|_){// "US" 980 } 981 1: (_|_){// "GB" 982 } 983 2: (_|_){// "AU" 984 } 985 } 986 } 987 } 988 t1: (_|_){ 989 // [eval] 990 p1: (_|_){ 991 // [eval] 992 countries: (_|_){ 993 // [eval] patternCycle.t1.p1.countries: cyclic pattern constraint: 994 // ./issue2109.cue:27:15 995 // ./issue2109.cue:26:13 996 } 997 FlagsURLs: (struct){ 998 } 999 } 1000 p2: (_|_){ 1001 // [eval] 1002 countries: (_|_){ 1003 // [eval] patternCycle.t1.p2.countries: cyclic pattern constraint: 1004 // ./issue2109.cue:33:15 1005 // ./issue2109.cue:32:13 1006 } 1007 FlagsURLs: (struct){ 1008 } 1009 } 1010 p3: (_|_){ 1011 // [eval] 1012 FlagsURLs: (struct){ 1013 } 1014 countries: (_|_){ 1015 // [eval] patternCycle.t1.p3.countries: cyclic pattern constraint: 1016 // ./issue2109.cue:37:15 1017 // ./issue2109.cue:38:13 1018 } 1019 } 1020 } 1021 } 1022 issue3638: (struct){ 1023 full: (struct){ 1024 routes: (struct){ 1025 default: (struct){ 1026 spec: (#list){ 1027 0: (struct){ 1028 refs: (#list){ 1029 0: (string){ "default" } 1030 } 1031 } 1032 } 1033 } 1034 } 1035 #Fields: (#struct){ 1036 input: (_){ _ } 1037 output: (_|_){ 1038 // [incomplete] issue3638.full.#Fields.output: cannot range over input (incomplete type _): 1039 // ./multi.cue:10:21 1040 } 1041 } 1042 #Kubernetes: (#struct){ 1043 input: (#struct){ 1044 res1: (#struct){ 1045 route: (#struct){ 1046 } 1047 } 1048 } 1049 output: (#list){ 1050 0: (#struct){ 1051 route: (#struct){ 1052 } 1053 } 1054 } 1055 Routes: (#struct){ 1056 route: (#struct){ 1057 } 1058 } 1059 } 1060 let HTTPROUTESPEC#1 = (struct){ 1061 #x: (#list){ |(*(#list){ 1062 0: (#struct){ 1063 other: (#list){ 1064 } 1065 } 1066 }, (list){ 1067 }) } 1068 } 1069 entrypoint: (#list){ 1070 0: (struct){ 1071 route: (struct){ 1072 default: (struct){ 1073 spec: (#list){ 1074 0: (#struct){ 1075 refs: (#list){ 1076 0: (string){ "default" } 1077 } 1078 } 1079 } 1080 } 1081 } 1082 } 1083 } 1084 used: (#struct){ 1085 input: (#struct){ 1086 res1: (#struct){ 1087 route: (#struct){ 1088 default: (#struct){ 1089 spec: (#list){ 1090 0: (#struct){ 1091 refs: (#list){ 1092 0: (string){ "default" } 1093 } 1094 } 1095 } 1096 } 1097 } 1098 } 1099 } 1100 output: (#list){ 1101 0: (#struct){ 1102 route: (#struct){ 1103 default: (#struct){ 1104 spec: (list){ |(*(#list){ 1105 0: (#struct){ 1106 refs: (#list){ 1107 0: (string){ "default" } 1108 } 1109 other: (#list){ 1110 } 1111 } 1112 }, (#list){ 1113 0: (#struct){ 1114 refs: (#list){ 1115 0: (string){ "default" } 1116 } 1117 } 1118 }) } 1119 } 1120 } 1121 } 1122 } 1123 Routes: (#struct){ 1124 route: (#struct){ 1125 default: (#struct){ 1126 spec: (#list){ 1127 0: (#struct){ 1128 refs: (#list){ 1129 0: (string){ "default" } 1130 } 1131 } 1132 } 1133 } 1134 } 1135 } 1136 } 1137 } 1138 reduced: (struct){ 1139 input: (struct){ 1140 k1: (struct){ 1141 foo: (#struct){ 1142 a: (int){ 1 } 1143 } 1144 } 1145 } 1146 out: (struct){ 1147 foo: (#struct){ |(*(#struct){ 1148 a: (int){ 1 } 1149 b: (int){ 2 } 1150 }, (#struct){ 1151 a: (int){ 1 } 1152 }) } 1153 } 1154 #x: (#struct){ |(*(#struct){ 1155 b: (int){ 2 } 1156 }, (#struct){ 1157 a: (int){ int } 1158 }) } 1159 } 1160 compare: (struct){ 1161 input: (struct){ 1162 k1: (struct){ 1163 foo: (#struct){ 1164 a: (int){ 1 } 1165 } 1166 } 1167 } 1168 out: (struct){ 1169 foo: (#struct){ |(*(#struct){ 1170 a: (int){ 1 } 1171 b: (int){ 2 } 1172 }, (#struct){ 1173 a: (int){ 1 } 1174 }) } 1175 } 1176 #x: (#struct){ |(*(#struct){ 1177 b: (int){ 2 } 1178 }, (#struct){ 1179 a: (int){ int } 1180 }) } 1181 } 1182 } 1183 } 1184 -- out/compile -- 1185 --- in.cue 1186 { 1187 a: { 1188 foo: { 1189 a: 1 1190 } 1191 [=~"foo"]: { 1192 b: 1 1193 name: 〈1;-〉 1194 } 1195 } 1196 d: (〈0;a〉 & { 1197 foobar: { 1198 c: 2 1199 } 1200 }) 1201 t1: { 1202 #a: { 1203 [(>"e" & <"z")]: int 1204 } 1205 b: (〈0;#a〉 & { 1206 f: 4 1207 }) 1208 c: (〈0;#a〉 & { 1209 z: 4 1210 }) 1211 } 1212 t2: { 1213 #a: { 1214 [("x"|"y")]: int 1215 } 1216 b: (〈0;#a〉 & { 1217 x: 4 1218 }) 1219 c: (〈0;#a〉 & { 1220 z: 4 1221 }) 1222 } 1223 } 1224 --- intpattern.cue 1225 { 1226 issue3670: { 1227 #X: { 1228 [int]: string 1229 } 1230 a: 〈0;#X〉 1231 a: { 1232 not_int: "c" 1233 } 1234 } 1235 dual: { 1236 _ 1237 [string]: _ 1238 [int]: _ 1239 } 1240 } 1241 --- issue2109.cue 1242 { 1243 patternCycle: { 1244 issue2109: { 1245 p1: { 1246 countries: [ 1247 "US", 1248 "GB", 1249 "AU", 1250 ] 1251 FlagsURLs: { 1252 [or(〈1;countries〉)]: string 1253 } 1254 〈0;FlagsURLs〉 1255 } 1256 } 1257 } 1258 patternCycle: { 1259 issue2109: { 1260 p2: { 1261 FlagsURLs: { 1262 [or(〈1;countries〉)]: string 1263 } 1264 〈0;FlagsURLs〉 1265 countries: [ 1266 "US", 1267 "GB", 1268 "AU", 1269 ] 1270 } 1271 } 1272 } 1273 patternCycle: { 1274 issue2109: { 1275 p3: { 1276 〈0;FlagsURLs〉 1277 FlagsURLs: { 1278 [or(〈1;countries〉)]: string 1279 } 1280 countries: [ 1281 "US", 1282 "GB", 1283 "AU", 1284 ] 1285 } 1286 } 1287 } 1288 patternCycle: { 1289 t1: { 1290 p1: { 1291 countries: ("US"|"GB"|"AU") 1292 FlagsURLs: { 1293 [〈1;countries〉]: string 1294 } 1295 〈0;FlagsURLs〉 1296 } 1297 } 1298 } 1299 patternCycle: { 1300 t1: { 1301 p2: { 1302 〈0;FlagsURLs〉 1303 countries: ("US"|"GB"|"AU") 1304 FlagsURLs: { 1305 [〈1;countries〉]: string 1306 } 1307 } 1308 } 1309 } 1310 patternCycle: { 1311 t1: { 1312 p3: { 1313 〈0;FlagsURLs〉 1314 FlagsURLs: { 1315 [〈1;countries〉]: string 1316 } 1317 countries: ("US"|"GB"|"AU") 1318 } 1319 } 1320 } 1321 } 1322 --- multi.cue 1323 { 1324 issue3638: { 1325 full: { 1326 routes: { 1327 default: {} 1328 } 1329 routes: { 1330 [string]: { 1331 spec: [ 1332 { 1333 refs: [ 1334 { 1335 "default" 1336 }, 1337 ] 1338 }, 1339 ] 1340 } 1341 } 1342 #Fields: { 1343 input: _ 1344 output: [ 1345 for _, x in 〈1;input〉 { 1346 〈1;x〉 1347 }, 1348 ] 1349 ... 1350 } 1351 #Kubernetes: { 1352 (〈1;#Fields〉 & { 1353 Routes: { 1354 route: { 1355 [_]: { 1356 spec!: 〈5;let HTTPROUTESPEC#1〉.#x 1357 } 1358 } 1359 } 1360 }) 1361 〈1;#Fields〉 1362 Routes: _ 1363 input: { 1364 res1: 〈1;Routes〉 1365 } 1366 } 1367 let HTTPROUTESPEC#1 = { 1368 #x: ([ 1369 ...{ 1370 refs: [ 1371 ...{ 1372 string 1373 }, 1374 ] 1375 }, 1376 ]|*[ 1377 { 1378 other: [] 1379 }, 1380 ]) 1381 } 1382 entrypoint: 〈0;used〉.output 1383 used: (〈0;#Kubernetes〉 & { 1384 Routes: { 1385 route: 〈2;routes〉 1386 } 1387 }) 1388 } 1389 } 1390 issue3638: { 1391 reduced: { 1392 input: { 1393 k1: { 1394 [string]: { 1395 a: 1 1396 } 1397 } 1398 } 1399 input: { 1400 k1: { 1401 foo: 〈2;#x〉 1402 } 1403 } 1404 out: { 1405 for _, x in 〈1;input〉 { 1406 〈1;x〉 1407 } 1408 for _, x in 〈1;input〉 { 1409 〈1;x〉 1410 } 1411 } 1412 #x: ({ 1413 a: int 1414 }|*{ 1415 b: 2 1416 }) 1417 } 1418 } 1419 issue3638: { 1420 compare: { 1421 input: { 1422 k1: { 1423 foo: { 1424 a: 1 1425 } 1426 } 1427 } 1428 input: { 1429 k1: { 1430 foo: 〈2;#x〉 1431 } 1432 } 1433 out: { 1434 for _, x in 〈1;input〉 { 1435 〈1;x〉 1436 } 1437 for _, x in 〈1;input〉 { 1438 〈1;x〉 1439 } 1440 } 1441 #x: ({ 1442 a: int 1443 }|*{ 1444 b: 2 1445 }) 1446 } 1447 } 1448 }