1 23 24 25 package com.sun.jdo.api.persistence.enhancer.classfile; 26 27 import java.io.*; 28 29 33 34 public class LocalVariable { 35 36 private InsnTarget varStartPC; 37 38 39 private InsnTarget varEndPC; 40 41 42 private ConstUtf8 varName; 43 44 45 private ConstUtf8 varSig; 46 47 48 private int varSlot; 49 50 51 52 55 public LocalVariable(InsnTarget startPC, InsnTarget endPC, 56 ConstUtf8 name, ConstUtf8 sig, int slot) { 57 varStartPC = startPC; 58 varEndPC = endPC; 59 varName = name; 60 varSig = sig; 61 varSlot = slot; 62 } 63 64 65 66 static LocalVariable read(DataInputStream data, CodeEnv env) 67 throws IOException { 68 int startPC = data.readUnsignedShort(); 69 InsnTarget startPCTarget = env.getTarget(startPC); 70 int length = data.readUnsignedShort(); 71 InsnTarget endPCTarget = env.getTarget(startPC+length); 72 ConstUtf8 name = 73 (ConstUtf8) env.pool().constantAt(data.readUnsignedShort()); 74 ConstUtf8 sig = 75 (ConstUtf8) env.pool().constantAt(data.readUnsignedShort()); 76 int slot = data.readUnsignedShort(); 77 return new LocalVariable(startPCTarget, endPCTarget, name, sig, slot); 78 } 79 80 void write(DataOutputStream out) throws IOException { 81 out.writeShort(varStartPC.offset()); 82 out.writeShort(varEndPC.offset() - varStartPC.offset()); 83 out.writeShort((varName == null) ? 0 : varName.getIndex()); 84 out.writeShort((varSig == null) ? 0 : varSig.getIndex()); 85 out.writeShort(varSlot); 86 } 87 88 public void print(PrintStream out, int indent) { 89 ClassPrint.spaces(out, indent); 90 out.print("'" + ((varName == null) ? "(null)" : varName.asString()) + "'"); out.print(" sig = " + ((varSig == null) ? "(null)" : varSig.asString())); out.print(" start_pc = " + Integer.toString(varStartPC.offset())); out.print(" length = " + Integer.toString(varEndPC.offset() - varStartPC.offset())); 95 out.println(" slot = " + Integer.toString(varSlot)); } 97 98 } 99 100 | Popular Tags |