Prevent context overwrite by replaceStack

Fixes #408.
This commit is contained in:
kpdecker
2013-01-13 22:35:03 -06:00
parent 4f54f62abc
commit 8961298859
2 changed files with 26 additions and 7 deletions
+14 -7
View File
@@ -886,21 +886,28 @@ Handlebars.JavaScriptCompiler = function() {};
},
pushStack: function(item) {
this.source.push(this.incrStack() + " = " + item + ";");
this.compileStack.push("stack" + this.stackSlot);
return "stack" + this.stackSlot;
var stack = this.incrStack();
this.source.push(stack + " = " + item + ";");
this.compileStack.push(stack);
return stack;
},
replaceStack: function(callback) {
var item = callback.call(this, this.topStack());
var stack = this.topStack(),
item = callback.call(this, stack);
this.source.push(this.topStack() + " = " + item + ";");
return "stack" + this.stackSlot;
// Prevent modification of the context depth variable. Through replaceStack
if (this.compileStack.length <= 1) {
stack = this.nextStack();
}
this.source.push(stack + " = " + item + ";");
return stack;
},
nextStack: function(skipCompileStack) {
var name = this.incrStack();
this.compileStack.push("stack" + this.stackSlot);
this.compileStack.push(name);
return name;
},