github.com/joomcode/cue@v0.4.4-0.20221111115225-539fe3512047/cue/testdata/cycle/comprehension.txtar (about)

     1  -- in.cue --
     2  // Allow lookup in partially evaluated struct as long as the end result is
     3  // concrete.
     4  A: {
     5  	a: {
     6  		parent: ""
     7  		children: [ for k, v in A if v.parent == k {k}]
     8  	}
     9  	b: {
    10  		parent: "a"
    11  		children: [ for k, v in A if v.parent == k {k}]
    12  	}
    13  }
    14  
    15  // This should result in an incomplete error (a reference cycle error classifies
    16  // as incomplete).
    17  B: {
    18  	a: {
    19  		parent: ""
    20  		children: [ for k, v in B for _, w in v.children {k}]
    21  	}
    22  }
    23  
    24  // Issue #486
    25  Issue486: {
    26  	A: {
    27  		a: {
    28  			parent: ""
    29  			children: [...string]
    30  		}
    31  		b: {
    32  			parent: "a"
    33  			children: [...string]
    34  		}
    35  		c: {
    36  			parent: "b"
    37  			children: [...string]
    38  		}
    39  	}
    40  
    41  	A: [Name=string]: {
    42  		children: [
    43  			for k, v in A
    44  			if v.parent == Name {
    45  				k
    46  			},
    47  		]
    48  	}
    49  }
    50  -- out/eval --
    51  (struct){
    52    A: (struct){
    53      a: (struct){
    54        parent: (string){ "" }
    55        children: (#list){
    56        }
    57      }
    58      b: (struct){
    59        parent: (string){ "a" }
    60        children: (#list){
    61        }
    62      }
    63    }
    64    B: (struct){
    65      a: (struct){
    66        parent: (string){ "" }
    67        children: (_|_){
    68          // [cycle] cycle error:
    69          //     ./in.cue:19:41
    70        }
    71      }
    72    }
    73    Issue486: (struct){
    74      A: (struct){
    75        a: (struct){
    76          parent: (string){ "" }
    77          children: (#list){
    78            0: (string){ "b" }
    79          }
    80        }
    81        b: (struct){
    82          parent: (string){ "a" }
    83          children: (#list){
    84            0: (string){ "c" }
    85          }
    86        }
    87        c: (struct){
    88          parent: (string){ "b" }
    89          children: (#list){
    90          }
    91        }
    92      }
    93    }
    94  }
    95  -- out/compile --
    96  --- in.cue
    97  {
    98    A: {
    99      a: {
   100        parent: ""
   101        children: [
   102          for k, v in 〈3;A〉 if (〈0;v〉.parent == 〈0;k〉) {
   103            〈1;k〉
   104          },
   105        ]
   106      }
   107      b: {
   108        parent: "a"
   109        children: [
   110          for k, v in 〈3;A〉 if (〈0;v〉.parent == 〈0;k〉) {
   111            〈1;k〉
   112          },
   113        ]
   114      }
   115    }
   116    B: {
   117      a: {
   118        parent: ""
   119        children: [
   120          for k, v in 〈3;B〉 for _, w in 〈0;v〉.children {
   121            〈2;k〉
   122          },
   123        ]
   124      }
   125    }
   126    Issue486: {
   127      A: {
   128        a: {
   129          parent: ""
   130          children: [
   131            ...string,
   132          ]
   133        }
   134        b: {
   135          parent: "a"
   136          children: [
   137            ...string,
   138          ]
   139        }
   140        c: {
   141          parent: "b"
   142          children: [
   143            ...string,
   144          ]
   145        }
   146      }
   147      A: {
   148        [string]: {
   149          children: [
   150            for k, v in 〈3;A〉 if (〈0;v〉.parent == 〈3;-〉) {
   151              〈1;k〉
   152            },
   153          ]
   154        }
   155      }
   156    }
   157  }