/** * Writes a <code>union verification_type_info</code> value. * * @param data <code>cpool_index</code> or <code>offset</code>. */ public void writeVerifyTypeInfo(int tag, int data) { output.write(tag); if (tag == StackMap.OBJECT || tag == StackMap.UNINIT) write16bit(data); }
/** * Writes a <code>union verification_type_info</code> value. * * @param data <code>cpool_index</code> or <code>offset</code>. */ public void writeVerifyTypeInfo(int tag, int data) { output.write(tag); if (tag == StackMap.OBJECT || tag == StackMap.UNINIT) write16bit(data); }
private void writeStackFrame(StackMap.Writer writer, ConstPool cp, int offset, TypedBlock tb) { writer.write16bit(offset); writeVerifyTypeInfo(writer, cp, tb.localsTypes, tb.numLocals); writeVerifyTypeInfo(writer, cp, tb.stackTypes, tb.stackTop); }
public void visit() { int num = ByteArray.readU16bit(info, 0); writer.write16bit(num); super.visit(); }
writer.write16bit(num - count); for (int k = 0; k < num; k++) { byte tag = info[pos];
public StackMap toStackMap2(ConstPool cp, TypedBlock[] blocks) { StackMap.Writer writer = new StackMap.Writer(); int n = blocks.length; // should be > 0 boolean[] effective = new boolean[n]; TypedBlock prev = blocks[0]; // Is the first instruction a branch target? effective[0] = prev.incoming > 0; int num = effective[0] ? 1 : 0; for (int i = 1; i < n; i++) { TypedBlock bb = blocks[i]; if (effective[i] = isTarget(bb, blocks[i - 1])) { bb.resetNumLocals(); prev = bb; num++; } } if (num == 0) return null; writer.write16bit(num); for (int i = 0; i < n; i++) if (effective[i]) writeStackFrame(writer, cp, blocks[i].position, blocks[i]); return writer.toStackMap(cp); }
private void writeVerifyTypeInfo(StackMap.Writer writer, ConstPool cp, TypeData[] types, int num) { int numDWord = 0; for (int i = 0; i < num; i++) { TypeData td = types[i]; if (td != null && td.is2WordType()) { numDWord++; i++; } } writer.write16bit(num - numDWord); for (int i = 0; i < num; i++) { TypeData td = types[i]; writer.writeVerifyTypeInfo(td.getTypeTag(), td.getTypeData(cp)); if (td.is2WordType()) i++; } } }
writer.write16bit(num - count); for (int k = 0; k < num; k++) { byte tag = info[pos];
@Override public int typeInfoArray(int pos, int offset, int num, boolean isLocals) { if (!isLocals || num < varIndex) return super.typeInfoArray(pos, offset, num, isLocals); writer.write16bit(num + 1); for (int k = 0; k < num; k++) { if (k == varIndex) writeVarTypeInfo(); pos = typeInfoArray2(k, pos); } if (num == varIndex) writeVarTypeInfo(); return pos; }
@Override public int typeInfoArray(int pos, int offset, int num, boolean isLocals) { writer.write16bit(num); return super.typeInfoArray(pos, offset, num, isLocals); }
@Override public int locals(int pos, int offset, int num) { writer.write16bit(offset); return super.locals(pos, offset, num); }
public StackMap toStackMap2(ConstPool cp, TypedBlock[] blocks) { StackMap.Writer writer = new StackMap.Writer(); int n = blocks.length; // should be > 0 boolean[] effective = new boolean[n]; TypedBlock prev = blocks[0]; // Is the first instruction a branch target? effective[0] = prev.incoming > 0; int num = effective[0] ? 1 : 0; for (int i = 1; i < n; i++) { TypedBlock bb = blocks[i]; if (effective[i] = isTarget(bb, blocks[i - 1])) { bb.resetNumLocals(); prev = bb; num++; } } if (num == 0) return null; writer.write16bit(num); for (int i = 0; i < n; i++) if (effective[i]) writeStackFrame(writer, cp, blocks[i].position, blocks[i]); return writer.toStackMap(cp); }
@Override public void visit() { int num = ByteArray.readU16bit(info, 0); writer.write16bit(num); super.visit(); }
private void writeStackFrame(StackMap.Writer writer, ConstPool cp, int offset, TypedBlock tb) { writer.write16bit(offset); writeVerifyTypeInfo(writer, cp, tb.localsTypes, tb.numLocals); writeVerifyTypeInfo(writer, cp, tb.stackTypes, tb.stackTop); }
private void writeVerifyTypeInfo(StackMap.Writer writer, ConstPool cp, TypeData[] types, int num) { int numDWord = 0; for (int i = 0; i < num; i++) { TypeData td = types[i]; if (td != null && td.is2WordType()) { numDWord++; i++; } } writer.write16bit(num - numDWord); for (int i = 0; i < num; i++) { TypeData td = types[i]; writer.writeVerifyTypeInfo(td.getTypeTag(), td.getTypeData(cp)); if (td.is2WordType()) i++; } } }
public int typeInfoArray(int pos, int offset, int num, boolean isLocals) { writer.write16bit(num); return super.typeInfoArray(pos, offset, num, isLocals); }
public int typeInfoArray(int pos, int offset, int num, boolean isLocals) { if (!isLocals || num < varIndex) return super.typeInfoArray(pos, offset, num, isLocals); writer.write16bit(num + 1); for (int k = 0; k < num; k++) { if (k == varIndex) writeVarTypeInfo(); pos = typeInfoArray2(k, pos); } if (num == varIndex) writeVarTypeInfo(); return pos; }
public int locals(int pos, int offset, int num) { writer.write16bit(offset); return super.locals(pos, offset, num); }
public void visit() { int num = ByteArray.readU16bit(info, 0); writer.write16bit(num); super.visit(); }
private void writeStackFrame(StackMap.Writer writer, ConstPool cp, int offset, TypedBlock tb) { writer.write16bit(offset); writeVerifyTypeInfo(writer, cp, tb.localsTypes, tb.numLocals); writeVerifyTypeInfo(writer, cp, tb.stackTypes, tb.stackTop); }