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