blob: 5dcaf0d4158a293447f73b64ee5b1c8d06b2de0a [file] [log] [blame]
Interaction between defaults, embedding and disjunctions.
// TODO: at the moment, using a default will select it.
-- in.cue --
x: {
// All of these resolve to *2 | 3
m1: (*1 | (*2 | 3)) & (>=2 & <=3)
m2: (*1 | (*2 | 3)) & (2 | 3)
m3: (*1 | *(*2 | 3)) & (2 | 3)
}
y1: x & {
{m4: x.m1+x.m2+x.m3}
}
y2: {
x
{m4: y2.m1+y2.m2+y2.m3}
}
Y=y3: {
x
{m4: Y.m1+Y.m2+Y.m3}
}
y4: x & {
{m4: y4.m1+y4.m2+y4.m3}
}
// Second disjunct in embedding is not possible because of previous declaration
// of `b`, so it should be resolved to {a: 1}.
b: (*"a" | "b") | "c"
{a: b} | {b: int}
-- out/eval --
(struct){
x: (struct){
m1: (int){ |(*(int){ 2 }, (int){ 3 }) }
m2: (int){ |(*(int){ 2 }, (int){ 3 }) }
m3: (int){ |(*(int){ 2 }, (int){ 3 }) }
}
y1: (struct){
m1: (int){ |(*(int){ 2 }, (int){ 3 }) }
m2: (int){ |(*(int){ 2 }, (int){ 3 }) }
m3: (int){ |(*(int){ 2 }, (int){ 3 }) }
m4: (int){ 6 }
}
y2: (struct){
m1: (int){ |(*(int){ 2 }, (int){ 3 }) }
m2: (int){ |(*(int){ 2 }, (int){ 3 }) }
m3: (int){ |(*(int){ 2 }, (int){ 3 }) }
m4: (int){ 6 }
}
y3: (struct){
m1: (int){ |(*(int){ 2 }, (int){ 3 }) }
m2: (int){ |(*(int){ 2 }, (int){ 3 }) }
m3: (int){ |(*(int){ 2 }, (int){ 3 }) }
m4: (int){ 6 }
}
y4: (struct){
m1: (int){ |(*(int){ 2 }, (int){ 3 }) }
m2: (int){ |(*(int){ 2 }, (int){ 3 }) }
m3: (int){ |(*(int){ 2 }, (int){ 3 }) }
m4: (int){ 6 }
}
b: (string){ |(*(string){ "a" }, (string){ "b" }, (string){ "c" }) }
a: (string){ |(*(string){ "a" }, (string){ "b" }, (string){ "c" }) }
}
-- out/compile --
--- in.cue
{
x: {
m1: ((*1|(*2|3)) & (>=2 & <=3))
m2: ((*1|(*2|3)) & (2|3))
m3: ((*1|*(*2|3)) & (2|3))
}
y1: (〈0;x & {
{
m4: ((〈2;x〉.m1 + 2;x〉.m2) + 2;x〉.m3)
}
})
y2: {
1;x
{
m4: ((〈2;y2〉.m1 + 2;y2〉.m2) + 2;y2〉.m3)
}
}
y3: {
1;x
{
m4: ((〈2;y3〉.m1 + 2;y3〉.m2) + 2;y3〉.m3)
}
}
y4: (〈0;x & {
{
m4: ((〈2;y4〉.m1 + 2;y4〉.m2) + 2;y4〉.m3)
}
})
b: ((*"a"|"b")|"c")
({
a: 1;b
}|{
b: int
})
}