cuelang.org/go@v0.13.0/cue/testdata/references/labels.txtar (about) 1 -- in.cue -- 2 // Label aliases 3 4 // direct 5 a: [X=string]: X 6 a: bar: _ 7 8 // in struct 9 b: [X=string]: {X} 10 b: bar: _ 11 12 // in structs 13 c: [X=string]: X 14 c: [Y=string]: {{{Y}}} 15 c: bar: _ 16 17 // in sub field 18 d: [X=string]: name: X 19 d: bar: {} 20 21 // nested 22 e: [X=string]: [Y=string]: X + Y 23 e: foo: bar: _ 24 25 patternField: t1: { 26 r=[string]: {b: r | null} 27 a: {r: 0} 28 } 29 30 patternField: t2: { 31 a: {r: 0} 32 x=[string]: {z: 1, b: x.z} 33 } 34 35 // Field aliases 36 37 bar: 3 38 f1: C="foo\(bar)": { 39 name: "xx" 40 foo: C.name 41 } 42 43 // nested 44 f1: D="foo\(bar)": E="foo\(bar)baz": { 45 name: "xx" 46 a: D["foo\(bar)baz"].name 47 b: E.name 48 } 49 50 // Combo 51 52 c1: C="foo\(bar)": [D=string]: { 53 name: D 54 foo: C.x.name 55 } 56 c1: foo3: x: _ 57 58 emptyLabel: { 59 "": 1 60 a: emptyLabel[""] 61 } 62 63 underscore: a: { 64 // Issue #1454 65 foo: #Foo 66 foo: "_": "bar" 67 #Foo: [=~""]: string 68 } 69 70 underscore: c: { 71 foo: "_": "any" 72 foo: [=~""]: string 73 } 74 75 underscore: d: { 76 bar: "_": "any" 77 #bar: [string]: string 78 bar: #bar 79 } 80 81 underscore: e: { 82 baz: "_h": "any" 83 #baz: [=~"_"]: string 84 baz: #baz 85 } 86 87 // TODO: support. Also not yet supported in old implementation. 88 // c10: { 89 // C=[string]: { 90 // name: "x" 91 // foo: C.name 92 // } 93 // } 94 // c2: c1 & { x: _ } 95 96 invalidPattern: { 97 [=~"BAD)" & =~"x"]: string 98 y: 123 99 } 100 -- out/eval/stats -- 101 Leaks: 1 102 Freed: 61 103 Reused: 56 104 Allocs: 6 105 Retain: 4 106 107 Unifications: 60 108 Conjuncts: 109 109 Disjuncts: 65 110 -- out/evalalpha -- 111 Errors: 112 invalidPattern: invalid regexp: error parsing regexp: unexpected ): `BAD)`: 113 ./in.cue:96:22 114 115 Result: 116 (_|_){ 117 // [eval] 118 a: (struct){ 119 bar: (string){ "bar" } 120 } 121 b: (struct){ 122 bar: (string){ "bar" } 123 } 124 c: (struct){ 125 bar: (string){ "bar" } 126 } 127 d: (struct){ 128 bar: (struct){ 129 name: (string){ "bar" } 130 } 131 } 132 e: (struct){ 133 foo: (struct){ 134 bar: (string){ "foobar" } 135 } 136 } 137 patternField: (struct){ 138 t1: (struct){ 139 a: (struct){ 140 r: (int){ 0 } 141 b: (null){ null } 142 } 143 } 144 t2: (struct){ 145 a: (struct){ 146 r: (int){ 0 } 147 z: (int){ 1 } 148 b: (int){ 1 } 149 } 150 } 151 } 152 bar: (int){ 3 } 153 f1: (struct){ 154 foo3: (struct){ 155 name: (string){ "xx" } 156 foo: (string){ "xx" } 157 foo3baz: (struct){ 158 name: (string){ "xx" } 159 a: (string){ "xx" } 160 b: (string){ "xx" } 161 } 162 } 163 } 164 c1: (struct){ 165 foo3: (struct){ 166 x: (struct){ 167 name: (string){ "x" } 168 foo: (string){ "x" } 169 } 170 } 171 } 172 emptyLabel: (struct){ 173 "": (int){ 1 } 174 a: (int){ 1 } 175 } 176 underscore: (struct){ 177 a: (struct){ 178 foo: (#struct){ 179 "_": (string){ "bar" } 180 } 181 #Foo: (#struct){ 182 } 183 } 184 c: (struct){ 185 foo: (struct){ 186 "_": (string){ "any" } 187 } 188 } 189 d: (struct){ 190 bar: (#struct){ 191 "_": (string){ "any" } 192 } 193 #bar: (#struct){ 194 } 195 } 196 e: (struct){ 197 baz: (#struct){ 198 "_h": (string){ "any" } 199 } 200 #baz: (#struct){ 201 } 202 } 203 } 204 invalidPattern: (_|_){ 205 // [eval] invalidPattern: invalid regexp: error parsing regexp: unexpected ): `BAD)`: 206 // ./in.cue:96:22 207 y: (int){ 123 } 208 } 209 } 210 -- diff/explanation -- 211 The new evaluator correctly points out that the pattern matching regular expression has invalid syntax. 212 -- diff/-out/evalalpha<==>+out/eval -- 213 diff old new 214 --- old 215 +++ new 216 @@ -1,4 +1,10 @@ 217 -(struct){ 218 +Errors: 219 +invalidPattern: invalid regexp: error parsing regexp: unexpected ): `BAD)`: 220 + ./in.cue:96:22 221 + 222 +Result: 223 +(_|_){ 224 + // [eval] 225 a: (struct){ 226 bar: (string){ "bar" } 227 } 228 @@ -85,7 +91,9 @@ 229 } 230 } 231 } 232 - invalidPattern: (struct){ 233 + invalidPattern: (_|_){ 234 + // [eval] invalidPattern: invalid regexp: error parsing regexp: unexpected ): `BAD)`: 235 + // ./in.cue:96:22 236 y: (int){ 123 } 237 } 238 } 239 -- out/eval -- 240 (struct){ 241 a: (struct){ 242 bar: (string){ "bar" } 243 } 244 b: (struct){ 245 bar: (string){ "bar" } 246 } 247 c: (struct){ 248 bar: (string){ "bar" } 249 } 250 d: (struct){ 251 bar: (struct){ 252 name: (string){ "bar" } 253 } 254 } 255 e: (struct){ 256 foo: (struct){ 257 bar: (string){ "foobar" } 258 } 259 } 260 patternField: (struct){ 261 t1: (struct){ 262 a: (struct){ 263 r: (int){ 0 } 264 b: (null){ null } 265 } 266 } 267 t2: (struct){ 268 a: (struct){ 269 r: (int){ 0 } 270 z: (int){ 1 } 271 b: (int){ 1 } 272 } 273 } 274 } 275 bar: (int){ 3 } 276 f1: (struct){ 277 foo3: (struct){ 278 name: (string){ "xx" } 279 foo: (string){ "xx" } 280 foo3baz: (struct){ 281 name: (string){ "xx" } 282 a: (string){ "xx" } 283 b: (string){ "xx" } 284 } 285 } 286 } 287 c1: (struct){ 288 foo3: (struct){ 289 x: (struct){ 290 name: (string){ "x" } 291 foo: (string){ "x" } 292 } 293 } 294 } 295 emptyLabel: (struct){ 296 "": (int){ 1 } 297 a: (int){ 1 } 298 } 299 underscore: (struct){ 300 a: (struct){ 301 foo: (#struct){ 302 "_": (string){ "bar" } 303 } 304 #Foo: (#struct){ 305 } 306 } 307 c: (struct){ 308 foo: (struct){ 309 "_": (string){ "any" } 310 } 311 } 312 d: (struct){ 313 bar: (#struct){ 314 "_": (string){ "any" } 315 } 316 #bar: (#struct){ 317 } 318 } 319 e: (struct){ 320 baz: (#struct){ 321 "_h": (string){ "any" } 322 } 323 #baz: (#struct){ 324 } 325 } 326 } 327 invalidPattern: (struct){ 328 y: (int){ 123 } 329 } 330 } 331 -- out/compile -- 332 --- in.cue 333 { 334 a: { 335 [string]: 〈0;-〉 336 } 337 a: { 338 bar: _ 339 } 340 b: { 341 [string]: { 342 〈1;-〉 343 } 344 } 345 b: { 346 bar: _ 347 } 348 c: { 349 [string]: 〈0;-〉 350 } 351 c: { 352 [string]: { 353 { 354 { 355 〈3;-〉 356 } 357 } 358 } 359 } 360 c: { 361 bar: _ 362 } 363 d: { 364 [string]: { 365 name: 〈1;-〉 366 } 367 } 368 d: { 369 bar: {} 370 } 371 e: { 372 [string]: { 373 [string]: (〈1;-〉 + 〈0;-〉) 374 } 375 } 376 e: { 377 foo: { 378 bar: _ 379 } 380 } 381 patternField: { 382 t1: { 383 [string]: { 384 b: (〈1;(〈0;-〉)〉|null) 385 } 386 a: { 387 r: 0 388 } 389 } 390 } 391 patternField: { 392 t2: { 393 a: { 394 r: 0 395 } 396 [string]: { 397 z: 1 398 b: 〈1;(〈0;-〉)〉.z 399 } 400 } 401 } 402 bar: 3 403 f1: { 404 "foo\(〈1;bar〉)": { 405 name: "xx" 406 foo: 〈1;("foo\(〈1;bar〉)")〉.name 407 } 408 } 409 f1: { 410 "foo\(〈1;bar〉)": { 411 "foo\(〈2;bar〉)baz": { 412 name: "xx" 413 a: 〈2;("foo\(〈1;bar〉)")〉["foo\(〈3;bar〉)baz"].name 414 b: 〈1;("foo\(〈2;bar〉)baz")〉.name 415 } 416 } 417 } 418 c1: { 419 "foo\(〈1;bar〉)": { 420 [string]: { 421 name: 〈1;-〉 422 foo: 〈2;("foo\(〈1;bar〉)")〉.x.name 423 } 424 } 425 } 426 c1: { 427 foo3: { 428 x: _ 429 } 430 } 431 emptyLabel: { 432 "": 1 433 a: 〈1;emptyLabel〉[""] 434 } 435 underscore: { 436 a: { 437 foo: 〈0;#Foo〉 438 foo: { 439 "_": "bar" 440 } 441 #Foo: { 442 [=~""]: string 443 } 444 } 445 } 446 underscore: { 447 c: { 448 foo: { 449 "_": "any" 450 } 451 foo: { 452 [=~""]: string 453 } 454 } 455 } 456 underscore: { 457 d: { 458 bar: { 459 "_": "any" 460 } 461 #bar: { 462 [string]: string 463 } 464 bar: 〈0;#bar〉 465 } 466 } 467 underscore: { 468 e: { 469 baz: { 470 "_h": "any" 471 } 472 #baz: { 473 [=~"_"]: string 474 } 475 baz: 〈0;#baz〉 476 } 477 } 478 invalidPattern: { 479 [(=~"BAD)" & =~"x")]: string 480 y: 123 481 } 482 }