#name: closing with failed optional
#evalPartial
-- in.cue --
#k1: {a: int, b?: int} & #A // closed({a: int})

#k2: #A & {a: int, b?: int} // closed({a: int})

o1: {a?: 3} & {a?: 4} // {a?: _|_}

// Optional fields with error values can be elimintated when closing
#o2: {a?: 3} & {a?: 4} // close({})

#d1: {a?: 2, b: 4} | {a?: 3, c: 5}

v1: #d1 & {a?: 3, b: 4} // close({b: 4})

#A: {a: int}
-- out/def --
#k1: {
	a:  int
	b?: int
} & #A
#A: {
	a: int
}
#k2: #A & {
	a:  int
	b?: int
}
o1: {
	a?: _|_ // conflicting values 3 and 4
}

// Optional fields with error values can be elimintated when closing
#o2: {
	a?: _|_ // conflicting values 3 and 4
}
#d1: {
	a?: 2
	b:  4
} | {
	a?: 3
	c:  5
}
v1: #d1 & {
	a?: 3
	b:  4
}
-- out/export --
o1: {}
v1: {
	b: 4
}
-- out/yaml --
o1: {}
v1:
  b: 4
-- out/json --
{"o1":{},"v1":{"b":4}}
-- out/legacy-debug --
<0>{#k1: <1>C{a: int}, #A: <2>C{a: int}, #k2: <3>C{a: int}, o1: <4>{a?: _|_((3 & 4):conflicting values 3 and 4)}, #o2: <5>C{a?: _|_((3 & 4):conflicting values 3 and 4)}, #d1: (<6>C{a?: 2, b: 4} | <7>C{a?: 3, c: 5}), v1: <8>C{a?: _|_((2 & 3):conflicting values 2 and 3), b: 4}}
-- out/compile --
--- in.cue
{
  #k1: ({
    a: int
    b?: int
  } & 〈0;#A〉)
  #k2: (〈0;#A〉 & {
    a: int
    b?: int
  })
  o1: ({
    a?: 3
  } & {
    a?: 4
  })
  #o2: ({
    a?: 3
  } & {
    a?: 4
  })
  #d1: ({
    a?: 2
    b: 4
  }|{
    a?: 3
    c: 5
  })
  v1: (〈0;#d1〉 & {
    a?: 3
    b: 4
  })
  #A: {
    a: int
  }
}
-- out/eval/stats --
Leaks:  0
Freed:  28
Reused: 23
Allocs: 5
Retain: 1

Unifications: 24
Conjuncts:    43
Disjuncts:    29
-- out/evalalpha --
(struct){
  #k1: (#struct){
    a: (int){ int }
    b?: (_|_){
      // [eval] #k1.b: field not allowed:
      //     ./in.cue:1:15
    }
  }
  #k2: (#struct){
    a: (int){ int }
    b?: (_|_){
      // [eval] #k2.b: field not allowed:
      //     ./in.cue:3:20
    }
  }
  o1: (struct){
    a?: (_|_){
      // [eval] o1.a: conflicting values 4 and 3:
      //     ./in.cue:5:10
      //     ./in.cue:5:20
    }
  }
  #o2: (#struct){
    a?: (_|_){
      // [eval] #o2.a: conflicting values 4 and 3:
      //     ./in.cue:8:11
      //     ./in.cue:8:21
    }
  }
  #d1: (#struct){ |((#struct){
      a?: (int){ 2 }
      b: (int){ 4 }
    }, (#struct){
      a?: (int){ 3 }
      c: (int){ 5 }
    }) }
  v1: (#struct){
    a?: (_|_){
      // [eval] v1.a: conflicting values 2 and 3:
      //     ./in.cue:10:11
      //     ./in.cue:12:16
    }
    b: (int){ 4 }
  }
  #A: (#struct){
    a: (int){ int }
  }
}
-- diff/-out/evalalpha<==>+out/eval --
diff old new
--- old
+++ new
@@ -1,11 +1,17 @@
 (struct){
   #k1: (#struct){
     a: (int){ int }
-    b?: (int){ int }
+    b?: (_|_){
+      // [eval] #k1.b: field not allowed:
+      //     ./in.cue:1:15
+    }
   }
   #k2: (#struct){
     a: (int){ int }
-    b?: (int){ int }
+    b?: (_|_){
+      // [eval] #k2.b: field not allowed:
+      //     ./in.cue:3:20
+    }
   }
   o1: (struct){
     a?: (_|_){
@@ -32,7 +38,6 @@
     a?: (_|_){
       // [eval] v1.a: conflicting values 2 and 3:
       //     ./in.cue:10:11
-      //     ./in.cue:12:5
       //     ./in.cue:12:16
     }
     b: (int){ 4 }
-- diff/todo/p2 --
v1.a: Incorrect path in error message.
-- diff/todo/p3 --
Missing error position.
-- out/eval --
(struct){
  #k1: (#struct){
    a: (int){ int }
    b?: (int){ int }
  }
  #k2: (#struct){
    a: (int){ int }
    b?: (int){ int }
  }
  o1: (struct){
    a?: (_|_){
      // [eval] o1.a: conflicting values 4 and 3:
      //     ./in.cue:5:10
      //     ./in.cue:5:20
    }
  }
  #o2: (#struct){
    a?: (_|_){
      // [eval] #o2.a: conflicting values 4 and 3:
      //     ./in.cue:8:11
      //     ./in.cue:8:21
    }
  }
  #d1: (#struct){ |((#struct){
      a?: (int){ 2 }
      b: (int){ 4 }
    }, (#struct){
      a?: (int){ 3 }
      c: (int){ 5 }
    }) }
  v1: (#struct){
    a?: (_|_){
      // [eval] v1.a: conflicting values 2 and 3:
      //     ./in.cue:10:11
      //     ./in.cue:12:5
      //     ./in.cue:12:16
    }
    b: (int){ 4 }
  }
  #A: (#struct){
    a: (int){ int }
  }
}
