private void sawStore ( int seen , int pc ) { int reg = RegisterUtils . getStoreReg ( this , seen ) ; if ( catchHandlers . get ( pc ) ) { ignoreRegs . set ( reg ) ; ScopeBlock catchSB = findScopeBlock ( rootScopeBlock , pc + 1 ) ; if ( ( catchSB != null ) && ( catchSB . getStart ( ) < pc ) ) { ScopeBlock sb = new ScopeBlock ( pc , catchSB . getFinish ( ) ) ; catchSB . setFinish ( getPC ( ) - 1 ) ; rootScopeBlock . addChild ( sb ) ; } } else if ( ! monitorSyncPCs . isEmpty ( ) ) { ignoreRegs . set ( reg ) ; } else if ( sawNull ) { ignoreRegs . set ( reg ) ; } else if ( isRiskyStoreClass ( reg ) ) { ignoreRegs . set ( reg ) ; } if ( ! ignoreRegs . get ( reg ) ) { ScopeBlock sb = findScopeBlock ( rootScopeBlock , pc ) ; if ( sb != null ) { UserObject assoc = null ; if ( stack . getStackDepth ( ) > 0 ) { OpcodeStack . Item srcItm = stack . getStackItem ( 0 ) ; assoc = ( UserObject ) srcItm . getUserValue ( ) ; if ( assoc == null ) { if ( srcItm . getRegisterNumber ( ) >= 0 ) { assoc = new UserObject ( srcItm . getRegisterNumber ( ) ) ; } } } if ( ( assoc != null ) && assoc . isRisky ) { ignoreRegs . set ( reg ) ; } else { sb . addStore ( reg , pc , assoc ) ; if ( sawDup ) { sb . addLoad ( reg , pc ) ; } } } else { ignoreRegs . set ( reg ) ; } } ScopeBlock sb = findScopeBlock ( rootScopeBlock , pc ) ; if ( sb != null ) { sb . markFieldAssociatedWrites ( reg ) ; } }
processes a register store by updating the appropriate scope block to mark this register as being stored in the block