cuelang.org/go@v0.13.0/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  -- diff/todo/p3 --
    81  Reordering
    82  -- out/evalalpha/stats --
    83  Leaks:  937
    84  Freed:  0
    85  Reused: 0
    86  Allocs: 937
    87  Retain: 0
    88  
    89  Unifications: 389
    90  Conjuncts:    1464
    91  Disjuncts:    110
    92  
    93  CloseIDElems: 15467
    94  NumCloseIDs: 407
    95  -- out/evalalpha --
    96  (struct){
    97    #AC: (#struct){
    98      k: (string){ "simple" }
    99      d: ~(#C)
   100    }
   101    #AS: (#struct){
   102      k: (string){ "complex" }
   103      d: ~(#S)
   104    }
   105    #R: (#struct){
   106      a: (#struct){ |((#struct){
   107          k: (string){ "simple" }
   108          d: ~(#C)
   109        }, (#struct){
   110          k: (string){ "complex" }
   111          d: ~(#S)
   112        }) }
   113    }
   114    #S: (#struct){
   115      n: (string){ string }
   116      r: (#struct){
   117      }
   118    }
   119    #C: (#struct){
   120      n: (string){ string }
   121    }
   122    #sub: (#struct){
   123      #p: ~(#AS)
   124      dict: (#struct){
   125      }
   126      let subs#1multi = (〈3;#sub〉 & {
   127        #p: 〈2;rd〉.a
   128      })
   129    }
   130    _test: (struct){
   131      c1: (#struct){
   132        d: (#struct){
   133          n: (string){ "c1" }
   134        }
   135        k: (string){ "simple" }
   136      }
   137      s3: (#struct){
   138        d: (#struct){
   139          n: (string){ "s3" }
   140          r: (#struct){
   141            r1: (#struct){
   142              a: (#struct){
   143                d: (#struct){
   144                  n: (string){ "c1" }
   145                }
   146                k: (string){ "simple" }
   147              }
   148            }
   149          }
   150        }
   151        k: (string){ "complex" }
   152      }
   153      s2: (#struct){
   154        d: (#struct){
   155          n: (string){ "s2" }
   156          r: (#struct){
   157            r1: (#struct){
   158              a: (#struct){
   159                d: (#struct){
   160                  n: (string){ "c1" }
   161                }
   162                k: (string){ "simple" }
   163              }
   164            }
   165            r2: (#struct){
   166              a: (#struct){
   167                d: (#struct){
   168                  n: (string){ "s3" }
   169                  r: (#struct){
   170                    r1: (#struct){
   171                      a: (#struct){
   172                        d: (#struct){
   173                          n: (string){ "c1" }
   174                        }
   175                        k: (string){ "simple" }
   176                      }
   177                    }
   178                  }
   179                }
   180                k: (string){ "complex" }
   181              }
   182            }
   183          }
   184        }
   185        k: (string){ "complex" }
   186      }
   187      s1: (#struct){
   188        d: (#struct){
   189          n: (string){ "s1" }
   190          r: (#struct){
   191            r1: (#struct){
   192              a: (#struct){
   193                d: (#struct){
   194                  n: (string){ "c1" }
   195                }
   196                k: (string){ "simple" }
   197              }
   198            }
   199            r2: (#struct){
   200              a: (#struct){
   201                d: (#struct){
   202                  n: (string){ "s2" }
   203                  r: (#struct){
   204                    r1: (#struct){
   205                      a: (#struct){
   206                        d: (#struct){
   207                          n: (string){ "c1" }
   208                        }
   209                        k: (string){ "simple" }
   210                      }
   211                    }
   212                    r2: (#struct){
   213                      a: (#struct){
   214                        d: (#struct){
   215                          n: (string){ "s3" }
   216                          r: (#struct){
   217                            r1: (#struct){
   218                              a: (#struct){
   219                                d: (#struct){
   220                                  n: (string){ "c1" }
   221                                }
   222                                k: (string){ "simple" }
   223                              }
   224                            }
   225                          }
   226                        }
   227                        k: (string){ "complex" }
   228                      }
   229                    }
   230                  }
   231                }
   232                k: (string){ "complex" }
   233              }
   234            }
   235          }
   236        }
   237        k: (string){ "complex" }
   238      }
   239    }
   240    out: (#struct){
   241      #p: (#struct){
   242        d: (#struct){
   243          n: (string){ "s1" }
   244          r: (#struct){
   245            r1: (#struct){
   246              a: (#struct){
   247                d: (#struct){
   248                  n: (string){ "c1" }
   249                }
   250                k: (string){ "simple" }
   251              }
   252            }
   253            r2: (#struct){
   254              a: (#struct){
   255                d: (#struct){
   256                  n: (string){ "s2" }
   257                  r: (#struct){
   258                    r1: (#struct){
   259                      a: (#struct){
   260                        d: (#struct){
   261                          n: (string){ "c1" }
   262                        }
   263                        k: (string){ "simple" }
   264                      }
   265                    }
   266                    r2: (#struct){
   267                      a: (#struct){
   268                        d: (#struct){
   269                          n: (string){ "s3" }
   270                          r: (#struct){
   271                            r1: (#struct){
   272                              a: (#struct){
   273                                d: (#struct){
   274                                  n: (string){ "c1" }
   275                                }
   276                                k: (string){ "simple" }
   277                              }
   278                            }
   279                          }
   280                        }
   281                        k: (string){ "complex" }
   282                      }
   283                    }
   284                  }
   285                }
   286                k: (string){ "complex" }
   287              }
   288            }
   289          }
   290        }
   291        k: (string){ "complex" }
   292      }
   293      dict: (#struct){
   294        r1: (#struct){
   295          a: (#struct){
   296            d: (#struct){
   297              n: (string){ "c1" }
   298            }
   299            k: (string){ "simple" }
   300          }
   301        }
   302        r2_r1: (#struct){
   303          a: (#struct){
   304            d: (#struct){
   305              n: (string){ "c1" }
   306            }
   307            k: (string){ "simple" }
   308          }
   309        }
   310        r2_r2_r1: (#struct){
   311          a: (#struct){
   312            d: (#struct){
   313              n: (string){ "c1" }
   314            }
   315            k: (string){ "simple" }
   316          }
   317        }
   318      }
   319      let subs#1multi = (〈3;#sub〉 & {
   320        #p: 〈2;rd〉.a
   321      })
   322    }
   323  }
   324  -- diff/-out/evalalpha/stats<==>+out/eval/stats --
   325  diff old new
   326  --- old
   327  +++ new
   328  @@ -1,9 +1,12 @@
   329  -Leaks:  6
   330  -Freed:  3232
   331  -Reused: 3213
   332  -Allocs: 25
   333  -Retain: 26
   334  -
   335  -Unifications: 2588
   336  -Conjuncts:    12056
   337  -Disjuncts:    3258
   338  +Leaks:  937
   339  +Freed:  0
   340  +Reused: 0
   341  +Allocs: 937
   342  +Retain: 0
   343  +
   344  +Unifications: 389
   345  +Conjuncts:    1464
   346  +Disjuncts:    110
   347  +
   348  +CloseIDElems: 15467
   349  +NumCloseIDs: 407
   350  -- diff/-out/evalalpha<==>+out/eval --
   351  diff old new
   352  --- old
   353  +++ new
   354  @@ -1,31 +1,19 @@
   355   (struct){
   356     #AC: (#struct){
   357       k: (string){ "simple" }
   358  -    d: (#struct){
   359  -      n: (string){ string }
   360  -    }
   361  +    d: ~(#C)
   362     }
   363     #AS: (#struct){
   364       k: (string){ "complex" }
   365  -    d: (#struct){
   366  -      n: (string){ string }
   367  -      r: (#struct){
   368  -      }
   369  -    }
   370  +    d: ~(#S)
   371     }
   372     #R: (#struct){
   373       a: (#struct){ |((#struct){
   374           k: (string){ "simple" }
   375  -        d: (#struct){
   376  -          n: (string){ string }
   377  -        }
   378  +        d: ~(#C)
   379         }, (#struct){
   380           k: (string){ "complex" }
   381  -        d: (#struct){
   382  -          n: (string){ string }
   383  -          r: (#struct){
   384  -          }
   385  -        }
   386  +        d: ~(#S)
   387         }) }
   388     }
   389     #S: (#struct){
   390  @@ -37,14 +25,7 @@
   391       n: (string){ string }
   392     }
   393     #sub: (#struct){
   394  -    #p: (#struct){
   395  -      k: (string){ "complex" }
   396  -      d: (#struct){
   397  -        n: (string){ string }
   398  -        r: (#struct){
   399  -        }
   400  -      }
   401  -    }
   402  +    #p: ~(#AS)
   403       dict: (#struct){
   404       }
   405       let subs#1multi = (〈3;#sub〉 & {
   406  @@ -53,190 +34,190 @@
   407     }
   408     _test: (struct){
   409       c1: (#struct){
   410  -      k: (string){ "simple" }
   411         d: (#struct){
   412           n: (string){ "c1" }
   413         }
   414  +      k: (string){ "simple" }
   415       }
   416       s3: (#struct){
   417  -      k: (string){ "complex" }
   418         d: (#struct){
   419           n: (string){ "s3" }
   420           r: (#struct){
   421             r1: (#struct){
   422               a: (#struct){
   423  -              k: (string){ "simple" }
   424  -              d: (#struct){
   425  -                n: (string){ "c1" }
   426  -              }
   427  -            }
   428  -          }
   429  -        }
   430  -      }
   431  +              d: (#struct){
   432  +                n: (string){ "c1" }
   433  +              }
   434  +              k: (string){ "simple" }
   435  +            }
   436  +          }
   437  +        }
   438  +      }
   439  +      k: (string){ "complex" }
   440       }
   441       s2: (#struct){
   442  -      k: (string){ "complex" }
   443         d: (#struct){
   444           n: (string){ "s2" }
   445           r: (#struct){
   446             r1: (#struct){
   447               a: (#struct){
   448  -              k: (string){ "simple" }
   449  -              d: (#struct){
   450  -                n: (string){ "c1" }
   451  -              }
   452  -            }
   453  -          }
   454  -          r2: (#struct){
   455  -            a: (#struct){
   456  -              k: (string){ "complex" }
   457  +              d: (#struct){
   458  +                n: (string){ "c1" }
   459  +              }
   460  +              k: (string){ "simple" }
   461  +            }
   462  +          }
   463  +          r2: (#struct){
   464  +            a: (#struct){
   465                 d: (#struct){
   466                   n: (string){ "s3" }
   467                   r: (#struct){
   468                     r1: (#struct){
   469                       a: (#struct){
   470  -                      k: (string){ "simple" }
   471  -                      d: (#struct){
   472  -                        n: (string){ "c1" }
   473  -                      }
   474  -                    }
   475  -                  }
   476  -                }
   477  -              }
   478  -            }
   479  -          }
   480  -        }
   481  -      }
   482  +                      d: (#struct){
   483  +                        n: (string){ "c1" }
   484  +                      }
   485  +                      k: (string){ "simple" }
   486  +                    }
   487  +                  }
   488  +                }
   489  +              }
   490  +              k: (string){ "complex" }
   491  +            }
   492  +          }
   493  +        }
   494  +      }
   495  +      k: (string){ "complex" }
   496       }
   497       s1: (#struct){
   498  -      k: (string){ "complex" }
   499  -      d: (#struct){
   500  -        n: (string){ "s1" }
   501  -        r: (#struct){
   502  -          r1: (#struct){
   503  -            a: (#struct){
   504  -              k: (string){ "simple" }
   505  -              d: (#struct){
   506  -                n: (string){ "c1" }
   507  -              }
   508  -            }
   509  -          }
   510  -          r2: (#struct){
   511  -            a: (#struct){
   512  -              k: (string){ "complex" }
   513  -              d: (#struct){
   514  -                n: (string){ "s2" }
   515  -                r: (#struct){
   516  -                  r1: (#struct){
   517  -                    a: (#struct){
   518  -                      k: (string){ "simple" }
   519  -                      d: (#struct){
   520  -                        n: (string){ "c1" }
   521  -                      }
   522  -                    }
   523  -                  }
   524  -                  r2: (#struct){
   525  -                    a: (#struct){
   526  -                      k: (string){ "complex" }
   527  -                      d: (#struct){
   528  -                        n: (string){ "s3" }
   529  -                        r: (#struct){
   530  -                          r1: (#struct){
   531  -                            a: (#struct){
   532  -                              k: (string){ "simple" }
   533  -                              d: (#struct){
   534  -                                n: (string){ "c1" }
   535  -                              }
   536  -                            }
   537  -                          }
   538  -                        }
   539  -                      }
   540  -                    }
   541  -                  }
   542  -                }
   543  -              }
   544  -            }
   545  -          }
   546  -        }
   547  -      }
   548  +      d: (#struct){
   549  +        n: (string){ "s1" }
   550  +        r: (#struct){
   551  +          r1: (#struct){
   552  +            a: (#struct){
   553  +              d: (#struct){
   554  +                n: (string){ "c1" }
   555  +              }
   556  +              k: (string){ "simple" }
   557  +            }
   558  +          }
   559  +          r2: (#struct){
   560  +            a: (#struct){
   561  +              d: (#struct){
   562  +                n: (string){ "s2" }
   563  +                r: (#struct){
   564  +                  r1: (#struct){
   565  +                    a: (#struct){
   566  +                      d: (#struct){
   567  +                        n: (string){ "c1" }
   568  +                      }
   569  +                      k: (string){ "simple" }
   570  +                    }
   571  +                  }
   572  +                  r2: (#struct){
   573  +                    a: (#struct){
   574  +                      d: (#struct){
   575  +                        n: (string){ "s3" }
   576  +                        r: (#struct){
   577  +                          r1: (#struct){
   578  +                            a: (#struct){
   579  +                              d: (#struct){
   580  +                                n: (string){ "c1" }
   581  +                              }
   582  +                              k: (string){ "simple" }
   583  +                            }
   584  +                          }
   585  +                        }
   586  +                      }
   587  +                      k: (string){ "complex" }
   588  +                    }
   589  +                  }
   590  +                }
   591  +              }
   592  +              k: (string){ "complex" }
   593  +            }
   594  +          }
   595  +        }
   596  +      }
   597  +      k: (string){ "complex" }
   598       }
   599     }
   600     out: (#struct){
   601       #p: (#struct){
   602  -      k: (string){ "complex" }
   603  -      d: (#struct){
   604  -        n: (string){ "s1" }
   605  -        r: (#struct){
   606  -          r1: (#struct){
   607  -            a: (#struct){
   608  -              k: (string){ "simple" }
   609  -              d: (#struct){
   610  -                n: (string){ "c1" }
   611  -              }
   612  -            }
   613  -          }
   614  -          r2: (#struct){
   615  -            a: (#struct){
   616  -              k: (string){ "complex" }
   617  -              d: (#struct){
   618  -                n: (string){ "s2" }
   619  -                r: (#struct){
   620  -                  r1: (#struct){
   621  -                    a: (#struct){
   622  -                      k: (string){ "simple" }
   623  -                      d: (#struct){
   624  -                        n: (string){ "c1" }
   625  -                      }
   626  -                    }
   627  -                  }
   628  -                  r2: (#struct){
   629  -                    a: (#struct){
   630  -                      k: (string){ "complex" }
   631  -                      d: (#struct){
   632  -                        n: (string){ "s3" }
   633  -                        r: (#struct){
   634  -                          r1: (#struct){
   635  -                            a: (#struct){
   636  -                              k: (string){ "simple" }
   637  -                              d: (#struct){
   638  -                                n: (string){ "c1" }
   639  -                              }
   640  -                            }
   641  -                          }
   642  -                        }
   643  -                      }
   644  -                    }
   645  -                  }
   646  -                }
   647  -              }
   648  -            }
   649  -          }
   650  -        }
   651  -      }
   652  +      d: (#struct){
   653  +        n: (string){ "s1" }
   654  +        r: (#struct){
   655  +          r1: (#struct){
   656  +            a: (#struct){
   657  +              d: (#struct){
   658  +                n: (string){ "c1" }
   659  +              }
   660  +              k: (string){ "simple" }
   661  +            }
   662  +          }
   663  +          r2: (#struct){
   664  +            a: (#struct){
   665  +              d: (#struct){
   666  +                n: (string){ "s2" }
   667  +                r: (#struct){
   668  +                  r1: (#struct){
   669  +                    a: (#struct){
   670  +                      d: (#struct){
   671  +                        n: (string){ "c1" }
   672  +                      }
   673  +                      k: (string){ "simple" }
   674  +                    }
   675  +                  }
   676  +                  r2: (#struct){
   677  +                    a: (#struct){
   678  +                      d: (#struct){
   679  +                        n: (string){ "s3" }
   680  +                        r: (#struct){
   681  +                          r1: (#struct){
   682  +                            a: (#struct){
   683  +                              d: (#struct){
   684  +                                n: (string){ "c1" }
   685  +                              }
   686  +                              k: (string){ "simple" }
   687  +                            }
   688  +                          }
   689  +                        }
   690  +                      }
   691  +                      k: (string){ "complex" }
   692  +                    }
   693  +                  }
   694  +                }
   695  +              }
   696  +              k: (string){ "complex" }
   697  +            }
   698  +          }
   699  +        }
   700  +      }
   701  +      k: (string){ "complex" }
   702       }
   703       dict: (#struct){
   704         r1: (#struct){
   705           a: (#struct){
   706  -          k: (string){ "simple" }
   707  -          d: (#struct){
   708  -            n: (string){ "c1" }
   709  -          }
   710  +          d: (#struct){
   711  +            n: (string){ "c1" }
   712  +          }
   713  +          k: (string){ "simple" }
   714           }
   715         }
   716         r2_r1: (#struct){
   717           a: (#struct){
   718  -          k: (string){ "simple" }
   719  -          d: (#struct){
   720  -            n: (string){ "c1" }
   721  -          }
   722  +          d: (#struct){
   723  +            n: (string){ "c1" }
   724  +          }
   725  +          k: (string){ "simple" }
   726           }
   727         }
   728         r2_r2_r1: (#struct){
   729           a: (#struct){
   730  -          k: (string){ "simple" }
   731  -          d: (#struct){
   732  -            n: (string){ "c1" }
   733  -          }
   734  +          d: (#struct){
   735  +            n: (string){ "c1" }
   736  +          }
   737  +          k: (string){ "simple" }
   738           }
   739         }
   740       }
   741  -- out/eval/stats --
   742  Leaks:  6
   743  Freed:  3232
   744  Reused: 3213
   745  Allocs: 25
   746  Retain: 26
   747  
   748  Unifications: 2588
   749  Conjuncts:    12056
   750  Disjuncts:    3258
   751  -- out/eval --
   752  (struct){
   753    #AC: (#struct){
   754      k: (string){ "simple" }
   755      d: (#struct){
   756        n: (string){ string }
   757      }
   758    }
   759    #AS: (#struct){
   760      k: (string){ "complex" }
   761      d: (#struct){
   762        n: (string){ string }
   763        r: (#struct){
   764        }
   765      }
   766    }
   767    #R: (#struct){
   768      a: (#struct){ |((#struct){
   769          k: (string){ "simple" }
   770          d: (#struct){
   771            n: (string){ string }
   772          }
   773        }, (#struct){
   774          k: (string){ "complex" }
   775          d: (#struct){
   776            n: (string){ string }
   777            r: (#struct){
   778            }
   779          }
   780        }) }
   781    }
   782    #S: (#struct){
   783      n: (string){ string }
   784      r: (#struct){
   785      }
   786    }
   787    #C: (#struct){
   788      n: (string){ string }
   789    }
   790    #sub: (#struct){
   791      #p: (#struct){
   792        k: (string){ "complex" }
   793        d: (#struct){
   794          n: (string){ string }
   795          r: (#struct){
   796          }
   797        }
   798      }
   799      dict: (#struct){
   800      }
   801      let subs#1multi = (〈3;#sub〉 & {
   802        #p: 〈2;rd〉.a
   803      })
   804    }
   805    _test: (struct){
   806      c1: (#struct){
   807        k: (string){ "simple" }
   808        d: (#struct){
   809          n: (string){ "c1" }
   810        }
   811      }
   812      s3: (#struct){
   813        k: (string){ "complex" }
   814        d: (#struct){
   815          n: (string){ "s3" }
   816          r: (#struct){
   817            r1: (#struct){
   818              a: (#struct){
   819                k: (string){ "simple" }
   820                d: (#struct){
   821                  n: (string){ "c1" }
   822                }
   823              }
   824            }
   825          }
   826        }
   827      }
   828      s2: (#struct){
   829        k: (string){ "complex" }
   830        d: (#struct){
   831          n: (string){ "s2" }
   832          r: (#struct){
   833            r1: (#struct){
   834              a: (#struct){
   835                k: (string){ "simple" }
   836                d: (#struct){
   837                  n: (string){ "c1" }
   838                }
   839              }
   840            }
   841            r2: (#struct){
   842              a: (#struct){
   843                k: (string){ "complex" }
   844                d: (#struct){
   845                  n: (string){ "s3" }
   846                  r: (#struct){
   847                    r1: (#struct){
   848                      a: (#struct){
   849                        k: (string){ "simple" }
   850                        d: (#struct){
   851                          n: (string){ "c1" }
   852                        }
   853                      }
   854                    }
   855                  }
   856                }
   857              }
   858            }
   859          }
   860        }
   861      }
   862      s1: (#struct){
   863        k: (string){ "complex" }
   864        d: (#struct){
   865          n: (string){ "s1" }
   866          r: (#struct){
   867            r1: (#struct){
   868              a: (#struct){
   869                k: (string){ "simple" }
   870                d: (#struct){
   871                  n: (string){ "c1" }
   872                }
   873              }
   874            }
   875            r2: (#struct){
   876              a: (#struct){
   877                k: (string){ "complex" }
   878                d: (#struct){
   879                  n: (string){ "s2" }
   880                  r: (#struct){
   881                    r1: (#struct){
   882                      a: (#struct){
   883                        k: (string){ "simple" }
   884                        d: (#struct){
   885                          n: (string){ "c1" }
   886                        }
   887                      }
   888                    }
   889                    r2: (#struct){
   890                      a: (#struct){
   891                        k: (string){ "complex" }
   892                        d: (#struct){
   893                          n: (string){ "s3" }
   894                          r: (#struct){
   895                            r1: (#struct){
   896                              a: (#struct){
   897                                k: (string){ "simple" }
   898                                d: (#struct){
   899                                  n: (string){ "c1" }
   900                                }
   901                              }
   902                            }
   903                          }
   904                        }
   905                      }
   906                    }
   907                  }
   908                }
   909              }
   910            }
   911          }
   912        }
   913      }
   914    }
   915    out: (#struct){
   916      #p: (#struct){
   917        k: (string){ "complex" }
   918        d: (#struct){
   919          n: (string){ "s1" }
   920          r: (#struct){
   921            r1: (#struct){
   922              a: (#struct){
   923                k: (string){ "simple" }
   924                d: (#struct){
   925                  n: (string){ "c1" }
   926                }
   927              }
   928            }
   929            r2: (#struct){
   930              a: (#struct){
   931                k: (string){ "complex" }
   932                d: (#struct){
   933                  n: (string){ "s2" }
   934                  r: (#struct){
   935                    r1: (#struct){
   936                      a: (#struct){
   937                        k: (string){ "simple" }
   938                        d: (#struct){
   939                          n: (string){ "c1" }
   940                        }
   941                      }
   942                    }
   943                    r2: (#struct){
   944                      a: (#struct){
   945                        k: (string){ "complex" }
   946                        d: (#struct){
   947                          n: (string){ "s3" }
   948                          r: (#struct){
   949                            r1: (#struct){
   950                              a: (#struct){
   951                                k: (string){ "simple" }
   952                                d: (#struct){
   953                                  n: (string){ "c1" }
   954                                }
   955                              }
   956                            }
   957                          }
   958                        }
   959                      }
   960                    }
   961                  }
   962                }
   963              }
   964            }
   965          }
   966        }
   967      }
   968      dict: (#struct){
   969        r1: (#struct){
   970          a: (#struct){
   971            k: (string){ "simple" }
   972            d: (#struct){
   973              n: (string){ "c1" }
   974            }
   975          }
   976        }
   977        r2_r1: (#struct){
   978          a: (#struct){
   979            k: (string){ "simple" }
   980            d: (#struct){
   981              n: (string){ "c1" }
   982            }
   983          }
   984        }
   985        r2_r2_r1: (#struct){
   986          a: (#struct){
   987            k: (string){ "simple" }
   988            d: (#struct){
   989              n: (string){ "c1" }
   990            }
   991          }
   992        }
   993      }
   994      let subs#1multi = (〈3;#sub〉 & {
   995        #p: 〈2;rd〉.a
   996      })
   997    }
   998  }
   999  -- out/compile --
  1000  --- in.cue
  1001  {
  1002    #AC: {
  1003      k: "simple"
  1004      d: 〈1;#C〉
  1005    }
  1006    #AS: {
  1007      k: "complex"
  1008      d: 〈1;#S〉
  1009    }
  1010    #R: {
  1011      a: (〈1;#AC〉|〈1;#AS〉)
  1012    }
  1013    #S: {
  1014      n: string
  1015      r: {
  1016        [string]: 〈2;#R〉
  1017      }
  1018    }
  1019    #C: {
  1020      n: string
  1021    }
  1022    #sub: {
  1023      #p: 〈1;#AS〉
  1024      dict: {
  1025        [string]: _
  1026      }
  1027      for rn, rd in 〈0;#p〉.d.r if (〈0;rd〉.a.k == "complex") {
  1028        let subs#1multi = (〈3;#sub〉 & {
  1029          #p: 〈2;rd〉.a
  1030        })
  1031        for sn, sd in 〈0;let subs#1〉.dict {
  1032          dict: {
  1033            "\(〈4;rn〉)_\(〈2;sn〉)": 〈2;sd〉
  1034          }
  1035        }
  1036      }
  1037      for rn, rd in 〈0;#p〉.d.r if (〈0;rd〉.a.k == "simple") {
  1038        dict: {
  1039          "\(〈2;rn〉)": 〈2;rd〉
  1040        }
  1041      }
  1042    }
  1043    _test: {
  1044      c1: 〈1;#AC〉
  1045      c1: {
  1046        d: {
  1047          n: "c1"
  1048        }
  1049      }
  1050      s3: 〈1;#AS〉
  1051      s3: {
  1052        d: {
  1053          n: "s3"
  1054          r: {
  1055            r1: {
  1056              a: 〈4;c1〉
  1057            }
  1058          }
  1059        }
  1060      }
  1061      s2: 〈1;#AS〉
  1062      s2: {
  1063        d: {
  1064          n: "s2"
  1065          r: {
  1066            r1: {
  1067              a: 〈4;c1〉
  1068            }
  1069            r2: {
  1070              a: 〈4;s3〉
  1071            }
  1072          }
  1073        }
  1074      }
  1075      s1: 〈1;#AS〉
  1076      s1: {
  1077        d: {
  1078          n: "s1"
  1079          r: {
  1080            r1: {
  1081              a: 〈4;c1〉
  1082            }
  1083            r2: {
  1084              a: 〈4;s2〉
  1085            }
  1086          }
  1087        }
  1088      }
  1089    }
  1090    out: (〈0;#sub〉 & {
  1091      #p: 〈1;_test〉.s1
  1092    })
  1093  }