code: function runComputedEffects(inst, changedProps, oldProps, hasPaths) {
    let computeEffects = inst[TYPES.COMPUTE];
    if (computeEffects) {
      let inputProps = changedProps;
      while (runEffects(inst, computeEffects, inputProps, oldProps, hasPaths)) {
        Object.assign(oldProps, inst.__dataOld);
        Object.assign(changedProps, inst.__dataPending);
        inputProps = inst.__dataPending;
        inst.__dataPending = null;
      }
    }
  }
docs: Runs "computed" effects for a set of changed properties.
  
  This method differs from the generic `runEffects` method in that it
  continues to run computed effects based on the output of each pass until
  there are no more newly computed properties.  This ensures that all
  properties that will be computed by the initial set of changes are
  computed before other effects (binding propagation, observers, and notify)
  run.
  
  @param {!PropertyEffectsType} inst The instance the effect will be run on
  @param {!Object} changedProps Bag of changed properties
  @param {!Object} oldProps Bag of previous values for changed properties
  @param {boolean} hasPaths True with `props` contains one or more paths
  @return {void}
  @private