diff options
-rw-r--r-- | lib/handlebars/compiler/compiler.js | 18 | ||||
-rw-r--r-- | lib/handlebars/vm.js | 3 |
2 files changed, 12 insertions, 9 deletions
diff --git a/lib/handlebars/compiler/compiler.js b/lib/handlebars/compiler/compiler.js index 75f852d..7739f9d 100644 --- a/lib/handlebars/compiler/compiler.js +++ b/lib/handlebars/compiler/compiler.js @@ -409,17 +409,19 @@ Handlebars.JavaScriptCompiler = function() {}; if(params.length === 4 && !this.environment.usePartial) { params.pop(); } - params.push(this.source.join("\n")); + var functionSource = 'function(' + params.join(',') + ') {\n ' + this.source.join("\n ") + '}'; - var fn = Function.apply(this, params); - fn.displayName = "Handlebars.js"; + Handlebars.log(Handlebars.logger.DEBUG, functionSource + "\n\n"); - Handlebars.log(Handlebars.logger.DEBUG, fn.toString() + "\n\n"); + var script = ['{\n fn: ', functionSource, ',\n children: [\n '], + children = this.environment.children; + for (var i = 0, len = children.length; i < len; i++) { + script.push(children[i]); + if (i < len-1) { script.push(',\n'); } + } + script.push('\n ]\n}'); - return { - fn: fn, - children: this.environment.children - }; + return script.join(''); }, appendContent: function(content) { diff --git a/lib/handlebars/vm.js b/lib/handlebars/vm.js index 782ef2e..4f251f6 100644 --- a/lib/handlebars/vm.js +++ b/lib/handlebars/vm.js @@ -69,7 +69,8 @@ Handlebars.VM = { compile: function(string, options) { var ast = Handlebars.parse(string); var environment = new Handlebars.Compiler().compile(ast, options); - var logic = new Handlebars.JavaScriptCompiler().compile(environment, options); + // Yes this is evil. Work in progress for the best way to handle runtime comp vs. cached comp. + var logic = eval('(' + new Handlebars.JavaScriptCompiler().compile(environment, options) + ')'); return Handlebars.VM.generateContainer(logic); }, invokePartial: function(partial, name, context, helpers, partials) { |