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