cuelang.org/go@v0.13.0/cue/testdata/cycle/025_cannot_resolve_references_that_would_be_ambiguous.txtar (about)

     1  #name: cannot resolve references that would be ambiguous
     2  #evalFull
     3  -- in.cue --
     4  a1: *0 | 1
     5  a1: a3 - a2
     6  a2: *0 | 1
     7  a2: a3 - a1
     8  a3: 1
     9  
    10  b1: (*0 | 1) & b2
    11  b2: (0 | *1) & b1
    12  
    13  c1: (*{a: 1} | {b: 1}) & c2
    14  c2: (*{a: 2} | {b: 2}) & c1
    15  -- out/def --
    16  a1: (*0 | 1) & a3-a2
    17  a3: 1
    18  a2: (*0 | 1) & a3-a1
    19  b1: (*0 | 1) & b2
    20  b2: (0 | *1) & b1
    21  c1: (*{
    22  	a: 1
    23  } | {
    24  	b: 1
    25  }) & c2
    26  c2: (*{
    27  	a: 2
    28  } | {
    29  	b: 2
    30  }) & c1
    31  -- out/legacy-debug --
    32  <0>{a1: ((*0 | 1) & (<1>.a3 - <1>.a2)), a3: 1, a2: ((*0 | 1) & (<1>.a3 - <1>.a1)), b1: (0 | 1), b2: (0 | 1), c1: (<2>{a: 1, b: 2} | <3>{a: 2, b: 1}), c2: (<4>{a: 2, b: 1} | <5>{a: 1, b: 2})}
    33  -- out/compile --
    34  --- in.cue
    35  {
    36    a1: (*0|1)
    37    a1: (〈0;a3〉 - 〈0;a2〉)
    38    a2: (*0|1)
    39    a2: (〈0;a3〉 - 〈0;a1〉)
    40    a3: 1
    41    b1: ((*0|1) & 〈0;b2〉)
    42    b2: ((0|*1) & 〈0;b1〉)
    43    c1: ((*{
    44      a: 1
    45    }|{
    46      b: 1
    47    }) & 〈0;c2〉)
    48    c2: ((*{
    49      a: 2
    50    }|{
    51      b: 2
    52    }) & 〈0;c1〉)
    53  }
    54  -- out/eval/stats --
    55  Leaks:  0
    56  Freed:  52
    57  Reused: 43
    58  Allocs: 9
    59  Retain: 19
    60  
    61  Unifications: 24
    62  Conjuncts:    80
    63  Disjuncts:    52
    64  -- out/evalalpha --
    65  (struct){
    66    a1: (_|_){
    67      // [cycle] a1: cycle with field: a2:
    68      //     ./in.cue:2:10
    69      // a1: 2 errors in empty disjunction::
    70      //     ./in.cue:4:10
    71      // a2: unresolved disjunction: a1:
    72      //     ./in.cue:4:10
    73    }
    74    a2: (_|_){
    75      // [cycle] a1: cycle with field: a2:
    76      //     ./in.cue:2:10
    77      // a1: 2 errors in empty disjunction::
    78      //     ./in.cue:4:10
    79      // a2: unresolved disjunction: a1:
    80      //     ./in.cue:4:10
    81    }
    82    a3: (int){ 1 }
    83    b1: (int){ |((int){ 0 }, (int){ 1 }) }
    84    b2: (int){ |((int){ 0 }, (int){ 1 }) }
    85    c1: (struct){ |((struct){
    86        a: (int){ 1 }
    87        b: (int){ 2 }
    88      }, (struct){
    89        b: (int){ 1 }
    90        a: (int){ 2 }
    91      }) }
    92    c2: (struct){ |((struct){
    93        a: (int){ 2 }
    94        b: (int){ 1 }
    95      }, (struct){
    96        b: (int){ 2 }
    97        a: (int){ 1 }
    98      }) }
    99  }
   100  -- diff/-out/evalalpha<==>+out/eval --
   101  diff old new
   102  --- old
   103  +++ new
   104  @@ -1,9 +1,20 @@
   105   (struct){
   106     a1: (_|_){
   107  -    // [cycle] cycle error:
   108  -    //     ./in.cue:2:5
   109  -  }
   110  -  a2: (int){ 1 }
   111  +    // [cycle] a1: cycle with field: a2:
   112  +    //     ./in.cue:2:10
   113  +    // a1: 2 errors in empty disjunction::
   114  +    //     ./in.cue:4:10
   115  +    // a2: unresolved disjunction: a1:
   116  +    //     ./in.cue:4:10
   117  +  }
   118  +  a2: (_|_){
   119  +    // [cycle] a1: cycle with field: a2:
   120  +    //     ./in.cue:2:10
   121  +    // a1: 2 errors in empty disjunction::
   122  +    //     ./in.cue:4:10
   123  +    // a2: unresolved disjunction: a1:
   124  +    //     ./in.cue:4:10
   125  +  }
   126     a3: (int){ 1 }
   127     b1: (int){ |((int){ 0 }, (int){ 1 }) }
   128     b2: (int){ |((int){ 0 }, (int){ 1 }) }
   129  -- diff/explanation --
   130  a2: cyclic error reporting is now reported at both nodes on cycle, which is good.
   131  -- out/eval --
   132  (struct){
   133    a1: (_|_){
   134      // [cycle] cycle error:
   135      //     ./in.cue:2:5
   136    }
   137    a2: (int){ 1 }
   138    a3: (int){ 1 }
   139    b1: (int){ |((int){ 0 }, (int){ 1 }) }
   140    b2: (int){ |((int){ 0 }, (int){ 1 }) }
   141    c1: (struct){ |((struct){
   142        a: (int){ 1 }
   143        b: (int){ 2 }
   144      }, (struct){
   145        b: (int){ 1 }
   146        a: (int){ 2 }
   147      }) }
   148    c2: (struct){ |((struct){
   149        a: (int){ 2 }
   150        b: (int){ 1 }
   151      }, (struct){
   152        b: (int){ 2 }
   153        a: (int){ 1 }
   154      }) }
   155  }