001    package serp.bytecode;
002    
003    import java.util.*;
004    
005    /**
006     * An entity that maintains ptrs to instructions in a code block.
007     *
008     * @author Abe White
009     */
010    public interface InstructionPtr {
011        /**
012         * Use the byte indexes read from the class file to calculate and
013         * set references to the target instruction(s) for this ptr.
014         * This method will be called after the byte code
015         * has been read in for the first time and before it is written after
016         * modification.
017         */
018        public void updateTargets();
019    
020        /**
021         * Replace the given old, likely invalid, target with a new target. The
022         * new target Instruction is guaranteed to be in the same code
023         * block as this InstructionPtr.
024         */
025        public void replaceTarget(Instruction oldTarget, Instruction newTarget);
026    
027        /**
028         * Returns the Code block that owns the Instruction(s) this
029         * InstructionPtr points to.
030         */
031        public Code getCode();
032    }