diff options
author | kpdecker <kpdecker@gmail.com> | 2015-08-18 23:57:27 -0700 |
---|---|---|
committer | kpdecker <kpdecker@gmail.com> | 2015-08-18 23:57:27 -0700 |
commit | 95d84badcae89aa72a6f1433b851304700320920 (patch) | |
tree | 78dfd5cad87cb77d4353484781ff580bcbf2ad1c /src | |
parent | 9a2d1d6009406915d1ca177ed5321e4727b9776f (diff) | |
download | handlebars.js-95d84badcae89aa72a6f1433b851304700320920.zip handlebars.js-95d84badcae89aa72a6f1433b851304700320920.tar.gz handlebars.js-95d84badcae89aa72a6f1433b851304700320920.tar.bz2 |
Drop AST constructors in favor of JSON
These were little more than object literal statements that were less clear due to their use of index-based arguments.
Fixes #1077
Diffstat (limited to 'src')
-rw-r--r-- | src/handlebars.yy | 57 |
1 files changed, 43 insertions, 14 deletions
diff --git a/src/handlebars.yy b/src/handlebars.yy index ecc79af..a05b477 100644 --- a/src/handlebars.yy +++ b/src/handlebars.yy @@ -18,12 +18,24 @@ statement | rawBlock -> $1 | partial -> $1 | content -> $1 - | COMMENT -> new yy.CommentStatement(yy.stripComment($1), yy.stripFlags($1, $1), yy.locInfo(@$)) - ; + | COMMENT { + $$ = { + type: 'CommentStatement', + value: yy.stripComment($1), + strip: yy.stripFlags($1, $1), + loc: yy.locInfo(@$) + }; + }; content - : CONTENT -> new yy.ContentStatement($1, yy.locInfo(@$)) - ; + : CONTENT { + $$ = { + type: 'ContentStatement', + original: $1, + value: $1, + loc: yy.locInfo(@$) + }; + }; rawBlock : openRawBlock content+ END_RAW_BLOCK -> yy.prepareRawBlock($1, $2, $3, @$) @@ -77,7 +89,17 @@ mustache ; partial - : OPEN_PARTIAL partialName param* hash? CLOSE -> new yy.PartialStatement($2, $3, $4, yy.stripFlags($1, $5), yy.locInfo(@$)) + : OPEN_PARTIAL partialName param* hash? CLOSE { + $$ = { + type: 'PartialStatement', + name: $2, + params: $3, + hash: $4, + indent: '', + strip: yy.stripFlags($1, $5), + loc: yy.locInfo(@$) + }; + } ; param @@ -86,15 +108,22 @@ param ; sexpr - : OPEN_SEXPR helperName param* hash? CLOSE_SEXPR -> new yy.SubExpression($2, $3, $4, yy.locInfo(@$)) - ; + : OPEN_SEXPR helperName param* hash? CLOSE_SEXPR { + $$ = { + type: 'SubExpression', + path: $2, + params: $3, + hash: $4, + loc: yy.locInfo(@$) + }; + }; hash - : hashSegment+ -> new yy.Hash($1, yy.locInfo(@$)) + : hashSegment+ -> {type: 'Hash', pairs: $1, loc: yy.locInfo(@$)} ; hashSegment - : ID EQUALS param -> new yy.HashPair(yy.id($1), $3, yy.locInfo(@$)) + : ID EQUALS param -> {type: 'HashPair', key: yy.id($1), value: $3, loc: yy.locInfo(@$)} ; blockParams @@ -104,11 +133,11 @@ blockParams helperName : path -> $1 | dataName -> $1 - | STRING -> new yy.StringLiteral($1, yy.locInfo(@$)) - | NUMBER -> new yy.NumberLiteral($1, yy.locInfo(@$)) - | BOOLEAN -> new yy.BooleanLiteral($1, yy.locInfo(@$)) - | UNDEFINED -> new yy.UndefinedLiteral(yy.locInfo(@$)) - | NULL -> new yy.NullLiteral(yy.locInfo(@$)) + | STRING -> {type: 'StringLiteral', value: $1, original: $1, loc: yy.locInfo(@$)} + | NUMBER -> {type: 'NumberLiteral', value: Number($1), original: Number($1), loc: yy.locInfo(@$)} + | BOOLEAN -> {type: 'BooleanLiteral', value: $1 === 'true', original: $1 === 'true', loc: yy.locInfo(@$)} + | UNDEFINED -> {type: 'UndefinedLiteral', original: undefined, value: undefined, loc: yy.locInfo(@$)} + | NULL -> {type: 'NullLiteral', original: null, value: null, loc: yy.locInfo(@$)} ; partialName |