code: function prepare(oInfo, i) {
  			var fnFormatter = oInfo.formatter,
  				oModel,
  				sModelName = oInfo.model;
  
  			if (oInfo.path && oInfo.path.indexOf(">") > 0) {
  				sModelName = oInfo.path.slice(0, oInfo.path.indexOf(">"));
  			}
  			oModel = oWithControl.getModel(sModelName);
  
  			if (fnFormatter && fnFormatter.requiresIContext === true) {
  				fnFormatter = oInfo.formatter
  					= fnFormatter.bind(null, createContextInterface(oWithControl, mSettings, i));
  			}
  			// wrap formatter only if there is a formatter and async is allowed and either
  			// - we use $$valueAsPromise ourselves, or
  			// - we are top-level and at least one child has used $$valueAsPromise
  			if (fnFormatter && bAsync
  					&& (oModel && oModel.$$valueAsPromise || i === undefined && bValueAsPromise)) {
  				oInfo.formatter = function () {
  					var that = this;
  					return SyncPromise.all(arguments).then(function (aArguments) {
  						return fnFormatter.apply(that, aArguments);
  					});
  				};
  				oInfo.formatter.textFragments = fnFormatter.textFragments;
  			}
  			oInfo.mode = BindingMode.OneTime;
  			oInfo.parameters = oInfo.parameters || {};
  			oInfo.parameters.scope = oScope;
  			if (bAsync && oModel && oModel.$$valueAsPromise) { // opt-in to async behavior
  				bValueAsPromise = oInfo.parameters.$$valueAsPromise = true;
  			}
  		}
docs: /*
  Prepares the given binding info or part of it; makes it "one time" and binds its
  formatter function (if opted in) to an interface object.
  
  @param {object} oInfo
  a binding info or a part of it
  @param {number} i
  index of binding info's part (if applicable)