Update literal ast nodes for new spec
This commit is contained in:
@@ -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';
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -99,7 +99,7 @@ CodeGen.prototype = {
|
||||
},
|
||||
|
||||
quotedString: function(str) {
|
||||
return '"' + str
|
||||
return '"' + (str + '')
|
||||
.replace(/\\/g, '\\\\')
|
||||
.replace(/"/g, '\\"')
|
||||
.replace(/\n/g, '\\n')
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
@@ -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
@@ -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');
|
||||
|
||||
Reference in New Issue
Block a user