private void loadInstanceField ( XField instanceField , Instruction obj ) { if ( RLE_DEBUG ) { System . out . println ( "[loadInstanceField for field " + instanceField + " in instruction " + handle ) ; } ValueNumberFrame frame = getFrame ( ) ; try { ValueNumber reference = frame . popValue ( ) ; AvailableLoad availableLoad = new AvailableLoad ( reference , instanceField ) ; if ( RLE_DEBUG ) { System . out . println ( "[getfield of " + availableLoad + "]" ) ; } ValueNumber [ ] loadedValue = frame . getAvailableLoad ( availableLoad ) ; if ( loadedValue == null ) { // Get (or create) the cached result for this instruction ValueNumber [ ] inputValueList = new ValueNumber [ ] { reference } ; loadedValue = getOutputValues ( inputValueList , getNumWordsProduced ( obj ) ) ; // Make the load available frame . addAvailableLoad ( availableLoad , loadedValue ) ; if ( RLE_DEBUG ) { System . out . println ( "[Making load available " + availableLoad + " <- " + vlts ( loadedValue ) + "]" ) ; } } else { // Found an available load! if ( RLE_DEBUG ) { System . out . println ( "[Found available load " + availableLoad + " <- " + vlts ( loadedValue ) + "]" ) ; } } pushOutputValues ( loadedValue ) ; if ( VERIFY_INTEGRITY ) { checkConsumedAndProducedValues ( obj , new ValueNumber [ ] { reference } , loadedValue ) ; } } catch ( DataflowAnalysisException e ) { throw new InvalidBytecodeException ( "Error loading from instance field" , e ) ; } }
Load an instance field .