Phase 1 of precompiled extraction:
Separate template logic from container construction.
This commit is contained in:
@@ -345,7 +345,7 @@ Handlebars.JavaScriptCompiler = function() {};
|
||||
}
|
||||
}
|
||||
|
||||
return this.createFunction();
|
||||
return this.createFunctionContext();
|
||||
},
|
||||
|
||||
nextOpcode: function(n) {
|
||||
@@ -388,25 +388,7 @@ Handlebars.JavaScriptCompiler = function() {};
|
||||
this.source = out;
|
||||
},
|
||||
|
||||
createFunction: function() {
|
||||
var container = {
|
||||
escapeExpression: Handlebars.Utils.escapeExpression,
|
||||
invokePartial: Handlebars.VM.invokePartial,
|
||||
programs: [],
|
||||
program: function(i, helpers, partials, data) {
|
||||
var programWrapper = this.programs[i];
|
||||
if(data) {
|
||||
return Handlebars.VM.program(this.children[i], helpers, partials, data);
|
||||
} else if(programWrapper) {
|
||||
return programWrapper;
|
||||
} else {
|
||||
programWrapper = this.programs[i] = Handlebars.VM.program(this.children[i], helpers, partials);
|
||||
return programWrapper;
|
||||
}
|
||||
},
|
||||
programWithDepth: Handlebars.VM.programWithDepth,
|
||||
noop: Handlebars.VM.noop
|
||||
};
|
||||
createFunctionContext: function() {
|
||||
var locals = this.stackVars.concat(this.registers.list);
|
||||
|
||||
if(locals.length > 0) {
|
||||
@@ -434,16 +416,9 @@ Handlebars.JavaScriptCompiler = function() {};
|
||||
|
||||
Handlebars.log(Handlebars.logger.DEBUG, fn.toString() + "\n\n");
|
||||
|
||||
container.render = fn;
|
||||
|
||||
container.children = this.environment.children;
|
||||
|
||||
return function(context, options, $depth) {
|
||||
options = options || {};
|
||||
var args = [Handlebars, context, options.helpers, options.partials, options.data];
|
||||
var depth = Array.prototype.slice.call(arguments, 2);
|
||||
args = args.concat(depth);
|
||||
return container.render.apply(container, args);
|
||||
return {
|
||||
fn: fn,
|
||||
children: this.environment.children
|
||||
};
|
||||
},
|
||||
|
||||
|
||||
Reference in New Issue
Block a user