-- 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 not allowed: x:
    ./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 not allowed: x:
      //     ./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: _
      }
    }
  }
}
