@@ -464,15 +464,25 @@ export class Flow {
464464 setLocalFlag ( index : i32 , flag : LocalFlags ) : void {
465465 if ( index < 0 ) return ;
466466 let localFlags = this . localFlags ;
467- let flags = index < localFlags . length ? unchecked ( localFlags [ index ] ) : 0 ;
467+ let flags = 0 ;
468+ if ( index < localFlags . length ) {
469+ flags = unchecked ( localFlags [ index ] ) ;
470+ } else {
471+ localFlags . length = index + 1 ;
472+ }
468473 localFlags [ index ] = flags | flag ;
469474 }
470475
471476 /** Unsets the specified flag or flags on the local at the specified index. */
472477 unsetLocalFlag ( index : i32 , flag : LocalFlags ) : void {
473478 if ( index < 0 ) return ;
474479 let localFlags = this . localFlags ;
475- let flags = index < localFlags . length ? unchecked ( localFlags [ index ] ) : 0 ;
480+ let flags = 0 ;
481+ if ( index < localFlags . length ) {
482+ flags = unchecked ( localFlags [ index ] ) ;
483+ } else {
484+ localFlags . length = index + 1 ;
485+ }
476486 localFlags [ index ] = flags & ~ flag ;
477487 }
478488
@@ -669,7 +679,7 @@ export class Flow {
669679 let numThisLocalFlags = thisLocalFlags . length ;
670680 let otherLocalFlags = other . localFlags ;
671681 let numOtherLocalFlags = otherLocalFlags . length ;
672- let maxLocalFlags = max ( numThisLocalFlags , numOtherLocalFlags ) ;
682+ let maxLocalFlags = thisLocalFlags . length = max ( numThisLocalFlags , numOtherLocalFlags ) ;
673683 for ( let i = 0 ; i < maxLocalFlags ; ++ i ) {
674684 let thisFlags = i < numThisLocalFlags ? thisLocalFlags [ i ] : 0 ;
675685 let otherFlags = i < numOtherLocalFlags ? otherLocalFlags [ i ] : 0 ;
@@ -781,21 +791,23 @@ export class Flow {
781791 if ( leftFlags & FlowFlags . Terminates ) {
782792 if ( ! ( rightFlags & FlowFlags . Terminates ) ) {
783793 let rightLocalFlags = right . localFlags ;
784- for ( let i = 0 , k = rightLocalFlags . length ; i < k ; ++ i ) {
794+ const numRightLocalFlags = thisLocalFlags . length = rightLocalFlags . length ;
795+ for ( let i = 0 , k = numRightLocalFlags ; i < k ; ++ i ) {
785796 thisLocalFlags [ i ] = rightLocalFlags [ i ] ;
786797 }
787798 }
788799 } else if ( rightFlags & FlowFlags . Terminates ) {
789800 let leftLocalFlags = left . localFlags ;
790- for ( let i = 0 , k = leftLocalFlags . length ; i < k ; ++ i ) {
801+ const numLeftLocalFlags = thisLocalFlags . length = leftLocalFlags . length ;
802+ for ( let i = 0 , k = numLeftLocalFlags ; i < k ; ++ i ) {
791803 thisLocalFlags [ i ] = leftLocalFlags [ i ] ;
792804 }
793805 } else {
794806 let leftLocalFlags = left . localFlags ;
795807 let numLeftLocalFlags = leftLocalFlags . length ;
796808 let rightLocalFlags = right . localFlags ;
797809 let numRightLocalFlags = rightLocalFlags . length ;
798- let maxLocalFlags = max ( numLeftLocalFlags , numRightLocalFlags ) ;
810+ let maxLocalFlags = thisLocalFlags . length = max ( numLeftLocalFlags , numRightLocalFlags ) ;
799811 for ( let i = 0 ; i < maxLocalFlags ; ++ i ) {
800812 let leftFlags = i < numLeftLocalFlags ? leftLocalFlags [ i ] : 0 ;
801813 let rightFlags = i < numRightLocalFlags ? rightLocalFlags [ i ] : 0 ;
0 commit comments