From 4512766919b5e7c3461fa2a83cf5672d4b4005c5 Mon Sep 17 00:00:00 2001 From: Mohamed Akram Date: Sun, 3 Sep 2023 19:49:53 +0400 Subject: [PATCH] Fix non-contiguous program indices --- lib/handlebars/compiler/javascript-compiler.js | 14 ++++++-------- spec/expected/non.empty.amd.known.helper.js | 8 ++++---- spec/runtime.js | 6 +++--- 3 files changed, 13 insertions(+), 15 deletions(-) diff --git a/lib/handlebars/compiler/javascript-compiler.js b/lib/handlebars/compiler/javascript-compiler.js index 9a9cdd129..c928bab7b 100644 --- a/lib/handlebars/compiler/javascript-compiler.js +++ b/lib/handlebars/compiler/javascript-compiler.js @@ -165,12 +165,10 @@ JavaScriptCompiler.prototype = { let { programs, decorators } = this.context; for (i = 0, l = programs.length; i < l; i++) { - if (programs[i]) { - ret[i] = programs[i]; - if (decorators[i]) { - ret[i + '_d'] = decorators[i]; - ret.useDecorators = true; - } + ret[i] = programs[i]; + if (decorators[i]) { + ret[i + '_d'] = decorators[i]; + ret.useDecorators = true; } } @@ -914,8 +912,8 @@ JavaScriptCompiler.prototype = { let existing = this.matchExistingProgram(child); if (existing == null) { - this.context.programs.push(''); // Placeholder to prevent name conflicts for nested children - let index = this.context.programs.length; + // Placeholder to prevent name conflicts for nested children + let index = this.context.programs.push('') - 1; child.index = index; child.name = 'program' + index; this.context.programs[index] = compiler.compile( diff --git a/spec/expected/non.empty.amd.known.helper.js b/spec/expected/non.empty.amd.known.helper.js index 75c81cdce..81e4b1170 100644 --- a/spec/expected/non.empty.amd.known.helper.js +++ b/spec/expected/non.empty.amd.known.helper.js @@ -1,6 +1,6 @@ define(['handlebars.runtime'], function(Handlebars) { Handlebars = Handlebars["default"]; var template = Handlebars.template, templates = Handlebars.templates = Handlebars.templates || {}; -return templates['known.helpers'] = template({"1":function(container,depth0,helpers,partials,data) { +return templates['known.helpers'] = template({"0":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; @@ -8,8 +8,8 @@ return parent[propertyName]; return undefined }; return "
Some known helper
\n" -+ ((stack1 = lookupProperty(helpers,"anotherHelper").call(depth0 != null ? depth0 : (container.nullContext || {}),true,{"name":"anotherHelper","hash":{},"fn":container.program(2, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":3,"column":4},"end":{"line":5,"column":22}}})) != null ? stack1 : ""); -},"2":function(container,depth0,helpers,partials,data) { ++ ((stack1 = lookupProperty(helpers,"anotherHelper").call(depth0 != null ? depth0 : (container.nullContext || {}),true,{"name":"anotherHelper","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":3,"column":4},"end":{"line":5,"column":22}}})) != null ? stack1 : ""); +},"1":function(container,depth0,helpers,partials,data) { return "
Another known helper
\n"; },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { @@ -18,7 +18,7 @@ return parent[propertyName]; } return undefined }; -return ((stack1 = lookupProperty(helpers,"someHelper").call(depth0 != null ? depth0 : (container.nullContext || {}),true,{"name":"someHelper","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":1,"column":0},"end":{"line":6,"column":15}}})) != null ? stack1 : ""); +return ((stack1 = lookupProperty(helpers,"someHelper").call(depth0 != null ? depth0 : (container.nullContext || {}),true,{"name":"someHelper","hash":{},"fn":container.program(0, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":1,"column":0},"end":{"line":6,"column":15}}})) != null ? stack1 : ""); },"useData":true}); }); \ No newline at end of file diff --git a/spec/runtime.js b/spec/runtime.js index 7924a5f00..586608a7d 100644 --- a/spec/runtime.js +++ b/spec/runtime.js @@ -91,13 +91,13 @@ describe('runtime', function() { it('should expose child template', function() { var template = Handlebars.compile('{{#foo}}bar{{/foo}}'); // Calling twice to hit the non-compiled case. - equal(template._child(1)(), 'bar'); - equal(template._child(1)(), 'bar'); + equal(template._child(0)(), 'bar'); + equal(template._child(0)(), 'bar'); }); it('should render depthed content', function() { var template = Handlebars.compile('{{#foo}}{{../bar}}{{/foo}}'); // Calling twice to hit the non-compiled case. - equal(template._child(1, undefined, [], [{ bar: 'baz' }])(), 'baz'); + equal(template._child(0, undefined, [], [{ bar: 'baz' }])(), 'baz'); }); });