protected void consumeStack ( Instruction ins ) { ConstantPoolGen cpg = getCPG ( ) ; TypeFrame frame = getFrame ( ) ; int numWordsConsumed = ins . consumeStack ( cpg ) ; if ( numWordsConsumed == Const . UNPREDICTABLE ) { throw new InvalidBytecodeException ( "Unpredictable stack consumption for " + ins ) ; } if ( numWordsConsumed > frame . getStackDepth ( ) ) { throw new InvalidBytecodeException ( "Stack underflow for " + ins + ", " + numWordsConsumed + " needed, " + frame . getStackDepth ( ) + " avail, frame is " + frame ) ; } try { while ( numWordsConsumed -- > 0 ) { frame . popValue ( ) ; } } catch ( DataflowAnalysisException e ) { throw new InvalidBytecodeException ( "Stack underflow for " + ins + ": " + e . getMessage ( ) ) ; } }
Consume stack . This is a convenience method for instructions where the types of popped operands can be ignored .