00001 package de.fub.bytecode.generic;
00002
00003 import java.io.*;
00004
00005
00006
00007
00008
00009
00010
00011 public class GOTO extends BranchInstruction
00012 implements VariableLengthInstruction, UnconditionalBranch {
00013
00014
00015
00016
00017 GOTO() {}
00018 public GOTO(InstructionHandle target) {
00019 super(GOTO, target);
00020 }
00021
00022
00023
00024
00025 public void dump(DataOutputStream out) throws IOException {
00026 index = getTargetOffset();
00027 if(tag == GOTO)
00028 super.dump(out);
00029 else {
00030 index = getTargetOffset();
00031 out.writeByte(tag);
00032 out.writeInt(index);
00033 }
00034 }
00035
00036
00037
00038 protected int updatePosition(int offset, int max_offset) {
00039 int i = getTargetOffset();
00040
00041 position += offset;
00042
00043 if(Math.abs(i) >= (32767 - max_offset)) {
00044 tag = GOTO_W;
00045 length = 5;
00046 return 2;
00047 }
00048
00049 return 0;
00050 }
00051 }