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 }