summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkpdecker <kpdecker@gmail.com>2014-12-16 17:58:26 -0600
committerkpdecker <kpdecker@gmail.com>2014-12-16 17:59:32 -0600
commit59e80c510391c4535aa07780dc407524f83a9f11 (patch)
tree03b29b7e6324441925a07b5d9f85006fea602694
parent69b1bdd32e99e31eec3079171818636812c8bda8 (diff)
downloadhandlebars.js-59e80c510391c4535aa07780dc407524f83a9f11.zip
handlebars.js-59e80c510391c4535aa07780dc407524f83a9f11.tar.gz
handlebars.js-59e80c510391c4535aa07780dc407524f83a9f11.tar.bz2
Track depths on deduped children
Fixes a very specific error case where deduped children won’t receive the depths object due to it being omitted by the caller when optimizing. Fixes #926
-rw-r--r--lib/handlebars/compiler/javascript-compiler.js2
-rw-r--r--spec/regressions.js19
2 files changed, 20 insertions, 1 deletions
diff --git a/lib/handlebars/compiler/javascript-compiler.js b/lib/handlebars/compiler/javascript-compiler.js
index 356424b..9bd70be 100644
--- a/lib/handlebars/compiler/javascript-compiler.js
+++ b/lib/handlebars/compiler/javascript-compiler.js
@@ -696,6 +696,8 @@ JavaScriptCompiler.prototype = {
} else {
child.index = index;
child.name = 'program' + index;
+
+ this.useDepths = this.useDepths || child.depths.list.length;
}
}
},
diff --git a/spec/regressions.js b/spec/regressions.js
index 11207fc..84b9d0c 100644
--- a/spec/regressions.js
+++ b/spec/regressions.js
@@ -1,4 +1,4 @@
-/*global CompilerContext, Handlebars, shouldCompileTo, shouldThrow */
+/*global CompilerContext, shouldCompileTo, shouldThrow */
describe('Regressions', function() {
it("GH-94: Cannot read property of undefined", function() {
var data = {"books":[{"title":"The origin of species","author":{"name":"Charles Darwin"}},{"title":"Lazarillo de Tormes"}]};
@@ -145,4 +145,21 @@ describe('Regressions', function() {
shouldCompileTo('{{str bar.baz}}', [{}, helpers], 'undefined');
});
+
+ it('GH-926: Depths and de-dupe', function() {
+ var context = {
+ name: 'foo',
+ data: [
+ 1
+ ],
+ notData: [
+ 1
+ ]
+ };
+
+ var template = CompilerContext.compile('{{#if dater}}{{#each data}}{{../name}}{{/each}}{{else}}{{#each notData}}{{../name}}{{/each}}{{/if}}');
+
+ var result = template(context);
+ equals(result, 'foo');
+ });
});