this.classFileBytes = classFileBytes; this.constantPool = constantPool; this.maxStack = u2At(classFileBytes, 6, offset); this.maxLocals = u2At(classFileBytes, 8, offset); this.codeLength = u4At(classFileBytes, 10, offset); this.codeOffset = offset + 14; int readOffset = (int) (14 + this.codeLength); this.exceptionTableLength = u2At(classFileBytes, readOffset, offset); readOffset += 2; this.exceptionTableEntries = NO_EXCEPTION_TABLE; this.attributesCount = u2At(classFileBytes, readOffset, offset); this.attributes = ClassFileAttribute.NO_ATTRIBUTES; if (this.attributesCount != 0) { readOffset += 2; for (int i = 0; i < this.attributesCount; i++) { IConstantPoolEntry constantPoolEntry = constantPool.decodeEntry(u2At(classFileBytes, readOffset, offset)); if (constantPoolEntry.getKind() != IConstantPoolConstant.CONSTANT_Utf8) { throw new ClassFormatException(ClassFormatException.INVALID_CONSTANT_POOL_ENTRY); if (equals(attributeName, IAttributeNamesConstants.LINE_NUMBER)) { this.lineNumberAttribute = new LineNumberAttribute(classFileBytes, constantPool, offset + readOffset); this.attributes[attributesIndex++] = this.lineNumberAttribute; } else if (equals(attributeName, IAttributeNamesConstants.LOCAL_VARIABLE)) { this.localVariableAttribute = new LocalVariableAttribute(classFileBytes, constantPool, offset + readOffset); this.attributes[attributesIndex++] = this.localVariableAttribute; } else if (equals(attributeName, IAttributeNamesConstants.LOCAL_VARIABLE_TYPE_TABLE)) { this.attributes[attributesIndex++] = new LocalVariableTypeAttribute(classFileBytes, constantPool, offset + readOffset);
IConstantPoolEntry constantPoolEntry; while (true) { opcode = u1At(this.classFileBytes, 0, pc); switch(opcode) { case IOpcodeMnemonics.NOP : break; case IOpcodeMnemonics.BIPUSH : visitor._bipush(pc - this.codeOffset, (byte) i1At(this.classFileBytes, 1, pc)); pc+=2; break; case IOpcodeMnemonics.SIPUSH : visitor._sipush(pc - this.codeOffset, (short) i2At(this.classFileBytes, 1, pc)); pc+=3; break; case IOpcodeMnemonics.LDC : index = u1At(this.classFileBytes, 1, pc); constantPoolEntry = this.constantPool.decodeEntry(index); checkConstantAndThrow(constantPoolEntry.getKind()); visitor._ldc(pc - this.codeOffset, index, constantPoolEntry); pc+=2; break; case IOpcodeMnemonics.LDC_W : index = u2At(this.classFileBytes, 1, pc); constantPoolEntry = this.constantPool.decodeEntry(index); checkConstantAndThrow(constantPoolEntry.getKind()); visitor._ldc_w(pc - this.codeOffset, index, constantPoolEntry); pc+=3; break;
} else if (equals(attributeName, IAttributeNamesConstants.CODE)) { if (!no_code_attribute) { this.codeAttribute = new CodeAttribute(classFileBytes, constantPool, offset + readOffset); this.attributes[attributesIndex++] = this.codeAttribute;
IConstantPoolEntry constantPoolEntry; while (true) { opcode = u1At(this.classFileBytes, 0, pc); switch(opcode) { case IOpcodeMnemonics.NOP : break; case IOpcodeMnemonics.BIPUSH : visitor._bipush(pc - this.codeOffset, (byte) i1At(this.classFileBytes, 1, pc)); pc+=2; break; case IOpcodeMnemonics.SIPUSH : visitor._sipush(pc - this.codeOffset, (short) i2At(this.classFileBytes, 1, pc)); pc+=3; break; case IOpcodeMnemonics.LDC : index = u1At(this.classFileBytes, 1, pc); constantPoolEntry = this.constantPool.decodeEntry(index); if (constantPoolEntry.getKind() != IConstantPoolConstant.CONSTANT_Float break; case IOpcodeMnemonics.LDC_W : index = u2At(this.classFileBytes, 1, pc); constantPoolEntry = this.constantPool.decodeEntry(index); if (constantPoolEntry.getKind() != IConstantPoolConstant.CONSTANT_Float break; case IOpcodeMnemonics.LDC2_W : index = u2At(this.classFileBytes, 1, pc);
} else if (equals(attributeName, IAttributeNamesConstants.CODE)) { if (!no_code_attribute) { this.codeAttribute = new CodeAttribute(classFileBytes, constantPool, offset + readOffset); this.attributes[attributesIndex++] = this.codeAttribute;
IConstantPoolEntry constantPoolEntry; while (true) { opcode = u1At(this.classFileBytes, 0, pc); switch(opcode) { case IOpcodeMnemonics.NOP : break; case IOpcodeMnemonics.BIPUSH : visitor._bipush(pc - this.codeOffset, (byte) i1At(this.classFileBytes, 1, pc)); pc+=2; break; case IOpcodeMnemonics.SIPUSH : visitor._sipush(pc - this.codeOffset, (short) i2At(this.classFileBytes, 1, pc)); pc+=3; break; case IOpcodeMnemonics.LDC : index = u1At(this.classFileBytes, 1, pc); constantPoolEntry = this.constantPool.decodeEntry(index); if (constantPoolEntry.getKind() != IConstantPoolConstant.CONSTANT_Float break; case IOpcodeMnemonics.LDC_W : index = u2At(this.classFileBytes, 1, pc); constantPoolEntry = this.constantPool.decodeEntry(index); if (constantPoolEntry.getKind() != IConstantPoolConstant.CONSTANT_Float break; case IOpcodeMnemonics.LDC2_W : index = u2At(this.classFileBytes, 1, pc);
this.classFileBytes = classFileBytes; this.constantPool = constantPool; this.maxStack = u2At(classFileBytes, 6, offset); this.maxLocals = u2At(classFileBytes, 8, offset); this.codeLength = u4At(classFileBytes, 10, offset); this.codeOffset = offset + 14; int readOffset = (int) (14 + this.codeLength); this.exceptionTableLength = u2At(classFileBytes, readOffset, offset); readOffset += 2; this.exceptionTableEntries = NO_EXCEPTION_TABLE; this.attributesCount = u2At(classFileBytes, readOffset, offset); this.attributes = ClassFileAttribute.NO_ATTRIBUTES; if (this.attributesCount != 0) { readOffset += 2; for (int i = 0; i < this.attributesCount; i++) { IConstantPoolEntry constantPoolEntry = constantPool.decodeEntry(u2At(classFileBytes, readOffset, offset)); if (constantPoolEntry.getKind() != IConstantPoolConstant.CONSTANT_Utf8) { throw new ClassFormatException(ClassFormatException.INVALID_CONSTANT_POOL_ENTRY); if (equals(attributeName, IAttributeNamesConstants.LINE_NUMBER)) { this.lineNumberAttribute = new LineNumberAttribute(classFileBytes, constantPool, offset + readOffset); this.attributes[attributesIndex++] = this.lineNumberAttribute; } else if (equals(attributeName, IAttributeNamesConstants.LOCAL_VARIABLE)) { this.localVariableAttribute = new LocalVariableAttribute(classFileBytes, constantPool, offset + readOffset); this.attributes[attributesIndex++] = this.localVariableAttribute; } else if (equals(attributeName, IAttributeNamesConstants.LOCAL_VARIABLE_TYPE_TABLE)) { this.attributes[attributesIndex++] = new LocalVariableTypeAttribute(classFileBytes, constantPool, offset + readOffset);
} else if (equals(attributeName, IAttributeNamesConstants.CODE)) { if (!no_code_attribute) { this.codeAttribute = new CodeAttribute(classFileBytes, constantPool, offset + readOffset); this.attributes[attributesIndex++] = this.codeAttribute;
IConstantPoolEntry constantPoolEntry; while (true) { opcode = u1At(this.classFileBytes, 0, pc); switch(opcode) { case IOpcodeMnemonics.NOP : break; case IOpcodeMnemonics.BIPUSH : visitor._bipush(pc - this.codeOffset, (byte) i1At(this.classFileBytes, 1, pc)); pc+=2; break; case IOpcodeMnemonics.SIPUSH : visitor._sipush(pc - this.codeOffset, (short) i2At(this.classFileBytes, 1, pc)); pc+=3; break; case IOpcodeMnemonics.LDC : index = u1At(this.classFileBytes, 1, pc); constantPoolEntry = this.constantPool.decodeEntry(index); if (constantPoolEntry.getKind() != IConstantPoolConstant.CONSTANT_Float break; case IOpcodeMnemonics.LDC_W : index = u2At(this.classFileBytes, 1, pc); constantPoolEntry = this.constantPool.decodeEntry(index); if (constantPoolEntry.getKind() != IConstantPoolConstant.CONSTANT_Float break; case IOpcodeMnemonics.LDC2_W : index = u2At(this.classFileBytes, 1, pc);
this.classFileBytes = classFileBytes; this.constantPool = constantPool; this.maxStack = u2At(classFileBytes, 6, offset); this.maxLocals = u2At(classFileBytes, 8, offset); this.codeLength = u4At(classFileBytes, 10, offset); this.codeOffset = offset + 14; int readOffset = (int) (14 + this.codeLength); this.exceptionTableLength = u2At(classFileBytes, readOffset, offset); readOffset += 2; this.exceptionTableEntries = NO_EXCEPTION_TABLE; this.attributesCount = u2At(classFileBytes, readOffset, offset); this.attributes = ClassFileAttribute.NO_ATTRIBUTES; if (this.attributesCount != 0) { readOffset += 2; for (int i = 0; i < this.attributesCount; i++) { IConstantPoolEntry constantPoolEntry = constantPool.decodeEntry(u2At(classFileBytes, readOffset, offset)); if (constantPoolEntry.getKind() != IConstantPoolConstant.CONSTANT_Utf8) { throw new ClassFormatException(ClassFormatException.INVALID_CONSTANT_POOL_ENTRY); if (equals(attributeName, IAttributeNamesConstants.LINE_NUMBER)) { this.lineNumberAttribute = new LineNumberAttribute(classFileBytes, constantPool, offset + readOffset); this.attributes[attributesIndex++] = this.lineNumberAttribute; } else if (equals(attributeName, IAttributeNamesConstants.LOCAL_VARIABLE)) { this.localVariableAttribute = new LocalVariableAttribute(classFileBytes, constantPool, offset + readOffset); this.attributes[attributesIndex++] = this.localVariableAttribute; } else if (equals(attributeName, IAttributeNamesConstants.LOCAL_VARIABLE_TYPE_TABLE)) { this.attributes[attributesIndex++] = new LocalVariableTypeAttribute(classFileBytes, constantPool, offset + readOffset);
} else if (equals(attributeName, IAttributeNamesConstants.CODE)) { if (!no_code_attribute) { this.codeAttribute = new CodeAttribute(classFileBytes, constantPool, offset + readOffset); this.attributes[attributesIndex++] = this.codeAttribute;
IConstantPoolEntry constantPoolEntry; while (true) { opcode = u1At(this.classFileBytes, 0, pc); switch(opcode) { case IOpcodeMnemonics.NOP : break; case IOpcodeMnemonics.BIPUSH : visitor._bipush(pc - this.codeOffset, (byte) i1At(this.classFileBytes, 1, pc)); pc+=2; break; case IOpcodeMnemonics.SIPUSH : visitor._sipush(pc - this.codeOffset, (short) i2At(this.classFileBytes, 1, pc)); pc+=3; break; case IOpcodeMnemonics.LDC : index = u1At(this.classFileBytes, 1, pc); constantPoolEntry = this.constantPool.decodeEntry(index); if (constantPoolEntry.getKind() != IConstantPoolConstant.CONSTANT_Float break; case IOpcodeMnemonics.LDC_W : index = u2At(this.classFileBytes, 1, pc); constantPoolEntry = this.constantPool.decodeEntry(index); if (constantPoolEntry.getKind() != IConstantPoolConstant.CONSTANT_Float break; case IOpcodeMnemonics.LDC2_W : index = u2At(this.classFileBytes, 1, pc);
this.classFileBytes = classFileBytes; this.constantPool = constantPool; this.maxStack = u2At(classFileBytes, 6, offset); this.maxLocals = u2At(classFileBytes, 8, offset); this.codeLength = u4At(classFileBytes, 10, offset); this.codeOffset = offset + 14; int readOffset = (int) (14 + this.codeLength); this.exceptionTableLength = u2At(classFileBytes, readOffset, offset); readOffset += 2; this.exceptionTableEntries = NO_EXCEPTION_TABLE; this.attributesCount = u2At(classFileBytes, readOffset, offset); this.attributes = ClassFileAttribute.NO_ATTRIBUTES; if (this.attributesCount != 0) { readOffset += 2; for (int i = 0; i < this.attributesCount; i++) { IConstantPoolEntry constantPoolEntry = constantPool.decodeEntry(u2At(classFileBytes, readOffset, offset)); if (constantPoolEntry.getKind() != IConstantPoolConstant.CONSTANT_Utf8) { throw new ClassFormatException(ClassFormatException.INVALID_CONSTANT_POOL_ENTRY); if (equals(attributeName, IAttributeNamesConstants.LINE_NUMBER)) { this.lineNumberAttribute = new LineNumberAttribute(classFileBytes, constantPool, offset + readOffset); this.attributes[attributesIndex++] = this.lineNumberAttribute; } else if (equals(attributeName, IAttributeNamesConstants.LOCAL_VARIABLE)) { this.localVariableAttribute = new LocalVariableAttribute(classFileBytes, constantPool, offset + readOffset); this.attributes[attributesIndex++] = this.localVariableAttribute; } else if (equals(attributeName, IAttributeNamesConstants.LOCAL_VARIABLE_TYPE_TABLE)) { this.attributes[attributesIndex++] = new LocalVariableTypeAttribute(classFileBytes, constantPool, offset + readOffset);
} else if (equals(attributeName, IAttributeNamesConstants.CODE)) { if (!no_code_attribute) { this.codeAttribute = new CodeAttribute(classFileBytes, constantPool, offset + readOffset); this.attributes[attributesIndex++] = this.codeAttribute;
IConstantPoolEntry constantPoolEntry; while (true) { opcode = u1At(this.classFileBytes, 0, pc); switch(opcode) { case IOpcodeMnemonics.NOP : break; case IOpcodeMnemonics.BIPUSH : visitor._bipush(pc - this.codeOffset, (byte) i1At(this.classFileBytes, 1, pc)); pc+=2; break; case IOpcodeMnemonics.SIPUSH : visitor._sipush(pc - this.codeOffset, (short) i2At(this.classFileBytes, 1, pc)); pc+=3; break; case IOpcodeMnemonics.LDC : index = u1At(this.classFileBytes, 1, pc); constantPoolEntry = this.constantPool.decodeEntry(index); if (constantPoolEntry.getKind() != IConstantPoolConstant.CONSTANT_Float break; case IOpcodeMnemonics.LDC_W : index = u2At(this.classFileBytes, 1, pc); constantPoolEntry = this.constantPool.decodeEntry(index); if (constantPoolEntry.getKind() != IConstantPoolConstant.CONSTANT_Float break; case IOpcodeMnemonics.LDC2_W : index = u2At(this.classFileBytes, 1, pc);
this.classFileBytes = classFileBytes; this.constantPool = constantPool; this.maxStack = u2At(classFileBytes, 6, offset); this.maxLocals = u2At(classFileBytes, 8, offset); this.codeLength = u4At(classFileBytes, 10, offset); this.codeOffset = offset + 14; int readOffset = (int) (14 + this.codeLength); this.exceptionTableLength = u2At(classFileBytes, readOffset, offset); readOffset += 2; this.exceptionTableEntries = NO_EXCEPTION_TABLE; this.attributesCount = u2At(classFileBytes, readOffset, offset); this.attributes = ClassFileAttribute.NO_ATTRIBUTES; if (this.attributesCount != 0) { readOffset += 2; for (int i = 0; i < this.attributesCount; i++) { IConstantPoolEntry constantPoolEntry = constantPool.decodeEntry(u2At(classFileBytes, readOffset, offset)); if (constantPoolEntry.getKind() != IConstantPoolConstant.CONSTANT_Utf8) { throw new ClassFormatException(ClassFormatException.INVALID_CONSTANT_POOL_ENTRY); if (equals(attributeName, IAttributeNamesConstants.LINE_NUMBER)) { this.lineNumberAttribute = new LineNumberAttribute(classFileBytes, constantPool, offset + readOffset); this.attributes[attributesIndex++] = this.lineNumberAttribute; } else if (equals(attributeName, IAttributeNamesConstants.LOCAL_VARIABLE)) { this.localVariableAttribute = new LocalVariableAttribute(classFileBytes, constantPool, offset + readOffset); this.attributes[attributesIndex++] = this.localVariableAttribute; } else if (equals(attributeName, IAttributeNamesConstants.LOCAL_VARIABLE_TYPE_TABLE)) { this.attributes[attributesIndex++] = new LocalVariableTypeAttribute(classFileBytes, constantPool, offset + readOffset);
} else if (equals(attributeName, IAttributeNamesConstants.CODE)) { if (!no_code_attribute) { this.codeAttribute = new CodeAttribute(classFileBytes, constantPool, offset + readOffset); this.attributes[attributesIndex++] = this.codeAttribute;
IConstantPoolEntry constantPoolEntry; while (true) { opcode = u1At(this.classFileBytes, 0, pc); switch(opcode) { case IOpcodeMnemonics.NOP : break; case IOpcodeMnemonics.BIPUSH : visitor._bipush(pc - this.codeOffset, (byte) i1At(this.classFileBytes, 1, pc)); pc+=2; break; case IOpcodeMnemonics.SIPUSH : visitor._sipush(pc - this.codeOffset, (short) i2At(this.classFileBytes, 1, pc)); pc+=3; break; case IOpcodeMnemonics.LDC : index = u1At(this.classFileBytes, 1, pc); constantPoolEntry = this.constantPool.decodeEntry(index); if (constantPoolEntry.getKind() != IConstantPoolConstant.CONSTANT_Float break; case IOpcodeMnemonics.LDC_W : index = u2At(this.classFileBytes, 1, pc); constantPoolEntry = this.constantPool.decodeEntry(index); if (constantPoolEntry.getKind() != IConstantPoolConstant.CONSTANT_Float break; case IOpcodeMnemonics.LDC2_W : index = u2At(this.classFileBytes, 1, pc);
this.classFileBytes = classFileBytes; this.constantPool = constantPool; this.maxStack = u2At(classFileBytes, 6, offset); this.maxLocals = u2At(classFileBytes, 8, offset); this.codeLength = u4At(classFileBytes, 10, offset); this.codeOffset = offset + 14; int readOffset = (int) (14 + this.codeLength); this.exceptionTableLength = u2At(classFileBytes, readOffset, offset); readOffset += 2; this.exceptionTableEntries = NO_EXCEPTION_TABLE; this.attributesCount = u2At(classFileBytes, readOffset, offset); this.attributes = ClassFileAttribute.NO_ATTRIBUTES; if (this.attributesCount != 0) { readOffset += 2; for (int i = 0; i < this.attributesCount; i++) { IConstantPoolEntry constantPoolEntry = constantPool.decodeEntry(u2At(classFileBytes, readOffset, offset)); if (constantPoolEntry.getKind() != IConstantPoolConstant.CONSTANT_Utf8) { throw new ClassFormatException(ClassFormatException.INVALID_CONSTANT_POOL_ENTRY); if (equals(attributeName, IAttributeNamesConstants.LINE_NUMBER)) { this.lineNumberAttribute = new LineNumberAttribute(classFileBytes, constantPool, offset + readOffset); this.attributes[attributesIndex++] = this.lineNumberAttribute; } else if (equals(attributeName, IAttributeNamesConstants.LOCAL_VARIABLE)) { this.localVariableAttribute = new LocalVariableAttribute(classFileBytes, constantPool, offset + readOffset); this.attributes[attributesIndex++] = this.localVariableAttribute; } else if (equals(attributeName, IAttributeNamesConstants.LOCAL_VARIABLE_TYPE_TABLE)) { this.attributes[attributesIndex++] = new LocalVariableTypeAttribute(classFileBytes, constantPool, offset + readOffset);
} else if (equals(attributeName, IAttributeNamesConstants.CODE)) { if (!no_code_attribute) { this.codeAttribute = new CodeAttribute(classFileBytes, constantPool, offset + readOffset); this.attributes[attributesIndex++] = this.codeAttribute;