cuelang.org/go@v0.10.1/cue/testdata/cycle/023_reentrance.txtar (about) 1 # DO NOT EDIT; generated by go run testdata/gen.go 2 # 3 #name: reentrance 4 #evalFull 5 -- in.cue -- 6 // This indirection is needed to avoid binding references to fib 7 // within fib to the instantiated version. 8 fibRec: {nn: int, out: (fib & {n: nn}).out} 9 fib: { 10 n: int 11 12 if n >= 2 { 13 out: (fibRec & {nn: n - 2}).out + (fibRec & {nn: n - 1}).out 14 } 15 if n < 2 { 16 out: n 17 } 18 } 19 fib1: (fib & {n: 1}).out // MAY NOT be an error 20 fib2: (fib & {n: 2}).out // MAY be an error 21 fib3: (fib & {n: 3}).out // SHOULD be an error 22 fib7: (fib & {n: 7}).out // Error 23 fib12: (fib & {n: 12}).out // Error 24 25 -- out/legacy-debug -- 26 <0>{fibRec: <1>{nn: int, out: (<2>.fib & <3>{n: <4>.nn}).out}, fib: <5>{n: int if (<6>.n >= 2) yield <7>{out: ((<2>.fibRec & <8>{nn: (<6>.n - 2)}).out + (<2>.fibRec & <9>{nn: (<6>.n - 1)}).out)}, if (<6>.n < 2) yield <10>{out: <6>.n}}, fib2: 1, fib7: 13, fib12: 144} 27 -- out/compile -- 28 --- in.cue 29 { 30 fibRec: { 31 nn: int 32 out: (〈1;fib〉 & { 33 n: 〈1;nn〉 34 }).out 35 } 36 fib: { 37 n: int 38 if (〈0;n〉 >= 2) { 39 out: ((〈2;fibRec〉 & { 40 nn: (〈2;n〉 - 2) 41 }).out + (〈2;fibRec〉 & { 42 nn: (〈2;n〉 - 1) 43 }).out) 44 } 45 if (〈0;n〉 < 2) { 46 out: 〈1;n〉 47 } 48 } 49 fib1: (〈0;fib〉 & { 50 n: 1 51 }).out 52 fib2: (〈0;fib〉 & { 53 n: 2 54 }).out 55 fib3: (〈0;fib〉 & { 56 n: 3 57 }).out 58 fib7: (〈0;fib〉 & { 59 n: 7 60 }).out 61 fib12: (〈0;fib〉 & { 62 n: 12 63 }).out 64 } 65 -- out/evalalpha/stats -- 66 Leaks: 70 67 Freed: 0 68 Reused: 0 69 Allocs: 70 70 Retain: 0 71 72 Unifications: 62 73 Conjuncts: 225 74 Disjuncts: 0 75 -- out/evalalpha -- 76 Errors: 77 structural cycle: 78 ./in.cue:3:25 79 80 Result: 81 (_|_){ 82 // [structural cycle] 83 fibRec: (struct){ 84 nn: (int){ int } 85 out: (_|_){ 86 // [incomplete] non-concrete value int in operand to >=: 87 // ./in.cue:7:5 88 // ./in.cue:3:35 89 // ./in.cue:5:5 90 } 91 } 92 fib: (_|_){ 93 // [incomplete] fib: non-concrete value int in operand to >=: 94 // ./in.cue:7:5 95 // ./in.cue:5:5 96 n: (int){ int } 97 } 98 fib1: (int){ 1 } 99 fib2: (_|_){ 100 // [structural cycle] structural cycle: 101 // ./in.cue:3:25 102 } 103 fib3: (_|_){ 104 // [structural cycle] structural cycle: 105 // ./in.cue:3:25 106 } 107 fib7: (_|_){ 108 // [structural cycle] structural cycle: 109 // ./in.cue:3:25 110 } 111 fib12: (_|_){ 112 // [structural cycle] structural cycle: 113 // ./in.cue:3:25 114 } 115 } 116 -- diff/-out/evalalpha/stats<==>+out/eval/stats -- 117 diff old new 118 --- old 119 +++ new 120 @@ -1,9 +1,9 @@ 121 -Leaks: 16 122 -Freed: 180 123 -Reused: 170 124 -Allocs: 26 125 -Retain: 148 126 +Leaks: 70 127 +Freed: 0 128 +Reused: 0 129 +Allocs: 70 130 +Retain: 0 131 132 -Unifications: 196 133 -Conjuncts: 464 134 -Disjuncts: 268 135 +Unifications: 62 136 +Conjuncts: 225 137 +Disjuncts: 0 138 -- diff/-out/evalalpha<==>+out/eval -- 139 diff old new 140 --- old 141 +++ new 142 @@ -1,10 +1,6 @@ 143 Errors: 144 structural cycle: 145 ./in.cue:3:25 146 -structural cycle: 147 - ./in.cue:8:9 148 -structural cycle: 149 - ./in.cue:8:38 150 151 Result: 152 (_|_){ 153 @@ -16,10 +12,6 @@ 154 // ./in.cue:7:5 155 // ./in.cue:3:35 156 // ./in.cue:5:5 157 - // non-concrete value int in operand to <: 158 - // ./in.cue:10:5 159 - // ./in.cue:3:35 160 - // ./in.cue:5:5 161 } 162 } 163 fib: (_|_){ 164 @@ -26,33 +18,23 @@ 165 // [incomplete] fib: non-concrete value int in operand to >=: 166 // ./in.cue:7:5 167 // ./in.cue:5:5 168 - // fib: non-concrete value int in operand to <: 169 - // ./in.cue:10:5 170 - // ./in.cue:5:5 171 n: (int){ int } 172 } 173 fib1: (int){ 1 } 174 - fib2: (int){ 1 } 175 + fib2: (_|_){ 176 + // [structural cycle] structural cycle: 177 + // ./in.cue:3:25 178 + } 179 fib3: (_|_){ 180 // [structural cycle] structural cycle: 181 // ./in.cue:3:25 182 - // structural cycle: 183 - // ./in.cue:8:38 184 } 185 fib7: (_|_){ 186 // [structural cycle] structural cycle: 187 // ./in.cue:3:25 188 - // structural cycle: 189 - // ./in.cue:8:9 190 - // structural cycle: 191 - // ./in.cue:8:38 192 } 193 fib12: (_|_){ 194 // [structural cycle] structural cycle: 195 // ./in.cue:3:25 196 - // structural cycle: 197 - // ./in.cue:8:9 198 - // structural cycle: 199 - // ./in.cue:8:38 200 } 201 } 202 -- diff/todo/p3 -- 203 Note that it is okay for fib2 to fail. 204 -- out/eval/stats -- 205 Leaks: 16 206 Freed: 180 207 Reused: 170 208 Allocs: 26 209 Retain: 148 210 211 Unifications: 196 212 Conjuncts: 464 213 Disjuncts: 268 214 -- out/eval -- 215 Errors: 216 structural cycle: 217 ./in.cue:3:25 218 structural cycle: 219 ./in.cue:8:9 220 structural cycle: 221 ./in.cue:8:38 222 223 Result: 224 (_|_){ 225 // [structural cycle] 226 fibRec: (struct){ 227 nn: (int){ int } 228 out: (_|_){ 229 // [incomplete] non-concrete value int in operand to >=: 230 // ./in.cue:7:5 231 // ./in.cue:3:35 232 // ./in.cue:5:5 233 // non-concrete value int in operand to <: 234 // ./in.cue:10:5 235 // ./in.cue:3:35 236 // ./in.cue:5:5 237 } 238 } 239 fib: (_|_){ 240 // [incomplete] fib: non-concrete value int in operand to >=: 241 // ./in.cue:7:5 242 // ./in.cue:5:5 243 // fib: non-concrete value int in operand to <: 244 // ./in.cue:10:5 245 // ./in.cue:5:5 246 n: (int){ int } 247 } 248 fib1: (int){ 1 } 249 fib2: (int){ 1 } 250 fib3: (_|_){ 251 // [structural cycle] structural cycle: 252 // ./in.cue:3:25 253 // structural cycle: 254 // ./in.cue:8:38 255 } 256 fib7: (_|_){ 257 // [structural cycle] structural cycle: 258 // ./in.cue:3:25 259 // structural cycle: 260 // ./in.cue:8:9 261 // structural cycle: 262 // ./in.cue:8:38 263 } 264 fib12: (_|_){ 265 // [structural cycle] structural cycle: 266 // ./in.cue:3:25 267 // structural cycle: 268 // ./in.cue:8:9 269 // structural cycle: 270 // ./in.cue:8:38 271 } 272 } 273 -- diff/todo/p2 -- 274 Elimination of unnecessary, but potentially useful, errors.