diff --git a/lib/handlebars/compiler/javascript-compiler.js b/lib/handlebars/compiler/javascript-compiler.js index 1708032c9..4e4f288ae 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 a1eec2f10..4a2a55cd6 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', ''); + }); });