cuelang.org/go@v0.10.1/cue/testdata/cycle/constraints.txtar (about) 1 -- in.cue -- 2 // Not a cycle: the structure in x (c) only triggers one further 3 // instantiation of y, but not enough to trigger another round. 4 safeCycle: simple2: { 5 y: [string]: b: c: y 6 x: y 7 x: c: y 8 } 9 10 // Not a cycle: the structure in x (c) only triggers one further 11 // instantiation of y, but not enough to trigger another round. 12 safeCycle: long1: { 13 y: [string]: b: y 14 x: y 15 x: c: b: e: b: c: _ 16 } 17 18 // Not a cycle: the structure in x (c) only triggers one further 19 // instantiation of y, but not enough to trigger another round. 20 safeCycle: long2: { 21 a: [string]: b: a 22 x: a 23 x: c: b: c: b: c: {} 24 } 25 26 // noCyclePattern is similar to the above cases, but involving more patterns 27 // and various lengths. 28 noCyclePattern: _ 29 30 noCyclePattern: t1: { 31 #D: [string]: #D 32 a: {} 33 [string]: #D 34 [string]: b: c: {} 35 } 36 37 noCyclePattern: t2: { 38 #D: [string]: x: #D 39 a: {} 40 [string]: #D 41 [string]: b: x: c: {} 42 } 43 44 noCyclePattern: t3: { 45 _D: [string]: _T 46 _T: x: _D 47 [string]: _D 48 [string]: b: x: c: {} 49 a: {} 50 } 51 52 noCyclePattern: t4: { 53 _D: [string]: x: _T 54 _T: y: _D 55 [string]: _D 56 [string]: b: x: {} 57 a: {} 58 } 59 60 noCyclePattern: t5: { 61 _D: [string]: x: _T 62 _T: y: _D 63 [string]: _D 64 [string]: b: x: y: c: x: {} 65 a: {} 66 } 67 68 // This example also has an embedding, in which case it should still behave 69 // the same. 70 noCyclePattern: t6: { 71 #D: [string]: #E 72 73 #E: t: #T 74 75 #T: { 76 { object: #S } 77 } 78 79 #S: y: #D 80 [string]: x: #D 81 [string]: x: r: t: object: y: foo: t: object: { 82 } 83 bar: {} 84 } 85 86 // Cycle: x cyclic. The pattern constraint should not be seen as 87 // "adding new structure", thereby permitting the cycle. 88 noCancelSelfInvoke: t1: { 89 y: [string]: b: y 90 x: y 91 x: c: x 92 } 93 94 95 // Even though these cycles cross pattern boundaries, they are still structural 96 // cycles as the reference includes a field that triggers the pattern. 97 selfTriggerCycle: _ 98 99 // TODO: This does not show an explicit cycle within `a`, only a "child" cycle. 100 // However, upon investigation this error is present in the tree. Either way, 101 // the error only needs to be reported once, so this is not a huge problem. 102 selfTriggerCycle: t1: { 103 a: #T 104 #T: { 105 [string]: #T 106 b: {} 107 } 108 } 109 110 selfTriggerCycle: t2: { 111 #T: [string]: X={ 112 a: X 113 } 114 b: #T 115 b: c: {} 116 } 117 118 selfTriggerCycle: long1: { 119 // The long string of nested fields will initially exempt the structural 120 // cycle, but they will eventually run out, causing the cycle to be 121 // triggered. 122 a: [string]: b: a // -> record conjunct from pattern per field. 123 a: c: b: c: b: c: {} // -> track if any of the fields is not a cycle. 124 } 125 126 // TODO: see comment at selfTriggerCycle.t1 127 selfTriggerCycle: issue1503: { 128 a: #T & { 129 a: one: link: a: two: {} 130 } 131 #T: { 132 a: [string]: link: #T 133 a: b: {} 134 } 135 } 136 137 mutuallyTriggeringCycle: t1: { 138 // Even though y itself, as well as each of the x fields are not cyclic, 139 // the combination of the two x conjuncts are, as the b fields of y will 140 // trigger the pattern constraints in an interleaved fashion. 141 y: [string]: b: y 142 x: y 143 x: c: y 144 } 145 146 -- out/compile -- 147 --- in.cue 148 { 149 safeCycle: { 150 simple2: { 151 y: { 152 [string]: { 153 b: { 154 c: 〈3;y〉 155 } 156 } 157 } 158 x: 〈0;y〉 159 x: { 160 c: 〈1;y〉 161 } 162 } 163 } 164 safeCycle: { 165 long1: { 166 y: { 167 [string]: { 168 b: 〈2;y〉 169 } 170 } 171 x: 〈0;y〉 172 x: { 173 c: { 174 b: { 175 e: { 176 b: { 177 c: _ 178 } 179 } 180 } 181 } 182 } 183 } 184 } 185 safeCycle: { 186 long2: { 187 a: { 188 [string]: { 189 b: 〈2;a〉 190 } 191 } 192 x: 〈0;a〉 193 x: { 194 c: { 195 b: { 196 c: { 197 b: { 198 c: {} 199 } 200 } 201 } 202 } 203 } 204 } 205 } 206 noCyclePattern: _ 207 noCyclePattern: { 208 t1: { 209 #D: { 210 [string]: 〈1;#D〉 211 } 212 a: {} 213 [string]: 〈0;#D〉 214 [string]: { 215 b: { 216 c: {} 217 } 218 } 219 } 220 } 221 noCyclePattern: { 222 t2: { 223 #D: { 224 [string]: { 225 x: 〈2;#D〉 226 } 227 } 228 a: {} 229 [string]: 〈0;#D〉 230 [string]: { 231 b: { 232 x: { 233 c: {} 234 } 235 } 236 } 237 } 238 } 239 noCyclePattern: { 240 t3: { 241 _D: { 242 [string]: 〈1;_T〉 243 } 244 _T: { 245 x: 〈1;_D〉 246 } 247 [string]: 〈0;_D〉 248 [string]: { 249 b: { 250 x: { 251 c: {} 252 } 253 } 254 } 255 a: {} 256 } 257 } 258 noCyclePattern: { 259 t4: { 260 _D: { 261 [string]: { 262 x: 〈2;_T〉 263 } 264 } 265 _T: { 266 y: 〈1;_D〉 267 } 268 [string]: 〈0;_D〉 269 [string]: { 270 b: { 271 x: {} 272 } 273 } 274 a: {} 275 } 276 } 277 noCyclePattern: { 278 t5: { 279 _D: { 280 [string]: { 281 x: 〈2;_T〉 282 } 283 } 284 _T: { 285 y: 〈1;_D〉 286 } 287 [string]: 〈0;_D〉 288 [string]: { 289 b: { 290 x: { 291 y: { 292 c: { 293 x: {} 294 } 295 } 296 } 297 } 298 } 299 a: {} 300 } 301 } 302 noCyclePattern: { 303 t6: { 304 #D: { 305 [string]: 〈1;#E〉 306 } 307 #E: { 308 t: 〈1;#T〉 309 } 310 #T: { 311 { 312 object: 〈2;#S〉 313 } 314 } 315 #S: { 316 y: 〈1;#D〉 317 } 318 [string]: { 319 x: 〈1;#D〉 320 } 321 [string]: { 322 x: { 323 r: { 324 t: { 325 object: { 326 y: { 327 foo: { 328 t: { 329 object: {} 330 } 331 } 332 } 333 } 334 } 335 } 336 } 337 } 338 bar: {} 339 } 340 } 341 noCancelSelfInvoke: { 342 t1: { 343 y: { 344 [string]: { 345 b: 〈2;y〉 346 } 347 } 348 x: 〈0;y〉 349 x: { 350 c: 〈1;x〉 351 } 352 } 353 } 354 selfTriggerCycle: _ 355 selfTriggerCycle: { 356 t1: { 357 a: 〈0;#T〉 358 #T: { 359 [string]: 〈1;#T〉 360 b: {} 361 } 362 } 363 } 364 selfTriggerCycle: { 365 t2: { 366 #T: { 367 [string]: { 368 a: 〈1〉 369 } 370 } 371 b: 〈0;#T〉 372 b: { 373 c: {} 374 } 375 } 376 } 377 selfTriggerCycle: { 378 long1: { 379 a: { 380 [string]: { 381 b: 〈2;a〉 382 } 383 } 384 a: { 385 c: { 386 b: { 387 c: { 388 b: { 389 c: {} 390 } 391 } 392 } 393 } 394 } 395 } 396 } 397 selfTriggerCycle: { 398 issue1503: { 399 a: (〈0;#T〉 & { 400 a: { 401 one: { 402 link: { 403 a: { 404 two: {} 405 } 406 } 407 } 408 } 409 }) 410 #T: { 411 a: { 412 [string]: { 413 link: 〈3;#T〉 414 } 415 } 416 a: { 417 b: {} 418 } 419 } 420 } 421 } 422 mutuallyTriggeringCycle: { 423 t1: { 424 y: { 425 [string]: { 426 b: 〈2;y〉 427 } 428 } 429 x: 〈0;y〉 430 x: { 431 c: 〈1;y〉 432 } 433 } 434 } 435 } 436 -- out/eval/stats -- 437 Leaks: 0 438 Freed: 143 439 Reused: 130 440 Allocs: 13 441 Retain: 4 442 443 Unifications: 143 444 Conjuncts: 321 445 Disjuncts: 147 446 -- out/evalalpha -- 447 Errors: 448 mutuallyTriggeringCycle.t1.x.c.b.b.b.b: structural cycle 449 noCancelSelfInvoke.t1.x.c.b.b.b: structural cycle 450 noCancelSelfInvoke.t1.x.c.c: structural cycle 451 selfTriggerCycle.issue1503.#T.a.b.link: structural cycle 452 selfTriggerCycle.long1.a.c.b.c.b.c.b.c.b: structural cycle 453 selfTriggerCycle.t1.#T.b.b: structural cycle 454 selfTriggerCycle.t2.b.c.a: structural cycle 455 456 Result: 457 (_|_){ 458 // [structural cycle] 459 safeCycle: (struct){ 460 simple2: (struct){ 461 y: (struct){ 462 } 463 x: (struct){ 464 c: (struct){ 465 b: (struct){ 466 c: (struct){ 467 } 468 b: (struct){ 469 c: (struct){ 470 } 471 } 472 } 473 } 474 } 475 } 476 long1: (struct){ 477 y: (struct){ 478 } 479 x: (struct){ 480 c: (struct){ 481 b: (struct){ 482 e: (struct){ 483 b: (struct){ 484 c: (struct){ 485 b: (struct){ 486 } 487 } 488 } 489 } 490 } 491 } 492 } 493 } 494 long2: (struct){ 495 a: (struct){ 496 } 497 x: (struct){ 498 c: (struct){ 499 b: (struct){ 500 c: (struct){ 501 b: (struct){ 502 c: (struct){ 503 b: (struct){ 504 } 505 } 506 } 507 } 508 } 509 } 510 } 511 } 512 } 513 noCyclePattern: (struct){ 514 t1: (struct){ 515 #D: (#struct){ 516 } 517 a: (#struct){ 518 b: (#struct){ 519 c: (#struct){ 520 } 521 } 522 } 523 } 524 t2: (struct){ 525 #D: (#struct){ 526 } 527 a: (#struct){ 528 b: (#struct){ 529 x: (#struct){ 530 c: (#struct){ 531 x: (#struct){ 532 } 533 } 534 } 535 } 536 } 537 } 538 t3: (struct){ 539 _D: (struct){ 540 } 541 _T: (struct){ 542 x: (struct){ 543 } 544 } 545 a: (struct){ 546 b: (struct){ 547 x: (struct){ 548 c: (struct){ 549 x: (struct){ 550 } 551 } 552 } 553 } 554 } 555 } 556 t4: (struct){ 557 _D: (struct){ 558 } 559 _T: (struct){ 560 y: (struct){ 561 } 562 } 563 a: (struct){ 564 b: (struct){ 565 x: (struct){ 566 y: (struct){ 567 } 568 } 569 } 570 } 571 } 572 t5: (struct){ 573 _D: (struct){ 574 } 575 _T: (struct){ 576 y: (struct){ 577 } 578 } 579 a: (struct){ 580 b: (struct){ 581 x: (struct){ 582 y: (struct){ 583 c: (struct){ 584 x: (struct){ 585 y: (struct){ 586 } 587 } 588 } 589 } 590 } 591 } 592 } 593 } 594 t6: (struct){ 595 #D: (#struct){ 596 } 597 #E: (#struct){ 598 t: (#struct){ 599 object: (#struct){ 600 y: (#struct){ 601 } 602 } 603 } 604 } 605 #T: (#struct){ 606 object: (#struct){ 607 y: (#struct){ 608 } 609 } 610 } 611 #S: (#struct){ 612 y: (#struct){ 613 } 614 } 615 bar: (struct){ 616 x: (#struct){ 617 r: (#struct){ 618 t: (#struct){ 619 object: (#struct){ 620 y: (#struct){ 621 foo: (#struct){ 622 t: (#struct){ 623 object: (#struct){ 624 y: (#struct){ 625 } 626 } 627 } 628 } 629 } 630 } 631 } 632 } 633 } 634 } 635 } 636 } 637 noCancelSelfInvoke: (_|_){ 638 // [structural cycle] 639 t1: (_|_){ 640 // [structural cycle] 641 y: (struct){ 642 } 643 x: (_|_){ 644 // [structural cycle] 645 c: (_|_){ 646 // [structural cycle] 647 b: (_|_){ 648 // [structural cycle] 649 b: (_|_){ 650 // [structural cycle] 651 b: (_|_){ 652 // [structural cycle] noCancelSelfInvoke.t1.x.c.b.b.b: structural cycle 653 } 654 } 655 } 656 c: (_|_){ 657 // [structural cycle] noCancelSelfInvoke.t1.x.c.c: structural cycle 658 } 659 } 660 } 661 } 662 } 663 selfTriggerCycle: (_|_){ 664 // [structural cycle] 665 t1: (_|_){ 666 // [structural cycle] 667 a: ~(selfTriggerCycle.t1.#T) 668 #T: (_|_){ 669 // [structural cycle] 670 b: (_|_){ 671 // [structural cycle] 672 b: (_|_){ 673 // [structural cycle] selfTriggerCycle.t1.#T.b.b: structural cycle 674 } 675 } 676 } 677 } 678 t2: (_|_){ 679 // [structural cycle] 680 #T: (#struct){ 681 } 682 b: (_|_){ 683 // [structural cycle] 684 c: (_|_){ 685 // [structural cycle] 686 a: (_|_){ 687 // [structural cycle] selfTriggerCycle.t2.b.c.a: structural cycle 688 } 689 } 690 } 691 } 692 long1: (_|_){ 693 // [structural cycle] 694 a: (_|_){ 695 // [structural cycle] 696 c: (_|_){ 697 // [structural cycle] 698 b: (_|_){ 699 // [structural cycle] 700 c: (_|_){ 701 // [structural cycle] 702 b: (_|_){ 703 // [structural cycle] 704 c: (_|_){ 705 // [structural cycle] 706 b: (_|_){ 707 // [structural cycle] 708 c: (_|_){ 709 // [structural cycle] 710 b: (_|_){ 711 // [structural cycle] selfTriggerCycle.long1.a.c.b.c.b.c.b.c.b: structural cycle 712 } 713 } 714 } 715 } 716 } 717 } 718 } 719 } 720 } 721 } 722 issue1503: (_|_){ 723 // [structural cycle] 724 a: (_|_){ 725 // [structural cycle] 726 a: (_|_){ 727 // [structural cycle] 728 one: (_|_){ 729 // [structural cycle] 730 link: (_|_){ 731 // [structural cycle] 732 a: (_|_){ 733 // [structural cycle] 734 two: (_|_){ 735 // [structural cycle] 736 link: ~(selfTriggerCycle.issue1503.#T) 737 } 738 b: (_|_){ 739 // [structural cycle] 740 link: ~(selfTriggerCycle.issue1503.#T) 741 } 742 } 743 } 744 } 745 b: (_|_){ 746 // [structural cycle] 747 link: ~(selfTriggerCycle.issue1503.#T) 748 } 749 } 750 } 751 #T: (_|_){ 752 // [structural cycle] 753 a: (_|_){ 754 // [structural cycle] 755 b: (_|_){ 756 // [structural cycle] 757 link: (_|_){ 758 // [structural cycle] selfTriggerCycle.issue1503.#T.a.b.link: structural cycle 759 } 760 } 761 } 762 } 763 } 764 } 765 mutuallyTriggeringCycle: (_|_){ 766 // [structural cycle] 767 t1: (_|_){ 768 // [structural cycle] 769 y: (struct){ 770 } 771 x: (_|_){ 772 // [structural cycle] 773 c: (_|_){ 774 // [structural cycle] 775 b: (_|_){ 776 // [structural cycle] 777 b: (_|_){ 778 // [structural cycle] 779 b: (_|_){ 780 // [structural cycle] 781 b: (_|_){ 782 // [structural cycle] mutuallyTriggeringCycle.t1.x.c.b.b.b.b: structural cycle 783 } 784 } 785 } 786 } 787 } 788 } 789 } 790 } 791 } 792 -- diff/-out/evalalpha<==>+out/eval -- 793 diff old new 794 --- old 795 +++ new 796 @@ -198,18 +198,18 @@ 797 // [structural cycle] 798 c: (_|_){ 799 // [structural cycle] 800 + b: (_|_){ 801 + // [structural cycle] 802 + b: (_|_){ 803 + // [structural cycle] 804 + b: (_|_){ 805 + // [structural cycle] noCancelSelfInvoke.t1.x.c.b.b.b: structural cycle 806 + } 807 + } 808 + } 809 c: (_|_){ 810 // [structural cycle] noCancelSelfInvoke.t1.x.c.c: structural cycle 811 } 812 - b: (_|_){ 813 - // [structural cycle] 814 - b: (_|_){ 815 - // [structural cycle] 816 - b: (_|_){ 817 - // [structural cycle] noCancelSelfInvoke.t1.x.c.b.b.b: structural cycle 818 - } 819 - } 820 - } 821 } 822 } 823 } 824 @@ -218,12 +218,7 @@ 825 // [structural cycle] 826 t1: (_|_){ 827 // [structural cycle] 828 - a: (_|_){ 829 - // [structural cycle] 830 - b: (_|_){ 831 - // [structural cycle] 832 - } 833 - } 834 + a: ~(selfTriggerCycle.t1.#T) 835 #T: (_|_){ 836 // [structural cycle] 837 b: (_|_){ 838 @@ -284,21 +279,26 @@ 839 // [structural cycle] 840 a: (_|_){ 841 // [structural cycle] 842 - b: (_|_){ 843 - // [structural cycle] 844 - link: (_|_){ 845 - // [structural cycle] 846 - } 847 - } 848 one: (_|_){ 849 // [structural cycle] 850 link: (_|_){ 851 // [structural cycle] 852 - a: (struct){ 853 - two: (struct){ 854 - } 855 - } 856 - } 857 + a: (_|_){ 858 + // [structural cycle] 859 + two: (_|_){ 860 + // [structural cycle] 861 + link: ~(selfTriggerCycle.issue1503.#T) 862 + } 863 + b: (_|_){ 864 + // [structural cycle] 865 + link: ~(selfTriggerCycle.issue1503.#T) 866 + } 867 + } 868 + } 869 + } 870 + b: (_|_){ 871 + // [structural cycle] 872 + link: ~(selfTriggerCycle.issue1503.#T) 873 } 874 } 875 } 876 -- diff/todo/p2 -- 877 issue1503: cycle detected too late (but not super late) 878 selfTriggerCycle.t1.a.b.b: cycle detected slightly too late 879 -- out/eval -- 880 Errors: 881 mutuallyTriggeringCycle.t1.x.c.b.b.b.b: structural cycle 882 noCancelSelfInvoke.t1.x.c.b.b.b: structural cycle 883 noCancelSelfInvoke.t1.x.c.c: structural cycle 884 selfTriggerCycle.issue1503.#T.a.b.link: structural cycle 885 selfTriggerCycle.long1.a.c.b.c.b.c.b.c.b: structural cycle 886 selfTriggerCycle.t1.#T.b.b: structural cycle 887 selfTriggerCycle.t2.b.c.a: structural cycle 888 889 Result: 890 (_|_){ 891 // [structural cycle] 892 safeCycle: (struct){ 893 simple2: (struct){ 894 y: (struct){ 895 } 896 x: (struct){ 897 c: (struct){ 898 b: (struct){ 899 c: (struct){ 900 } 901 b: (struct){ 902 c: (struct){ 903 } 904 } 905 } 906 } 907 } 908 } 909 long1: (struct){ 910 y: (struct){ 911 } 912 x: (struct){ 913 c: (struct){ 914 b: (struct){ 915 e: (struct){ 916 b: (struct){ 917 c: (struct){ 918 b: (struct){ 919 } 920 } 921 } 922 } 923 } 924 } 925 } 926 } 927 long2: (struct){ 928 a: (struct){ 929 } 930 x: (struct){ 931 c: (struct){ 932 b: (struct){ 933 c: (struct){ 934 b: (struct){ 935 c: (struct){ 936 b: (struct){ 937 } 938 } 939 } 940 } 941 } 942 } 943 } 944 } 945 } 946 noCyclePattern: (struct){ 947 t1: (struct){ 948 #D: (#struct){ 949 } 950 a: (#struct){ 951 b: (#struct){ 952 c: (#struct){ 953 } 954 } 955 } 956 } 957 t2: (struct){ 958 #D: (#struct){ 959 } 960 a: (#struct){ 961 b: (#struct){ 962 x: (#struct){ 963 c: (#struct){ 964 x: (#struct){ 965 } 966 } 967 } 968 } 969 } 970 } 971 t3: (struct){ 972 _D: (struct){ 973 } 974 _T: (struct){ 975 x: (struct){ 976 } 977 } 978 a: (struct){ 979 b: (struct){ 980 x: (struct){ 981 c: (struct){ 982 x: (struct){ 983 } 984 } 985 } 986 } 987 } 988 } 989 t4: (struct){ 990 _D: (struct){ 991 } 992 _T: (struct){ 993 y: (struct){ 994 } 995 } 996 a: (struct){ 997 b: (struct){ 998 x: (struct){ 999 y: (struct){ 1000 } 1001 } 1002 } 1003 } 1004 } 1005 t5: (struct){ 1006 _D: (struct){ 1007 } 1008 _T: (struct){ 1009 y: (struct){ 1010 } 1011 } 1012 a: (struct){ 1013 b: (struct){ 1014 x: (struct){ 1015 y: (struct){ 1016 c: (struct){ 1017 x: (struct){ 1018 y: (struct){ 1019 } 1020 } 1021 } 1022 } 1023 } 1024 } 1025 } 1026 } 1027 t6: (struct){ 1028 #D: (#struct){ 1029 } 1030 #E: (#struct){ 1031 t: (#struct){ 1032 object: (#struct){ 1033 y: (#struct){ 1034 } 1035 } 1036 } 1037 } 1038 #T: (#struct){ 1039 object: (#struct){ 1040 y: (#struct){ 1041 } 1042 } 1043 } 1044 #S: (#struct){ 1045 y: (#struct){ 1046 } 1047 } 1048 bar: (struct){ 1049 x: (#struct){ 1050 r: (#struct){ 1051 t: (#struct){ 1052 object: (#struct){ 1053 y: (#struct){ 1054 foo: (#struct){ 1055 t: (#struct){ 1056 object: (#struct){ 1057 y: (#struct){ 1058 } 1059 } 1060 } 1061 } 1062 } 1063 } 1064 } 1065 } 1066 } 1067 } 1068 } 1069 } 1070 noCancelSelfInvoke: (_|_){ 1071 // [structural cycle] 1072 t1: (_|_){ 1073 // [structural cycle] 1074 y: (struct){ 1075 } 1076 x: (_|_){ 1077 // [structural cycle] 1078 c: (_|_){ 1079 // [structural cycle] 1080 c: (_|_){ 1081 // [structural cycle] noCancelSelfInvoke.t1.x.c.c: structural cycle 1082 } 1083 b: (_|_){ 1084 // [structural cycle] 1085 b: (_|_){ 1086 // [structural cycle] 1087 b: (_|_){ 1088 // [structural cycle] noCancelSelfInvoke.t1.x.c.b.b.b: structural cycle 1089 } 1090 } 1091 } 1092 } 1093 } 1094 } 1095 } 1096 selfTriggerCycle: (_|_){ 1097 // [structural cycle] 1098 t1: (_|_){ 1099 // [structural cycle] 1100 a: (_|_){ 1101 // [structural cycle] 1102 b: (_|_){ 1103 // [structural cycle] 1104 } 1105 } 1106 #T: (_|_){ 1107 // [structural cycle] 1108 b: (_|_){ 1109 // [structural cycle] 1110 b: (_|_){ 1111 // [structural cycle] selfTriggerCycle.t1.#T.b.b: structural cycle 1112 } 1113 } 1114 } 1115 } 1116 t2: (_|_){ 1117 // [structural cycle] 1118 #T: (#struct){ 1119 } 1120 b: (_|_){ 1121 // [structural cycle] 1122 c: (_|_){ 1123 // [structural cycle] 1124 a: (_|_){ 1125 // [structural cycle] selfTriggerCycle.t2.b.c.a: structural cycle 1126 } 1127 } 1128 } 1129 } 1130 long1: (_|_){ 1131 // [structural cycle] 1132 a: (_|_){ 1133 // [structural cycle] 1134 c: (_|_){ 1135 // [structural cycle] 1136 b: (_|_){ 1137 // [structural cycle] 1138 c: (_|_){ 1139 // [structural cycle] 1140 b: (_|_){ 1141 // [structural cycle] 1142 c: (_|_){ 1143 // [structural cycle] 1144 b: (_|_){ 1145 // [structural cycle] 1146 c: (_|_){ 1147 // [structural cycle] 1148 b: (_|_){ 1149 // [structural cycle] selfTriggerCycle.long1.a.c.b.c.b.c.b.c.b: structural cycle 1150 } 1151 } 1152 } 1153 } 1154 } 1155 } 1156 } 1157 } 1158 } 1159 } 1160 issue1503: (_|_){ 1161 // [structural cycle] 1162 a: (_|_){ 1163 // [structural cycle] 1164 a: (_|_){ 1165 // [structural cycle] 1166 b: (_|_){ 1167 // [structural cycle] 1168 link: (_|_){ 1169 // [structural cycle] 1170 } 1171 } 1172 one: (_|_){ 1173 // [structural cycle] 1174 link: (_|_){ 1175 // [structural cycle] 1176 a: (struct){ 1177 two: (struct){ 1178 } 1179 } 1180 } 1181 } 1182 } 1183 } 1184 #T: (_|_){ 1185 // [structural cycle] 1186 a: (_|_){ 1187 // [structural cycle] 1188 b: (_|_){ 1189 // [structural cycle] 1190 link: (_|_){ 1191 // [structural cycle] selfTriggerCycle.issue1503.#T.a.b.link: structural cycle 1192 } 1193 } 1194 } 1195 } 1196 } 1197 } 1198 mutuallyTriggeringCycle: (_|_){ 1199 // [structural cycle] 1200 t1: (_|_){ 1201 // [structural cycle] 1202 y: (struct){ 1203 } 1204 x: (_|_){ 1205 // [structural cycle] 1206 c: (_|_){ 1207 // [structural cycle] 1208 b: (_|_){ 1209 // [structural cycle] 1210 b: (_|_){ 1211 // [structural cycle] 1212 b: (_|_){ 1213 // [structural cycle] 1214 b: (_|_){ 1215 // [structural cycle] mutuallyTriggeringCycle.t1.x.c.b.b.b.b: structural cycle 1216 } 1217 } 1218 } 1219 } 1220 } 1221 } 1222 } 1223 } 1224 }