function populateObject_(jsonObj, obj) {
  // Repopulate objects.
  var props = jsonObj['props'];
  if (props) {
    var nonConfigurable = jsonObj['nonConfigurable'] || [];
    var nonEnumerable = jsonObj['nonEnumerable'] || [];
    var nonWritable = jsonObj['nonWritable'] || [];
    var getter = jsonObj['getter'] || [];
    var setter = jsonObj['setter'] || [];
    var names = Object.getOwnPropertyNames(props);
    for (var j = 0; j < names.length; j++) {
      var name = names[j];
      var descriptor = {
        configurable: nonConfigurable.indexOf(name) === -1,
        enumerable: nonEnumerable.indexOf(name) === -1,
      };
      var hasGetter = getter.indexOf(name) !== -1;
      var hasSetter = setter.indexOf(name) !== -1;
      if (hasGetter || hasSetter) {
        if (hasGetter) {
          descriptor.get = interpreter.setProperty.placeholderGet_;
        }
        if (hasSetter) {
          descriptor.set = interpreter.setProperty.placeholderSet_;
        }
      } else {
        descriptor.value = decodeValue_(props[name]);
        descriptor.writable = nonWritable.indexOf(name) === -1;
      }
      Object.defineProperty(obj, name, descriptor);
    }
  }
  // Repopulate arrays.
  if (Array.isArray(obj)) {
    var data = jsonObj['data'];
    if (data) {
      for (var j = 0; j < data.length; j++) {
        obj.push(decodeValue_(data[j]));
      }
    }
  }
}
Repopulate an object's or array's properties based on th JSON description.
@param {!Object} jsonObj JSON object describing property contents.
@param {!Object} obj Object to set properties on.
@private