-- in.cue --
a: close({
    a: b: int
})

b: a & { x: int } // err
c: a & { a: c: int } // okay (non-recursive close)

inDisjunctions: {
    x: [string]: #Def
    #Def: [string]: {
        a: b: true
        let X = a
        close({uint: a: b: X.b}) | close({string: a: b: true})
    }
    x: socket: string: {}
    x: syslog: x.socket
    x: syslog: xxx: {}
}

issue642: {
    test: close({
        a: _
        b: x: _
    } & {
        [string]: y: _
    })

    test: a: x: _
    test: b: x: _
}

// Issue 642
withSubfields: {
    test: close({
        a: _
        b: x: _
        [string]: y: _
    })

    test: a: x: _
    test: b: x: _
}

-- out/eval --
Errors:
b: field x not allowed:
    ./in.cue:1:10
    ./in.cue:5:4
    ./in.cue:5:10

Result:
(_|_){
  // [eval]
  a: (#struct){
    a: (struct){
      b: (int){ int }
    }
  }
  b: (_|_){
    // [eval]
    a: (struct){
      b: (int){ int }
    }
    x: (_|_){
      // [eval] b: field x not allowed:
      //     ./in.cue:1:10
      //     ./in.cue:5:4
      //     ./in.cue:5:10
    }
  }
  c: (#struct){
    a: (struct){
      b: (int){ int }
      c: (int){ int }
    }
  }
  inDisjunctions: (struct){
    x: (struct){
      socket: (#struct){
        string: (struct){ |((#struct){
            a: (#struct){
              b: (bool){ true }
            }
            uint: (#struct){
              a: (#struct){
                b: (bool){ true }
              }
            }
          }, (#struct){
            a: (#struct){
              b: (bool){ true }
            }
            string: (#struct){
              a: (#struct){
                b: (bool){ true }
              }
            }
          }) }
      }
      syslog: (#struct){
        string: (struct){ |((#struct){
            a: (#struct){
              b: (bool){ true }
            }
            uint: (#struct){
              a: (#struct){
                b: (bool){ true }
              }
            }
          }, (#struct){
            a: (#struct){
              b: (bool){ true }
            }
            string: (#struct){
              a: (#struct){
                b: (bool){ true }
              }
            }
          }) }
        xxx: (struct){ |((#struct){
            a: (#struct){
              b: (bool){ true }
            }
            uint: (#struct){
              a: (#struct){
                b: (bool){ true }
              }
            }
          }, (#struct){
            a: (#struct){
              b: (bool){ true }
            }
            string: (#struct){
              a: (#struct){
                b: (bool){ true }
              }
            }
          }) }
      }
    }
    #Def: (#struct){
    }
  }
  issue642: (struct){
    test: (#struct){
      a: (struct){
        y: (_){ _ }
        x: (_){ _ }
      }
      b: (struct){
        x: (_){ _ }
        y: (_){ _ }
      }
    }
  }
  withSubfields: (struct){
    test: (#struct){
      a: (struct){
        y: (_){ _ }
        x: (_){ _ }
      }
      b: (struct){
        x: (_){ _ }
        y: (_){ _ }
      }
    }
  }
}
-- out/compile --
--- in.cue
{
  a: close({
    a: {
      b: int
    }
  })
  b: (〈0;a〉 & {
    x: int
  })
  c: (〈0;a〉 & {
    a: {
      c: int
    }
  })
  inDisjunctions: {
    x: {
      [string]: 〈1;#Def〉
    }
    #Def: {
      [string]: {
        a: {
          b: true
        }
        (close({
          uint: {
            a: {
              b: 〈3;let X〉.b
            }
          }
        })|close({
          string: {
            a: {
              b: true
            }
          }
        }))
      }
    }
    x: {
      socket: {
        string: {}
      }
    }
    x: {
      syslog: 〈1;x〉.socket
    }
    x: {
      syslog: {
        xxx: {}
      }
    }
  }
  issue642: {
    test: close(({
      a: _
      b: {
        x: _
      }
    } & {
      [string]: {
        y: _
      }
    }))
    test: {
      a: {
        x: _
      }
    }
    test: {
      b: {
        x: _
      }
    }
  }
  withSubfields: {
    test: close({
      a: _
      b: {
        x: _
      }
      [string]: {
        y: _
      }
    })
    test: {
      a: {
        x: _
      }
    }
    test: {
      b: {
        x: _
      }
    }
  }
}
