js/libs/ember-1.5.1.js
function evaluateUnboundHelper(context, fn, normalizedProperties, options) {
  var args = [],
   hash = options.hash,
   boundOptions = hash.boundOptions,
   types = slice.call(options.types, 1),
   loc,
   len,
   property,
   propertyType,
   boundOption;

  for (boundOption in boundOptions) {
    if (!boundOptions.hasOwnProperty(boundOption)) { continue; }
    hash[boundOption] = Ember.Handlebars.get(context, boundOptions[boundOption], options);
  }

  for(loc = 0, len = normalizedProperties.length; loc < len; ++loc) {
    property = normalizedProperties[loc];
    propertyType = types[loc];
    if(propertyType === "ID") {
      args.push(Ember.Handlebars.get(property.root, property.path, options));
    } else {
      args.push(property.path);
    }
  }
  args.push(options);
  return fn.apply(context, args);
}
function evaluateUnboundHelper(context, fn, normalizedProperties, options) {
  var args = [],
   hash = options.hash,
   boundOptions = hash.boundOptions,
   types = slice.call(options.types, 1),
   loc,
   len,
   property,
   propertyType,
   boundOption;

  for (boundOption in boundOptions) {
    if (!boundOptions.hasOwnProperty(boundOption)) { continue; }
    hash[boundOption] = Ember.Handlebars.get(context, boundOptions[boundOption], options);
  }

  for(loc = 0, len = normalizedProperties.length; loc < len; ++loc) {
    property = normalizedProperties[loc];
    propertyType = types[loc];
    if(propertyType === "ID") {
      args.push(Ember.Handlebars.get(property.root, property.path, options));
    } else {
      args.push(property.path);
    }
  }
  args.push(options);
  return fn.apply(context, args);
}
Renders the unbound form of an otherwise bound helper function.

@private
@method evaluateUnboundHelper
@param {Function} fn
@param {Object} context
@param {Array} normalizedProperties
@param {String} options