Update literal ast nodes for new spec

This commit is contained in:
kpdecker
2014-11-26 19:22:09 -06:00
parent 2a4819d75c
commit 697bbe59ca
7 changed files with 41 additions and 43 deletions
+6 -9
View File
@@ -142,25 +142,22 @@ var AST = {
StringNode: function(string, locInfo) {
this.loc = locInfo;
this.type = "STRING";
this.type = 'StringLiteral';
this.original =
this.string =
this.stringModeValue = string;
this.value = string;
},
NumberNode: function(number, locInfo) {
this.loc = locInfo;
this.type = "NUMBER";
this.type = 'NumberLiteral';
this.original =
this.number = number;
this.stringModeValue = Number(number);
this.value = Number(number);
},
BooleanNode: function(bool, locInfo) {
this.loc = locInfo;
this.type = "BOOLEAN";
this.bool = bool;
this.stringModeValue = bool === "true";
this.type = 'BooleanLiteral';
this.value = bool === 'true';
}
};
+1 -1
View File
@@ -99,7 +99,7 @@ CodeGen.prototype = {
},
quotedString: function(str) {
return '"' + str
return '"' + (str + '')
.replace(/\\/g, '\\\\')
.replace(/"/g, '\\"')
.replace(/\n/g, '\\n')
+7 -7
View File
@@ -283,16 +283,16 @@ Compiler.prototype = {
this.opcode('lookupData', data, data.id.depth, data.id.parts);
},
STRING: function(string) {
this.opcode('pushString', string, string.string);
StringLiteral: function(string) {
this.opcode('pushString', string, string.value);
},
NUMBER: function(number) {
this.opcode('pushLiteral', number, number.number);
NumberLiteral: function(number) {
this.opcode('pushLiteral', number, number.value);
},
BOOLEAN: function(bool) {
this.opcode('pushLiteral', bool, bool.bool);
BooleanLiteral: function(bool) {
this.opcode('pushLiteral', bool, bool.value);
},
// HELPERS
@@ -338,7 +338,7 @@ Compiler.prototype = {
},
pushParam: function(val) {
var stringModeValue = val.stringModeValue != null ? val.stringModeValue : '';
var stringModeValue = val.stringModeValue || (val.value != null ? val.value : '');
if (this.stringParams) {
if(val.depth) {
+6 -6
View File
@@ -120,16 +120,16 @@ PrintVisitor.prototype.hash = function(hash) {
return "HASH{" + joinedPairs.join(", ") + "}";
};
PrintVisitor.prototype.STRING = function(string) {
return '"' + string.string + '"';
PrintVisitor.prototype.StringLiteral = function(string) {
return '"' + string.value + '"';
};
PrintVisitor.prototype.NUMBER = function(number) {
return "NUMBER{" + number.number + "}";
PrintVisitor.prototype.NumberLiteral = function(number) {
return "NUMBER{" + number.value + "}";
};
PrintVisitor.prototype.BOOLEAN = function(bool) {
return "BOOLEAN{" + bool.bool + "}";
PrintVisitor.prototype.BooleanLiteral = function(bool) {
return "BOOLEAN{" + bool.value + "}";
};
PrintVisitor.prototype.ID = function(id) {
+3 -3
View File
@@ -57,9 +57,9 @@ Visitor.prototype = {
this.accept(data.id);
},
STRING: function(string) {},
NUMBER: function(number) {},
BOOLEAN: function(bool) {},
StringLiteral: function(string) {},
NumberLiteral: function(number) {},
BooleanLiteral: function(bool) {},
ID: function(id) {}
};
+12 -11
View File
@@ -1,3 +1,4 @@
/*global CompilerContext */
describe('string params mode', function() {
it("arguments to helpers can be retrieved from options hash in string form", function() {
var template = CompilerContext.compile('{{wycats is.a slave.driver}}', {stringParams: true});
@@ -56,9 +57,9 @@ describe('string params mode', function() {
var helpers = {
tomdale: function(desire, noun, trueBool, falseBool, options) {
equal(options.types[0], 'STRING', "the string type is passed");
equal(options.types[0], 'StringLiteral', "the string type is passed");
equal(options.types[1], 'ID', "the expression type is passed");
equal(options.types[2], 'BOOLEAN', "the expression type is passed");
equal(options.types[2], 'BooleanLiteral', "the expression type is passed");
equal(desire, "need", "the string form is passed for strings");
equal(noun, "dad.joke", "the string form is passed for expressions");
equal(trueBool, true, "raw booleans are passed through");
@@ -76,21 +77,21 @@ describe('string params mode', function() {
var helpers = {
tomdale: function(exclamation, options) {
equal(exclamation, "he.says");
equal(options.types[0], "ID");
equal(exclamation, 'he.says');
equal(options.types[0], 'ID');
equal(options.hashTypes.desire, "STRING");
equal(options.hashTypes.noun, "ID");
equal(options.hashTypes.bool, "BOOLEAN");
equal(options.hash.desire, "need");
equal(options.hash.noun, "dad.joke");
equal(options.hashTypes.desire, 'StringLiteral');
equal(options.hashTypes.noun, 'ID');
equal(options.hashTypes.bool, 'BooleanLiteral');
equal(options.hash.desire, 'need');
equal(options.hash.noun, 'dad.joke');
equal(options.hash.bool, true);
return "Helper called";
return 'Helper called';
}
};
var result = template({}, { helpers: helpers });
equal(result, "Helper called");
equal(result, 'Helper called');
});
it("hash parameters get context information", function() {
+6 -6
View File
@@ -20,14 +20,14 @@ describe('Visitor', function() {
it('should traverse to stubs', function() {
var visitor = new Handlebars.Visitor();
visitor.STRING = function(string) {
equal(string.string, '2');
visitor.StringLiteral = function(string) {
equal(string.value, '2');
};
visitor.NUMBER = function(number) {
equal(number.stringModeValue, 1);
visitor.NumberLiteral = function(number) {
equal(number.value, 1);
};
visitor.BOOLEAN = function(bool) {
equal(bool.stringModeValue, true);
visitor.BooleanLiteral = function(bool) {
equal(bool.value, true);
};
visitor.ID = function(id) {
equal(id.original, 'foo.bar');