diff options
author | kpdecker <kpdecker@gmail.com> | 2014-12-16 17:58:26 -0600 |
---|---|---|
committer | kpdecker <kpdecker@gmail.com> | 2014-12-16 17:59:32 -0600 |
commit | 59e80c510391c4535aa07780dc407524f83a9f11 (patch) | |
tree | 03b29b7e6324441925a07b5d9f85006fea602694 | |
parent | 69b1bdd32e99e31eec3079171818636812c8bda8 (diff) | |
download | handlebars.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.js | 2 | ||||
-rw-r--r-- | spec/regressions.js | 19 |
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'); + }); }); |