diff --git a/lib/handlebars/compiler/javascript-compiler.js b/lib/handlebars/compiler/javascript-compiler.js index 4b9db9293..4d950d461 100644 --- a/lib/handlebars/compiler/javascript-compiler.js +++ b/lib/handlebars/compiler/javascript-compiler.js @@ -377,11 +377,9 @@ JavaScriptCompiler.prototype = { // If the `value` is a lambda, replace it on the stack by // the return value of the lambda resolvePossibleLambda: function() { - this.aliases.functionType = '"function"'; + this.aliases.lambda = 'this.lambda'; - this.replaceStack(function(current) { - return "typeof " + current + " === functionType ? " + current + ".apply(depth0) : " + current; - }); + this.push('lambda(' + this.popStack() + ', depth0)'); }, // [lookup] diff --git a/lib/handlebars/runtime.js b/lib/handlebars/runtime.js index d43f465e3..b9fc77d7d 100644 --- a/lib/handlebars/runtime.js +++ b/lib/handlebars/runtime.js @@ -50,6 +50,10 @@ export function template(templateSpec, env) { // Just add water var container = { + lambda: function(current, context) { + return typeof current === 'function' ? current.call(context) : current; + }, + escapeExpression: Utils.escapeExpression, invokePartial: invokePartialWrapper,