code: function setupCompoundStorage(node, binding) {
    if (binding.isCompound) {
      // Create compound storage map
      let storage = node.__dataCompoundStorage ||
        (node.__dataCompoundStorage = {});
      let parts = binding.parts;
      // Copy literals from parts into storage for this binding
      let literals = new Array(parts.length);
      for (let j=0; j<parts.length; j++) {
        literals[j] = parts[j].literal;
      }
      let target = binding.target;
      storage[target] = literals;
      // Configure properties with their literal parts
      if (binding.literal && binding.kind == 'property') {
        node[target] = binding.literal;
      }
    }
  }
docs: Initializes `__dataCompoundStorage` local storage on a bound node with
  initial literal data for compound bindings, and sets the joined
  literal parts to the bound property.
  
  When changes to compound parts occur, they are first set into the compound
  storage array for that property, and then the array is joined to result in
  the final value set to the property/attribute.
  
  @param {Node} node Bound node to initialize
  @param {Binding} binding Binding metadata
  @return {void}
  @private