summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Decker <kpdecker@gmail.com>2016-03-07 16:04:00 -0600
committerKevin Decker <kpdecker@gmail.com>2016-03-07 16:04:00 -0600
commit06baeaebfd7e4b3c4c44397c53f189b7dae3de03 (patch)
tree8673a695de72a216b9b74fe87adb68d8b58d5078
parent27212f59533d4d1f710d52e9463d2226b813d615 (diff)
parentc7be766902dee30fcd4e25f3674d537716e10c99 (diff)
downloadhandlebars.js-06baeaebfd7e4b3c4c44397c53f189b7dae3de03.zip
handlebars.js-06baeaebfd7e4b3c4c44397c53f189b7dae3de03.tar.gz
handlebars.js-06baeaebfd7e4b3c4c44397c53f189b7dae3de03.tar.bz2
Merge pull request #1187 from charleso/bugfix/1186-existing-program-block-param
Ensure that existing blockParams and depths are respected on dupe programs
-rw-r--r--lib/handlebars/compiler/javascript-compiler.js18
-rw-r--r--spec/regressions.js9
2 files changed, 19 insertions, 8 deletions
diff --git a/lib/handlebars/compiler/javascript-compiler.js b/lib/handlebars/compiler/javascript-compiler.js
index 1708032..4e4f288 100644
--- a/lib/handlebars/compiler/javascript-compiler.js
+++ b/lib/handlebars/compiler/javascript-compiler.js
@@ -701,11 +701,11 @@ JavaScriptCompiler.prototype = {
child = children[i];
compiler = new this.compiler(); // eslint-disable-line new-cap
- let index = this.matchExistingProgram(child);
+ let existing = this.matchExistingProgram(child);
- if (index == null) {
+ if (existing == null) {
this.context.programs.push(''); // Placeholder to prevent name conflicts for nested children
- index = this.context.programs.length;
+ let index = this.context.programs.length;
child.index = index;
child.name = 'program' + index;
this.context.programs[index] = compiler.compile(child, options, this.context, !this.precompile);
@@ -714,12 +714,14 @@ JavaScriptCompiler.prototype = {
this.useDepths = this.useDepths || compiler.useDepths;
this.useBlockParams = this.useBlockParams || compiler.useBlockParams;
+ child.useDepths = this.useDepths;
+ child.useBlockParams = this.useBlockParams;
} else {
- child.index = index;
- child.name = 'program' + index;
+ child.index = existing.index;
+ child.name = 'program' + existing.index;
- this.useDepths = this.useDepths || child.useDepths;
- this.useBlockParams = this.useBlockParams || child.useBlockParams;
+ this.useDepths = this.useDepths || existing.useDepths;
+ this.useBlockParams = this.useBlockParams || existing.useBlockParams;
}
}
},
@@ -727,7 +729,7 @@ JavaScriptCompiler.prototype = {
for (let i = 0, len = this.context.environments.length; i < len; i++) {
let environment = this.context.environments[i];
if (environment && environment.equals(child)) {
- return i;
+ return environment;
}
}
},
diff --git a/spec/regressions.js b/spec/regressions.js
index a1eec2f..4a2a55c 100644
--- a/spec/regressions.js
+++ b/spec/regressions.js
@@ -268,4 +268,13 @@ describe('Regressions', function() {
' 1. IF: John--\n'
+ ' 2. MYIF: John==\n');
});
+
+ it('GH-1186: Support block params for existing programs', function() {
+ var string =
+ '{{#*inline "test"}}{{> @partial-block }}{{/inline}}'
+ + '{{#>test }}{{#each listOne as |item|}}{{ item }}{{/each}}{{/test}}'
+ + '{{#>test }}{{#each listTwo as |item|}}{{ item }}{{/each}}{{/test}}';
+
+ shouldCompileTo(string, { listOne: ['a'], listTwo: ['b']}, 'ab', '');
+ });
});