@@ -561,8 +561,8 @@ Parser.prototype = {
561
561
var token = this . expect ( ) ;
562
562
var filterName = token . text ;
563
563
var expression = this . text ;
564
- var filterCacheKeyInput = '$$filterCache_i_' + filterName + '_ ' + expression ;
565
- var filterCacheKeyResult = '$$filterCache_r_' + filterName + '_ ' + expression ;
564
+ var filterCacheKeyInput = filterName + '_i_ ' + expression ;
565
+ var filterCacheKeyResult = filterName + '_r_ ' + expression ;
566
566
var fn = this . $filter ( filterName ) ;
567
567
var argsFn ;
568
568
var args ;
@@ -577,6 +577,7 @@ Parser.prototype = {
577
577
578
578
return valueFn ( function $parseFilter ( self , locals , input ) {
579
579
var result ;
580
+ var filterCache = self . $$filterCache ;
580
581
581
582
if ( args ) {
582
583
args [ 0 ] = input ;
@@ -593,13 +594,13 @@ Parser.prototype = {
593
594
}
594
595
595
596
if ( primitiveInputs ) {
596
- if ( hasOwnProperty . call ( self , filterCacheKeyInput ) &&
597
- equals ( self [ filterCacheKeyInput ] , args ) ) {
598
- result = self [ filterCacheKeyResult ] ;
597
+ if ( filterCacheKeyInput in filterCache &&
598
+ equals ( filterCache [ filterCacheKeyInput ] , args ) ) {
599
+ result = filterCache [ filterCacheKeyResult ] ;
599
600
} else {
600
601
result = fn . apply ( undefined , args ) ;
601
- self [ filterCacheKeyInput ] = shallowCopy ( args , [ ] ) ;
602
- self [ filterCacheKeyResult ] = result ;
602
+ filterCache [ filterCacheKeyInput ] = shallowCopy ( args , [ ] ) ;
603
+ filterCache [ filterCacheKeyResult ] = result ;
603
604
}
604
605
} else {
605
606
result = fn . apply ( undefined , args ) ;
@@ -609,13 +610,12 @@ Parser.prototype = {
609
610
}
610
611
611
612
if ( isPrimitive ( input ) ) {
612
- if ( hasOwnProperty . call ( self , filterCacheKeyInput ) &&
613
- self [ filterCacheKeyInput ] === input ) {
614
- result = self [ filterCacheKeyResult ] ;
613
+ if ( filterCache [ filterCacheKeyInput ] === input && ( input === undefined || filterCacheKeyInput in filterCache ) ) {
614
+ result = filterCache [ filterCacheKeyResult ] ;
615
615
} else {
616
616
result = fn ( input ) ;
617
- self [ filterCacheKeyInput ] = input ;
618
- self [ filterCacheKeyResult ] = result ;
617
+ filterCache [ filterCacheKeyInput ] = input ;
618
+ filterCache [ filterCacheKeyResult ] = result ;
619
619
}
620
620
} else {
621
621
result = fn ( input ) ;
0 commit comments