diff options
author | kpdecker <kpdecker@gmail.com> | 2014-11-28 22:58:21 -0600 |
---|---|---|
committer | kpdecker <kpdecker@gmail.com> | 2014-11-28 23:13:06 -0600 |
commit | 928ba56b9577fd6cd874f0a83178f1265a6d0526 (patch) | |
tree | 1c522b0869f663e076e38cf741eac7370c798f90 /src | |
parent | 8a6796e5c09686b47945a35826d77680d589d07c (diff) | |
download | handlebars.js-928ba56b9577fd6cd874f0a83178f1265a6d0526.zip handlebars.js-928ba56b9577fd6cd874f0a83178f1265a6d0526.tar.gz handlebars.js-928ba56b9577fd6cd874f0a83178f1265a6d0526.tar.bz2 |
Rework strip flags to make clearer at in AST level
Rather than keeping state in the AST, which requires some gymnastics, we create a separate visitor flow which does the top down iteration necessary to calculate all of the state needed for proper whitespace control evaluation.
Diffstat (limited to 'src')
-rw-r--r-- | src/handlebars.yy | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/src/handlebars.yy b/src/handlebars.yy index 7f2765c..0b2062e 100644 --- a/src/handlebars.yy +++ b/src/handlebars.yy @@ -5,11 +5,11 @@ %% root - : program EOF { yy.prepareProgram($1.body, true); return $1; } + : program EOF { return $1; } ; program - : statement* -> new yy.Program(yy.prepareProgram($1), null, {}, yy.locInfo(@$)) + : statement* -> new yy.Program($1, null, {}, yy.locInfo(@$)) ; statement @@ -26,7 +26,7 @@ content ; rawBlock - : openRawBlock content END_RAW_BLOCK -> yy.prepareRawBlock($1, $2, $3, yy.locInfo(@$)) + : openRawBlock content END_RAW_BLOCK -> yy.prepareRawBlock($1, $2, $3, @$) ; openRawBlock @@ -34,8 +34,8 @@ openRawBlock ; block - : openBlock program inverseChain? closeBlock -> yy.prepareBlock($1, $2, $3, $4, false, yy.locInfo(@$)) - | openInverse program inverseAndProgram? closeBlock -> yy.prepareBlock($1, $2, $3, $4, true, yy.locInfo(@$)) + : openBlock program inverseChain? closeBlock -> yy.prepareBlock($1, $2, $3, $4, false, @$) + | openInverse program inverseAndProgram? closeBlock -> yy.prepareBlock($1, $2, $3, $4, true, @$) ; openBlock @@ -56,10 +56,9 @@ inverseAndProgram inverseChain : openInverseChain program inverseChain? { - var inverse = yy.prepareBlock($1, $2, $3, $3, false, yy.locInfo(@$)), - program = new yy.Program(yy.prepareProgram([inverse]), null, {}, yy.locInfo(@$)); - - program.inverse = inverse; + var inverse = yy.prepareBlock($1, $2, $3, $3, false, @$), + program = new yy.Program([inverse], null, {}, yy.locInfo(@$)); + program.chained = true; $$ = { strip: $1.strip, program: program, chain: true }; } |