summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorkpdecker <kpdecker@gmail.com>2014-11-28 22:58:21 -0600
committerkpdecker <kpdecker@gmail.com>2014-11-28 23:13:06 -0600
commit928ba56b9577fd6cd874f0a83178f1265a6d0526 (patch)
tree1c522b0869f663e076e38cf741eac7370c798f90 /src
parent8a6796e5c09686b47945a35826d77680d589d07c (diff)
downloadhandlebars.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.yy17
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 };
}