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  }