summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/handlebars/vm.js36
1 files changed, 26 insertions, 10 deletions
diff --git a/lib/handlebars/vm.js b/lib/handlebars/vm.js
index fe3e502..ecb67a4 100644
--- a/lib/handlebars/vm.js
+++ b/lib/handlebars/vm.js
@@ -1,8 +1,6 @@
var Handlebars = {};
Handlebars.parse = require("handlebars/compiler").Handlebars.parse;
-if(typeof puts === "undefined") { var puts = function() {}; };
-
// BEGIN(BROWSER)
Handlebars.Compiler = function() {};
Handlebars.JavaScriptCompiler = function() {};
@@ -252,8 +250,8 @@ Handlebars.JavaScriptCompiler = function() {};
this.compileChildren(environment);
- puts(environment.disassemble());
- puts("")
+ //puts(environment.disassemble());
+ //puts("")
var opcodes = environment.opcodes;
var opcode, name;
@@ -317,8 +315,8 @@ Handlebars.JavaScriptCompiler = function() {};
var fn = Function.apply(this, params);
fn.displayName = "Handlebars.js"
- puts(fn.toString())
- puts("")
+ //puts(fn.toString())
+ //puts("")
container.render = fn;
@@ -355,11 +353,19 @@ Handlebars.JavaScriptCompiler = function() {};
}
},
+ nameLookup: function(parent, name) {
+ if(JavaScriptCompiler.RESERVED_WORDS[name]) {
+ return parent + "['" + name + "']";
+ } else {
+ return parent + "." + name;
+ }
+ },
+
lookupWithFallback: function(name) {
if(name) {
- this.pushStack("currentContext." + name);
+ this.pushStack(this.nameLookup('currentContext', name));
var topStack = this.topStack();
- this.source.push("if(" + topStack + " == null) { " + topStack + " = helpers." + name + "; }");
+ this.source.push("if(" + topStack + " == null) { " + topStack + " = " + this.nameLookup('helpers', name) + "; }");
} else {
this.pushStack("currentContext");
}
@@ -367,7 +373,7 @@ Handlebars.JavaScriptCompiler = function() {};
lookup: function(name) {
var topStack = this.topStack();
- this.source.push(topStack + " = " + topStack + "." + name + ";");
+ this.source.push(topStack + " = " + this.nameLookup(topStack, name) + ";");
},
pushString: function(string) {
@@ -482,7 +488,7 @@ Handlebars.JavaScriptCompiler = function() {};
},
invokePartial: function(context) {
- this.pushStack("Handlebars.VM.invokePartial(partials." + context + ", '" + context + "', " + this.popStack() + ", helpers, partials);");
+ this.pushStack("Handlebars.VM.invokePartial(" + this.nameLookup('partials', context) + ", '" + context + "', " + this.popStack() + ", helpers, partials);");
},
escape: function() {
@@ -535,6 +541,16 @@ Handlebars.JavaScriptCompiler = function() {};
}
}
+ var reservedWords = ("break case catch continue default delete do else finally " +
+ "for function if in instanceof new return switch this throw " +
+ "try typeof var void while with null true false").split(" ");
+
+ compilerWords = JavaScriptCompiler.RESERVED_WORDS = {};
+
+ for(var i=0, l=reservedWords.length; i<l; i++) {
+ compilerWords[reservedWords[i]] = true;
+ }
+
})(Handlebars.Compiler, Handlebars.JavaScriptCompiler)
Handlebars.VM = {