...
1// Issue ##739
2
3-- in.cue --
4import "strings"
5
6intEmbed: {
7 a1: {
8 2
9 }
10 a2: {
11 v: {
12 3
13 #foo: a2.v + 1
14 }
15 w: v
16 x: v.#foo
17 }
18 a3: a1 + a2.v
19}
20
21listEmbed: {
22 a1: {
23 2
24 }
25 b3: {
26 [1, 2]
27 #foo: 1
28 }
29 b4: b3 + b3
30 b5: b3[1]
31 b6: b3[5]
32 b7: b4[a1] // 1
33}
34
35stringEmbed: {
36 s1: {
37 "foo"
38 #bar: "bar"
39 }
40 s2: [ s1, {s1.#bar, #baz: 4}]
41 s3: strings.Join(s2, "--")
42}
43
44outPattern: {
45 sum: {
46 out: #a + #b
47 #a: int
48 #b: int
49 }
50 used: sum & {#a: 1, #b: 3}
51}
52
53arithmetic: {
54 sum: {
55 #a + #b
56 #a: int
57 #b: int
58 }
59 a1: (sum & {_, #a: 1, #b: 3}) + 2
60 a2: 2 + (sum & {_, #a: 1, #b: 3})
61 a3: 2 + (2 + (sum & {_, #a: 1, #b: 3}))
62}
63
64defCheck: {
65 a: {
66 #def: 1
67 }
68 b: a.#def
69}
70
71optionalExists: {
72 string | {
73 value?: string
74
75 if value != _|_ {
76 other: int
77 }
78 }
79}
80
81optionalCheck: {
82 thing: string | {
83 value?: string
84
85 if value != _|_ {
86 other: int
87 }
88 }
89
90 thing: {
91 value: "some string"
92 other: 3
93 }
94}
95
96hidden: {
97 issue794: {
98 _foo: "foo"
99 [_foo]
100 }
101}
102
103-- issue2113.cue --
104// In all these tests, embedded scalars should resolve without error.
105merged: t1: p1: {
106 #fn: { #in2: _, _ }
107 #fn: { #in2: c1: string, #in2.c1 }
108 x: #fn & {#in2: {c1: "V 1"}, _}
109}
110merged: t1: p2: {
111 #fn: { #in2: c1: string, #in2.c1 }
112 #fn: { #in2: _, _ }
113 x: #fn & {#in2: {c1: "V 1"}, _}
114}
115merged: t1: p3: {
116 x: #fn & {#in2: {c1: "V 1"}, _}
117 #fn: { #in2: c1: string, #in2.c1 }
118 #fn: { #in2: _, _ }
119}
120merged: t2: p1: {
121 #fn: { #in2: {}, _ }
122 #fn: { #in2: c1: string, #in2.c1 }
123 x: #fn & {#in2: {c1: "V 1"}, _}
124}
125merged: t2: p2: {
126 #fn: { #in2: c1: string, #in2.c1 }
127 #fn: { #in2: {}, _ }
128 x: #fn & {#in2: {c1: "V 1"}, _}
129}
130merged: t2: p3: {
131 x: #fn & {#in2: {c1: "V 1"}, _}
132 #fn: { #in2: c1: string, #in2.c1 }
133 #fn: { #in2: {}, _ }
134}
135
136-- issue2163.cue --
137selfRefInEmbed: t1: {
138 #Func: {
139 #in: _
140 _
141 }
142 #fn: #Func
143 #fn: {
144 #in: _
145
146 (#Func & {
147 _foo: #in
148 "buzz"
149 }) + "fiz"
150 }
151}
152
153-- out/eval/stats --
154Leaks: 11
155Freed: 121
156Reused: 114
157Allocs: 18
158Retain: 57
159
160Unifications: 128
161Conjuncts: 297
162Disjuncts: 164
163-- out/eval --
164Errors:
165listEmbed.b6: invalid list index 5 (out of bounds):
166 ./in.cue:28:9
167
168Result:
169(_|_){
170 // [eval]
171 intEmbed: (struct){
172 a1: (int){ 2 }
173 a2: (struct){
174 v: (int){
175 3
176 #foo: (int){ 4 }
177 }
178 w: (int){
179 3
180 #foo: (int){ 4 }
181 }
182 x: (int){ 4 }
183 }
184 a3: (int){ 5 }
185 }
186 listEmbed: (_|_){
187 // [eval]
188 a1: (int){ 2 }
189 b3: (#list){
190 #foo: (int){ 1 }
191 0: (int){ 1 }
192 1: (int){ 2 }
193 }
194 b4: (#list){
195 0: (int){ 1 }
196 1: (int){ 2 }
197 2: (int){ 1 }
198 3: (int){ 2 }
199 }
200 b5: (int){ 2 }
201 b6: (_|_){
202 // [eval] listEmbed.b6: invalid list index 5 (out of bounds):
203 // ./in.cue:28:9
204 }
205 b7: (int){ 1 }
206 }
207 stringEmbed: (struct){
208 s1: (string){
209 "foo"
210 #bar: (string){ "bar" }
211 }
212 s2: (#list){
213 0: (string){
214 "foo"
215 #bar: (string){ "bar" }
216 }
217 1: (string){
218 "bar"
219 #baz: (int){ 4 }
220 }
221 }
222 s3: (string){ "foo--bar" }
223 }
224 outPattern: (struct){
225 sum: (struct){
226 out: (_|_){
227 // [incomplete] outPattern.sum.out: non-concrete value int in operand to +:
228 // ./in.cue:43:8
229 // ./in.cue:44:8
230 }
231 #a: (int){ int }
232 #b: (int){ int }
233 }
234 used: (struct){
235 out: (int){ 4 }
236 #a: (int){ 1 }
237 #b: (int){ 3 }
238 }
239 }
240 arithmetic: (struct){
241 sum: (_|_){
242 // [incomplete] arithmetic.sum: non-concrete value int in operand to +:
243 // ./in.cue:52:3
244 // ./in.cue:53:7
245 #a: (int){ int }
246 #b: (int){ int }
247 }
248 a1: (int){ 6 }
249 a2: (int){ 6 }
250 a3: (int){ 8 }
251 }
252 defCheck: (struct){
253 a: (struct){
254 #def: (int){ 1 }
255 }
256 b: (int){ 1 }
257 }
258 optionalExists: ((string|struct)){ |((string){ string }, (struct){
259 value?: (string){ string }
260 }) }
261 optionalCheck: (struct){
262 thing: (struct){
263 value: (string){ "some string" }
264 other: (int){ 3 }
265 }
266 }
267 hidden: (struct){
268 issue794: (#list){
269 _foo: (string){ "foo" }
270 0: (string){ "foo" }
271 }
272 }
273 merged: (struct){
274 t1: (struct){
275 p1: (struct){
276 #fn: (string){
277 string
278 #in2: (#struct){
279 c1: (string){ string }
280 }
281 }
282 x: (string){
283 "V 1"
284 #in2: (#struct){
285 c1: (string){ "V 1" }
286 }
287 }
288 }
289 p2: (struct){
290 #fn: (string){
291 string
292 #in2: (#struct){
293 c1: (string){ string }
294 }
295 }
296 x: (string){
297 "V 1"
298 #in2: (#struct){
299 c1: (string){ "V 1" }
300 }
301 }
302 }
303 p3: (struct){
304 x: (string){
305 "V 1"
306 #in2: (#struct){
307 c1: (string){ "V 1" }
308 }
309 }
310 #fn: (string){
311 string
312 #in2: (#struct){
313 c1: (string){ string }
314 }
315 }
316 }
317 }
318 t2: (struct){
319 p1: (struct){
320 #fn: (string){
321 string
322 #in2: (#struct){
323 c1: (string){ string }
324 }
325 }
326 x: (string){
327 "V 1"
328 #in2: (#struct){
329 c1: (string){ "V 1" }
330 }
331 }
332 }
333 p2: (struct){
334 #fn: (string){
335 string
336 #in2: (#struct){
337 c1: (string){ string }
338 }
339 }
340 x: (string){
341 "V 1"
342 #in2: (#struct){
343 c1: (string){ "V 1" }
344 }
345 }
346 }
347 p3: (struct){
348 x: (string){
349 "V 1"
350 #in2: (#struct){
351 c1: (string){ "V 1" }
352 }
353 }
354 #fn: (string){
355 string
356 #in2: (#struct){
357 c1: (string){ string }
358 }
359 }
360 }
361 }
362 }
363 selfRefInEmbed: (struct){
364 t1: (struct){
365 #Func: (_){
366 _
367 #in: (_){ _ }
368 }
369 #fn: (string){
370 "buzzfiz"
371 #in: (_){ _ }
372 }
373 }
374 }
375}
376-- out/compile --
377--- in.cue
378{
379 intEmbed: {
380 a1: {
381 2
382 }
383 a2: {
384 v: {
385 3
386 #foo: (〈2;a2〉.v + 1)
387 }
388 w: 〈0;v〉
389 x: 〈0;v〉.#foo
390 }
391 a3: (〈0;a1〉 + 〈0;a2〉.v)
392 }
393 listEmbed: {
394 a1: {
395 2
396 }
397 b3: {
398 [
399 1,
400 2,
401 ]
402 #foo: 1
403 }
404 b4: (〈0;b3〉 + 〈0;b3〉)
405 b5: 〈0;b3〉[1]
406 b6: 〈0;b3〉[5]
407 b7: 〈0;b4〉[〈0;a1〉]
408 }
409 stringEmbed: {
410 s1: {
411 "foo"
412 #bar: "bar"
413 }
414 s2: [
415 〈1;s1〉,
416 {
417 〈2;s1〉.#bar
418 #baz: 4
419 },
420 ]
421 s3: 〈import;strings〉.Join(〈0;s2〉, "--")
422 }
423 outPattern: {
424 sum: {
425 out: (〈0;#a〉 + 〈0;#b〉)
426 #a: int
427 #b: int
428 }
429 used: (〈0;sum〉 & {
430 #a: 1
431 #b: 3
432 })
433 }
434 arithmetic: {
435 sum: {
436 (〈0;#a〉 + 〈0;#b〉)
437 #a: int
438 #b: int
439 }
440 a1: ((〈0;sum〉 & {
441 _
442 #a: 1
443 #b: 3
444 }) + 2)
445 a2: (2 + (〈0;sum〉 & {
446 _
447 #a: 1
448 #b: 3
449 }))
450 a3: (2 + (2 + (〈0;sum〉 & {
451 _
452 #a: 1
453 #b: 3
454 })))
455 }
456 defCheck: {
457 a: {
458 #def: 1
459 }
460 b: 〈0;a〉.#def
461 }
462 optionalExists: {
463 (string|{
464 value?: string
465 if (〈0;value〉 != _|_(explicit error (_|_ literal) in source)) {
466 other: int
467 }
468 })
469 }
470 optionalCheck: {
471 thing: (string|{
472 value?: string
473 if (〈0;value〉 != _|_(explicit error (_|_ literal) in source)) {
474 other: int
475 }
476 })
477 thing: {
478 value: "some string"
479 other: 3
480 }
481 }
482 hidden: {
483 issue794: {
484 _foo: "foo"
485 [
486 〈1;_foo〉,
487 ]
488 }
489 }
490}
491--- issue2113.cue
492{
493 merged: {
494 t1: {
495 p1: {
496 #fn: {
497 #in2: _
498 _
499 }
500 #fn: {
501 #in2: {
502 c1: string
503 }
504 〈0;#in2〉.c1
505 }
506 x: (〈0;#fn〉 & {
507 #in2: {
508 c1: "V 1"
509 }
510 _
511 })
512 }
513 }
514 }
515 merged: {
516 t1: {
517 p2: {
518 #fn: {
519 #in2: {
520 c1: string
521 }
522 〈0;#in2〉.c1
523 }
524 #fn: {
525 #in2: _
526 _
527 }
528 x: (〈0;#fn〉 & {
529 #in2: {
530 c1: "V 1"
531 }
532 _
533 })
534 }
535 }
536 }
537 merged: {
538 t1: {
539 p3: {
540 x: (〈0;#fn〉 & {
541 #in2: {
542 c1: "V 1"
543 }
544 _
545 })
546 #fn: {
547 #in2: {
548 c1: string
549 }
550 〈0;#in2〉.c1
551 }
552 #fn: {
553 #in2: _
554 _
555 }
556 }
557 }
558 }
559 merged: {
560 t2: {
561 p1: {
562 #fn: {
563 #in2: {}
564 _
565 }
566 #fn: {
567 #in2: {
568 c1: string
569 }
570 〈0;#in2〉.c1
571 }
572 x: (〈0;#fn〉 & {
573 #in2: {
574 c1: "V 1"
575 }
576 _
577 })
578 }
579 }
580 }
581 merged: {
582 t2: {
583 p2: {
584 #fn: {
585 #in2: {
586 c1: string
587 }
588 〈0;#in2〉.c1
589 }
590 #fn: {
591 #in2: {}
592 _
593 }
594 x: (〈0;#fn〉 & {
595 #in2: {
596 c1: "V 1"
597 }
598 _
599 })
600 }
601 }
602 }
603 merged: {
604 t2: {
605 p3: {
606 x: (〈0;#fn〉 & {
607 #in2: {
608 c1: "V 1"
609 }
610 _
611 })
612 #fn: {
613 #in2: {
614 c1: string
615 }
616 〈0;#in2〉.c1
617 }
618 #fn: {
619 #in2: {}
620 _
621 }
622 }
623 }
624 }
625}
626--- issue2163.cue
627{
628 selfRefInEmbed: {
629 t1: {
630 #Func: {
631 #in: _
632 _
633 }
634 #fn: 〈0;#Func〉
635 #fn: {
636 #in: _
637 ((〈1;#Func〉 & {
638 _foo: 〈1;#in〉
639 "buzz"
640 }) + "fiz")
641 }
642 }
643 }
644}
View as plain text