< prev index next >

src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/IINC.java

Print this page

        

*** 19,150 **** * limitations under the License. */ package com.sun.org.apache.bcel.internal.generic; ! import java.io.*; import com.sun.org.apache.bcel.internal.util.ByteSequence; /** * IINC - Increment local variable by constant * ! * @author <A HREF="mailto:markus.dahm@berlin.de">M. Dahm</A> */ public class IINC extends LocalVariableInstruction { private boolean wide; private int c; /** * Empty constructor needed for the Class.newInstance() statement in * Instruction.readInstruction(). Not to be used otherwise. */ ! IINC() {} /** * @param n index of local variable * @param c increment factor */ ! public IINC(int n, int c) { super(); // Default behaviour of LocalVariableInstruction causes error ! ! this.opcode = com.sun.org.apache.bcel.internal.Constants.IINC; ! this.length = (short)3; ! setIndex(n); // May set wide as side effect setIncrement(c); } /** * Dump instruction as byte code to stream out. * @param out Output stream */ ! public void dump(DataOutputStream out) throws IOException { ! if(wide) // Need WIDE prefix ? ! out.writeByte(com.sun.org.apache.bcel.internal.Constants.WIDE); ! ! out.writeByte(opcode); ! ! if(wide) { ! out.writeShort(n); out.writeShort(c); } else { ! out.writeByte(n); out.writeByte(c); } } ! private final void setWide() { ! if(wide = ((n > com.sun.org.apache.bcel.internal.Constants.MAX_SHORT) || ! (Math.abs(c) > Byte.MAX_VALUE))) ! length = 6; // wide byte included ! else ! length = 3; } /** * Read needed data (e.g. index) from file. */ ! protected void initFromFile(ByteSequence bytes, boolean wide) throws IOException ! { this.wide = wide; ! ! if(wide) { ! length = 6; ! n = bytes.readUnsignedShort(); c = bytes.readShort(); } else { ! length = 3; ! n = bytes.readUnsignedByte(); c = bytes.readByte(); } } /** * @return mnemonic for instruction */ ! public String toString(boolean verbose) { return super.toString(verbose) + " " + c; } /** * Set index of local variable. */ ! public final void setIndex(int n) { ! if(n < 0) throw new ClassGenException("Negative index value: " + n); ! ! this.n = n; setWide(); } /** * @return increment factor */ ! public final int getIncrement() { return c; } /** * Set increment factor. */ ! public final void setIncrement(int c) { this.c = c; setWide(); } /** @return int type */ ! public Type getType(ConstantPoolGen cp) { return Type.INT; } /** * Call corresponding visitor method(s). The order is: * Call visitor methods of implemented interfaces first, then * call methods according to the class hierarchy in descending order, * i.e., the most specific visitXXX() call comes last. * * @param v Visitor object */ ! public void accept(Visitor v) { v.visitLocalVariableInstruction(this); v.visitIINC(this); } } --- 19,169 ---- * limitations under the License. */ package com.sun.org.apache.bcel.internal.generic; ! import java.io.DataOutputStream; ! import java.io.IOException; ! import com.sun.org.apache.bcel.internal.util.ByteSequence; /** * IINC - Increment local variable by constant * ! * @version $Id: IINC.java 1747278 2016-06-07 17:28:43Z britter $ */ public class IINC extends LocalVariableInstruction { + private boolean wide; private int c; + /** * Empty constructor needed for the Class.newInstance() statement in * Instruction.readInstruction(). Not to be used otherwise. */ ! IINC() { ! } ! /** * @param n index of local variable * @param c increment factor */ ! public IINC(final int n, final int c) { super(); // Default behaviour of LocalVariableInstruction causes error ! super.setOpcode(com.sun.org.apache.bcel.internal.Const.IINC); ! super.setLength((short) 3); setIndex(n); // May set wide as side effect setIncrement(c); } + /** * Dump instruction as byte code to stream out. * @param out Output stream */ ! @Override ! public void dump( final DataOutputStream out ) throws IOException { ! if (wide) { ! out.writeByte(com.sun.org.apache.bcel.internal.Const.WIDE); ! } ! out.writeByte(super.getOpcode()); ! if (wide) { ! out.writeShort(super.getIndex()); out.writeShort(c); } else { ! out.writeByte(super.getIndex()); out.writeByte(c); } } ! ! private void setWide() { ! wide = (super.getIndex() > com.sun.org.apache.bcel.internal.Const.MAX_BYTE) || (Math.abs(c) > Byte.MAX_VALUE); ! if (wide) { ! super.setLength(6); // wide byte included ! } else { ! super.setLength(3); } + } + /** * Read needed data (e.g. index) from file. */ ! @Override ! protected void initFromFile( final ByteSequence bytes, final boolean wide ) throws IOException { this.wide = wide; ! if (wide) { ! super.setLength(6); ! super.setIndexOnly(bytes.readUnsignedShort()); c = bytes.readShort(); } else { ! super.setLength(3); ! super.setIndexOnly(bytes.readUnsignedByte()); c = bytes.readByte(); } } + /** * @return mnemonic for instruction */ ! @Override ! public String toString( final boolean verbose ) { return super.toString(verbose) + " " + c; } + /** * Set index of local variable. */ ! @Override ! public final void setIndex( final int n ) { ! if (n < 0) { throw new ClassGenException("Negative index value: " + n); ! } ! super.setIndexOnly(n); setWide(); } + /** * @return increment factor */ ! public final int getIncrement() { ! return c; ! } ! /** * Set increment factor. */ ! public final void setIncrement( final int c ) { this.c = c; setWide(); } + /** @return int type */ ! @Override ! public Type getType( final ConstantPoolGen cp ) { return Type.INT; } + /** * Call corresponding visitor method(s). The order is: * Call visitor methods of implemented interfaces first, then * call methods according to the class hierarchy in descending order, * i.e., the most specific visitXXX() call comes last. * * @param v Visitor object */ ! @Override ! public void accept( final Visitor v ) { v.visitLocalVariableInstruction(this); v.visitIINC(this); } }
< prev index next >