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  }