code: func ProposedNewObject(schema *configschema.Block, prior, config cty.Value) cty.Value {
  	// If the config and prior are both null, return early here before
  	// populating the prior block. The prevents non-null blocks from appearing
  	// the proposed state value.
  	if config.IsNull() && prior.IsNull() {
  		return prior
  	}
  
  	if prior.IsNull() {
  		// In this case, we will construct a synthetic prior value that is
  		// similar to the result of decoding an empty configuration block,
  		// which simplifies our handling of the top-level attributes/blocks
  		// below by giving us one non-null level of object to pull values from.
  		prior = AllAttributesNull(schema)
  	}
  	return proposedNewObject(schema, prior, config)
  }
docs: // ProposedNewObject constructs a proposed new object value by combining the
  // computed attribute values from "prior" with the configured attribute values
  // from "config".
  //
  // Both value must conform to the given schema's implied type, or this function
  // will panic.
  //
  // The prior value must be wholly known, but the config value may be unknown
  // or have nested unknown values.
  //
  // The merging of the two objects includes the attributes of any nested blocks,
  // which will be correlated in a manner appropriate for their nesting mode.
  // Note in particular that the correlation for blocks backed by sets is a
  // heuristic based on matching non-computed attribute values and so it may
  // produce strange results with more "extreme" cases, such as a nested set
  // block where _all_ attributes are computed.