Use objects for hash value tracking
The use of arrays was incorrect for the data type and causing problems when hash keys conflicted with array behaviors. Fixes #1194
This commit is contained in:
@@ -503,7 +503,7 @@ JavaScriptCompiler.prototype = {
|
|||||||
if (this.hash) {
|
if (this.hash) {
|
||||||
this.hashes.push(this.hash);
|
this.hashes.push(this.hash);
|
||||||
}
|
}
|
||||||
this.hash = {values: [], types: [], contexts: [], ids: []};
|
this.hash = {values: {}};
|
||||||
},
|
},
|
||||||
popHash: function() {
|
popHash: function() {
|
||||||
let hash = this.hash;
|
let hash = this.hash;
|
||||||
|
|||||||
@@ -277,4 +277,15 @@ describe('Regressions', function() {
|
|||||||
|
|
||||||
shouldCompileTo(string, { listOne: ['a'], listTwo: ['b']}, 'ab', '');
|
shouldCompileTo(string, { listOne: ['a'], listTwo: ['b']}, 'ab', '');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should allow hash with protected array names', function() {
|
||||||
|
var obj = {array: [1], name: 'John'};
|
||||||
|
var helpers = {
|
||||||
|
helpa: function(options) {
|
||||||
|
return options.hash.length;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
shouldCompileTo('{{helpa length="foo"}}', [obj, helpers], 'foo');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user