@@ -224,11 +224,12 @@ export class Flow {
224
224
flow . returnType = parentFunction . signature . returnType ;
225
225
flow . contextualTypeArguments = parentFunction . contextualTypeArguments ;
226
226
flow . localFlags = [ ] ;
227
- if ( parentFunction . is ( CommonFlags . CONSTRUCTOR ) ) {
228
- flow . fieldFlags = new Map ( ) ;
229
- }
230
227
flow . inlineFunction = null ;
231
228
flow . inlineReturnLabel = null ;
229
+
230
+ if ( flow . actualFunction . is ( CommonFlags . CONSTRUCTOR ) ) {
231
+ flow . fieldFlags = new Map ( ) ;
232
+ }
232
233
return flow ;
233
234
}
234
235
@@ -287,9 +288,11 @@ export class Flow {
287
288
branch . localFlags = this . localFlags . slice ( ) ;
288
289
branch . inlineFunction = this . inlineFunction ;
289
290
branch . inlineReturnLabel = this . inlineReturnLabel ;
290
- if ( branch . parentFunction . is ( CommonFlags . CONSTRUCTOR ) ) {
291
- branch . fieldFlags = new Map ( this . fieldFlags ! ) ;
291
+
292
+ if ( branch . actualFunction . is ( CommonFlags . CONSTRUCTOR ) ) {
293
+ branch . fieldFlags = new Map ( ) ;
292
294
}
295
+
293
296
return branch ;
294
297
}
295
298
@@ -544,12 +547,12 @@ export class Flow {
544
547
isFieldFlag ( name : string , flag : FieldFlags ) : bool {
545
548
const fieldFlags = this . fieldFlags ;
546
549
547
- if ( fieldFlags && fieldFlags . has ( name ) ) {
548
- const flags = assert ( fieldFlags . get ( name ) ) ;
549
- return ( flags & flag ) == flag ;
550
+ if ( ( fieldFlags !== null ) && fieldFlags . has ( name ) ) {
551
+ const flags = assert ( fieldFlags . get ( name ) ) ;
552
+ return ( flags & flag ) == flag ;
553
+ }
554
+ return false ;
550
555
}
551
- return false ;
552
- }
553
556
554
557
/** Pushes a new break label to the stack, for example when entering a loop that one can `break` from. */
555
558
pushBreakLabel ( ) : string {
@@ -840,20 +843,25 @@ export class Flow {
840
843
}
841
844
842
845
843
- if ( left . fieldFlags && right . fieldFlags && right . fieldFlags . size > 0 ) {
846
+ if ( ( left . fieldFlags !== null ) &&
847
+ ( right . fieldFlags !== null ) &&
848
+ right . fieldFlags . size > 0
849
+ ) {
844
850
const rightFieldFlags = right . fieldFlags ;
845
- const rightKeys = Map_keys ( rightFieldFlags ) ;
846
- const rightValues = Map_values ( rightFieldFlags ) ;
851
+ const rightKeys = Map_keys ( rightFieldFlags ! ) ;
852
+ const rightValues = Map_values ( rightFieldFlags ! ) ;
847
853
848
854
const leftFieldFlags = left . fieldFlags ;
849
855
850
856
for ( let i = 0 , k = rightValues . length ; i < k ; ++ i ) {
851
857
const rightValue = unchecked ( rightValues [ i ] ) ;
852
858
const rightKey = unchecked ( rightKeys [ i ] ) ;
853
- const leftValue = leftFieldFlags . has ( rightKey ) ? assert ( leftFieldFlags . get ( rightKey ) ) : FieldFlags . NONE ;
859
+ const leftValue = leftFieldFlags ! . has ( rightKey ) ? assert ( leftFieldFlags ! . get ( rightKey ) ) : FieldFlags . NONE ;
854
860
855
- if ( ( rightValue & FieldFlags . INITIALIZED ) && ( leftValue & FieldFlags . INITIALIZED ) ) {
856
- this . setFieldFlag ( rightKey , FieldFlags . INITIALIZED ) ;
861
+ if ( rightValue & FieldFlags . INITIALIZED ) {
862
+ if ( leftValue & FieldFlags . INITIALIZED ) {
863
+ this . setFieldFlag ( rightKey , FieldFlags . INITIALIZED ) ;
864
+ }
857
865
}
858
866
}
859
867
}
0 commit comments