1 30 31 39 40 package jbet; 41 import java.io.*; 42 43 class LocalVarRec { 44 45 BranchTarget start = new BranchTarget(); BranchTarget end = new BranchTarget(); 48 String name; 49 Type descriptor; 50 int index; 51 52 53 private int name_index; 54 private int descriptor_index; 55 int length; 57 LocalVarRec dup() { 58 try { 59 return (LocalVarRec) clone(); 60 } catch (CloneNotSupportedException e) { 61 return null; 62 } 63 } 64 65 LocalVarRec() {} 66 67 LocalVarRec (Instruction s, Instruction e, 68 String n, Type t, int i) { 69 start.instr = s; 70 end.instr = e; 71 name = n; 72 descriptor = t; 73 index = i; 74 } 75 76 77 78 LocalVarRec (DataInputStream dataIn, ConstantPool constantPool) 79 throws IOException, ClassFileException { 80 81 start.offset = dataIn.readUnsignedShort(); 82 length = dataIn.readUnsignedShort(); 83 84 name_index = dataIn.readUnsignedShort(); 85 name = constantPool.utf8At(name_index); 86 87 descriptor_index = dataIn.readUnsignedShort(); 88 descriptor = new Type ( constantPool.utf8At(descriptor_index) ); 89 90 index = dataIn.readUnsignedShort(); 91 } 92 93 void writeFile (DataOutputStream dataOut) throws IOException { 94 dataOut.writeShort (start.offset); 95 dataOut.writeShort (length); 96 dataOut.writeShort (name_index); 97 dataOut.writeShort (descriptor_index); 98 dataOut.writeShort (index); 99 } 100 101 void resolveConstants (ConstantPool constantPool) { 102 name_index = constantPool.internUtf8(name); 103 descriptor_index = constantPool.internUtf8( descriptor.toString() ); 104 } 105 106 private Integer integerCache = null; 107 Integer integer() { 108 if (integerCache == null || integerCache.intValue() != index) 109 integerCache = new Integer (index); 110 return integerCache; 111 } 112 113 String recString() { 114 return "LocalVarRec: name(" + name + ") type(" + descriptor.toString() 115 + ") startPC(" + start.instr.pc() + ") " + 116 (end.instr == null ? "" : " endPC(" + end.instr.pc() + ") ") 117 + "length(" + length + ") index(" + index + ")"; 118 } 119 120 } 121 | Popular Tags |