@@ -31,6 +31,7 @@ import {ChangeDetectorJITGenerator} from './change_detection_jit_generator';
3131
3232import { ArrayChanges } from './array_changes' ;
3333import { KeyValueChanges } from './keyvalue_changes' ;
34+ import { coalesce } from './coalesce' ;
3435
3536export const RECORD_TYPE_SELF = 0 ;
3637export const RECORD_TYPE_CONST = 1 ;
@@ -66,7 +67,9 @@ export class ProtoRecord {
6667 selfIndex :number ,
6768 bindingMemento :any ,
6869 groupMemento :any ,
69- expressionAsString :string ) {
70+ expressionAsString :string ,
71+ lastInBinding :boolean ,
72+ lastInGroup :boolean ) {
7073
7174 this . mode = mode ;
7275 this . name = name ;
@@ -77,8 +80,8 @@ export class ProtoRecord {
7780 this . selfIndex = selfIndex ;
7881 this . bindingMemento = bindingMemento ;
7982 this . groupMemento = groupMemento ;
80- this . lastInBinding = false ;
81- this . lastInGroup = false ;
83+ this . lastInBinding = lastInBinding ;
84+ this . lastInGroup = lastInGroup ;
8285 this . expressionAsString = expressionAsString ;
8386 }
8487}
@@ -91,9 +94,11 @@ export class ProtoChangeDetector {
9194}
9295
9396export class DynamicProtoChangeDetector extends ProtoChangeDetector {
97+ _records :List < ProtoRecord > ;
9498 _recordBuilder:ProtoRecordBuilder ;
9599
96100 constructor ( ) {
101+ this . _records = null ;
97102 this . _recordBuilder = new ProtoRecordBuilder ( ) ;
98103 }
99104
@@ -102,8 +107,15 @@ export class DynamicProtoChangeDetector extends ProtoChangeDetector {
102107 }
103108
104109 instantiate ( dispatcher :any , formatters :Map ) {
105- var records = this . _recordBuilder . records ;
106- return new DynamicChangeDetector ( dispatcher , formatters , records ) ;
110+ this . _createRecordsIfNecessary ( ) ;
111+ return new DynamicChangeDetector ( dispatcher , formatters , this . _records ) ;
112+ }
113+
114+ _createRecordsIfNecessary ( ) {
115+ if ( isBlank ( this . _records ) ) {
116+ var records = this . _recordBuilder . records ;
117+ this . _records = coalesce ( records ) ;
118+ }
107119 }
108120}
109121
@@ -113,6 +125,7 @@ export class JitProtoChangeDetector extends ProtoChangeDetector {
113125 _recordBuilder :ProtoRecordBuilder ;
114126
115127 constructor ( ) {
128+ this . _factory = null ;
116129 this . _recordBuilder = new ProtoRecordBuilder ( ) ;
117130 }
118131
@@ -128,7 +141,7 @@ export class JitProtoChangeDetector extends ProtoChangeDetector {
128141 _createFactoryIfNecessary ( ) {
129142 if ( isBlank ( this . _factory ) ) {
130143 var c = _jitProtoChangeDetectorClassCounter ++ ;
131- var records = this . _recordBuilder . records ;
144+ var records = coalesce ( this . _recordBuilder . records ) ;
132145 var typeName = `ChangeDetector${ c } ` ;
133146 this . _factory = new ChangeDetectorJITGenerator ( typeName , records ) . generate ( ) ;
134147 }
@@ -273,7 +286,7 @@ class _ConvertAstIntoProtoRecords {
273286 var selfIndex = ++ this . contextIndex ;
274287 ListWrapper . push ( this . protoRecords ,
275288 new ProtoRecord ( type , name , funcOrValue , args , fixedArgs , context , selfIndex ,
276- this . bindingMemento , this . groupMemento , this . expressionAsString ) ) ;
289+ this . bindingMemento , this . groupMemento , this . expressionAsString , false , false ) ) ;
277290 return selfIndex ;
278291 }
279292}
0 commit comments