1 package com.sun.org.apache.bcel.internal.classfile; 2 3 56 57 import com.sun.org.apache.bcel.internal.Constants; 58 import java.io.*; 59 60 70 public final class StackMapEntry implements Cloneable { 71 private int byte_code_offset; 72 private int number_of_locals; 73 private StackMapType[] types_of_locals; 74 private int number_of_stack_items; 75 private StackMapType[] types_of_stack_items; 76 private ConstantPool constant_pool; 77 78 83 StackMapEntry(DataInputStream file, ConstantPool constant_pool) throws IOException 84 { 85 this(file.readShort(), file.readShort(), null, -1, null, constant_pool); 86 87 types_of_locals = new StackMapType[number_of_locals]; 88 for(int i=0; i < number_of_locals; i++) 89 types_of_locals[i] = new StackMapType(file, constant_pool); 90 91 number_of_stack_items = file.readShort(); 92 types_of_stack_items = new StackMapType[number_of_stack_items]; 93 for(int i=0; i < number_of_stack_items; i++) 94 types_of_stack_items[i] = new StackMapType(file, constant_pool); 95 } 96 97 public StackMapEntry(int byte_code_offset, int number_of_locals, 98 StackMapType[] types_of_locals, 99 int number_of_stack_items, 100 StackMapType[] types_of_stack_items, 101 ConstantPool constant_pool) { 102 this.byte_code_offset = byte_code_offset; 103 this.number_of_locals = number_of_locals; 104 this.types_of_locals = types_of_locals; 105 this.number_of_stack_items = number_of_stack_items; 106 this.types_of_stack_items = types_of_stack_items; 107 this.constant_pool = constant_pool; 108 } 109 110 116 public final void dump(DataOutputStream file) throws IOException 117 { 118 file.writeShort(byte_code_offset); 119 120 file.writeShort(number_of_locals); 121 for(int i=0; i < number_of_locals; i++) 122 types_of_locals[i].dump(file); 123 124 file.writeShort(number_of_stack_items); 125 for(int i=0; i < number_of_stack_items; i++) 126 types_of_stack_items[i].dump(file); 127 } 128 129 132 public final String toString() { 133 StringBuffer buf = new StringBuffer ("(offset=" + byte_code_offset); 134 135 if(number_of_locals > 0) { 136 buf.append(", locals={"); 137 138 for(int i=0; i < number_of_locals; i++) { 139 buf.append(types_of_locals[i]); 140 if(i < number_of_locals - 1) 141 buf.append(", "); 142 } 143 144 buf.append("}"); 145 } 146 147 if(number_of_stack_items > 0) { 148 buf.append(", stack items={"); 149 150 for(int i=0; i < number_of_stack_items; i++) { 151 buf.append(types_of_stack_items[i]); 152 if(i < number_of_stack_items - 1) 153 buf.append(", "); 154 } 155 156 buf.append("}"); 157 } 158 159 buf.append(")"); 160 161 return buf.toString(); 162 } 163 164 165 public void setByteCodeOffset(int b) { byte_code_offset = b; } 166 public int getByteCodeOffset() { return byte_code_offset; } 167 public void setNumberOfLocals(int n) { number_of_locals = n; } 168 public int getNumberOfLocals() { return number_of_locals; } 169 public void setTypesOfLocals(StackMapType[] t) { types_of_locals = t; } 170 public StackMapType[] getTypesOfLocals() { return types_of_locals; } 171 public void setNumberOfStackItems(int n) { number_of_stack_items = n; } 172 public int getNumberOfStackItems() { return number_of_stack_items; } 173 public void setTypesOfStackItems(StackMapType[] t) { types_of_stack_items = t; } 174 public StackMapType[] getTypesOfStackItems() { return types_of_stack_items; } 175 176 179 public StackMapEntry copy() { 180 try { 181 return (StackMapEntry)clone(); 182 } catch(CloneNotSupportedException e) {} 183 184 return null; 185 } 186 187 194 public void accept(Visitor v) { 195 v.visitStackMapEntry(this); 196 } 197 198 201 public final ConstantPool getConstantPool() { return constant_pool; } 202 203 206 public final void setConstantPool(ConstantPool constant_pool) { 207 this.constant_pool = constant_pool; 208 } 209 } 210 | Popular Tags |