Package org.glassfish.rmic.tools.asm
Class Assembler
- java.lang.Object
-
- org.glassfish.rmic.tools.asm.Assembler
-
- All Implemented Interfaces:
Constants
,RuntimeConstants
public final class Assembler extends java.lang.Object implements Constants
This class is used to assemble the bytecode instructions for a method. WARNING: The contents of this source file are not part of any supported API. Code that depends on them does so at its own risk: they are subject to change or removal without notice.
-
-
Field Summary
Fields Modifier and Type Field Description (package private) static int[]
arrayModifiers
(package private) static int[]
arrayModifiersOpc
(package private) Label
first
(package private) static int[]
JcovClassCountArray
(package private) static java.lang.String
JcovClassLine
(package private) static java.lang.String
JcovDataLine
(package private) static java.lang.String
JcovHeadingLine
(package private) static java.lang.String
JcovMagicLine
(package private) static java.lang.String
JcovSrcfileLine
(package private) static java.lang.String
JcovTimestampLine
(package private) Instruction
last
(package private) int
maxdepth
(package private) int
maxpc
(package private) int
maxvar
(package private) static int
NEEDED
(package private) static int
NOTREACHED
(package private) static int
REACHED
(package private) static java.util.Vector<java.lang.String>
SourceClassList
(package private) static java.util.Vector<java.lang.String>
TmpCovTable
-
Fields inherited from interface org.glassfish.rmic.tools.java.Constants
ABSTRACT, ACCM_CLASS, ACCM_FIELD, ACCM_INNERCLASS, ACCM_MEMBER, ACCM_METHOD, ADD, AND, ARRAY, ARRAYACCESS, ASGADD, ASGBITAND, ASGBITOR, ASGBITXOR, ASGDIV, ASGLSHIFT, ASGMUL, ASGREM, ASGRSHIFT, ASGSUB, ASGURSHIFT, ASSIGN, ATT_ALL, ATT_ALLCLASSES, ATT_CODE, BITAND, BITNOT, BITOR, BITXOR, BOOLEAN, BOOLEANVAL, BREAK, BYTE, BYTEVAL, CASE, CAST, CATCH, CHAR, CHARVAL, CLASS, COLON, COMMA, COMMENT, COND, CONST, CONTINUE, CONVERT, CS_BINARY, CS_CHECKED, CS_COMPILED, CS_NOTFOUND, CS_PARSED, CS_SOURCE, CS_UNDECIDED, CS_UNDEFINED, CT_BLOCK, CT_BRANCH_FALSE, CT_BRANCH_TRUE, CT_CASE, CT_FIKT_METHOD, CT_FIKT_RET, CT_FIRST_KIND, CT_LAST_KIND, CT_METHOD, CT_SWITH_WO_DEF, DEC, DECLARATION, DEFAULT, DIV, DO, DOUBLE, DOUBLEVAL, ELSE, EQ, ERROR, EXPR, EXPRESSION, EXTENDS, F_COVDATA, F_COVERAGE, F_DEBUG_LINES, F_DEBUG_SOURCE, F_DEBUG_VARS, F_DEPENDENCIES, F_DEPRECATION, F_DUMP, F_ERRORSREPORTED, F_OPT, F_OPT_INTERCLASS, F_PRINT_DEPENDENCIES, F_STRICTDEFAULT, F_VERBOSE, F_VERSION12, F_WARNINGS, FALSE, FIELD, FINAL, FINALLY, FLOAT, FLOATVAL, FOR, GE, GOTO, GT, idAppend, idClass, idClassInit, idClone, idCode, idConstantValue, idCoverageTable, idDeprecated, idDocumentation, IDENT, idExceptions, idFinallyReturnValue, idGetClass, idInit, idInnerClasses, idJavaIoSerializable, idJavaLang, idJavaLangClass, idJavaLangCloneable, idJavaLangError, idJavaLangException, idJavaLangObject, idJavaLangRuntimeException, idJavaLangString, idJavaLangStringBuffer, idJavaLangThrowable, idLength, idLineNumberTable, idLocalVariableTable, idNew, idNull, idSourceFile, idStar, idSuper, idSynthetic, idThis, idToString, idTYPE, idValueOf, IF, IMPLEMENTS, IMPORT, INC, INLINEMETHOD, INLINENEWINSTANCE, INLINERETURN, INSTANCEOF, INT, INTERFACE, INTVAL, LBRACE, LE, LENGTH, LONG, LONGVAL, LPAREN, LSHIFT, LSQBRACKET, LT, M_ABSTRACT, M_ANONYMOUS, M_DEPRECATED, M_FINAL, M_INLINEABLE, M_INTERFACE, M_LOCAL, M_NATIVE, M_PRIVATE, M_PROTECTED, M_PUBLIC, M_STATIC, M_STRICTFP, M_SYNCHRONIZED, M_SYNTHETIC, M_TRANSIENT, M_VOLATILE, MAXFILESIZE, MAXLINENUMBER, METHOD, MM_CLASS, MM_FIELD, MM_MEMBER, MM_METHOD, MUL, NATIVE, NE, NEG, NEW, NEWARRAY, NEWFROMNAME, NEWINSTANCE, NOT, NULL, opNames, opPrecedence, OR, PACKAGE, paraDeprecated, POS, POSTDEC, POSTINC, PREDEC, prefixAccess, prefixArray, prefixClass, prefixLoc, prefixThis, prefixVal, PREINC, PRIVATE, PROTECTED, PUBLIC, QUESTIONMARK, RBRACE, REM, RETURN, RPAREN, RSHIFT, RSQBRACKET, SEMICOLON, SHORT, SHORTVAL, SIG_INNERCLASS, SIGC_INNERCLASS, STAT, STATIC, STRICTFP, STRINGVAL, SUB, SUPER, SWITCH, SYNCHRONIZED, TC_ARRAY, TC_BOOLEAN, TC_BYTE, TC_CHAR, TC_CLASS, TC_DOUBLE, TC_ERROR, TC_FLOAT, TC_INT, TC_LONG, TC_METHOD, TC_NULL, TC_SHORT, TC_VOID, THIS, THROW, THROWS, TM_ARRAY, TM_BOOLEAN, TM_BYTE, TM_CHAR, TM_CLASS, TM_DOUBLE, TM_ERROR, TM_FLOAT, TM_INT, TM_INT32, TM_INTEGER, TM_LONG, TM_METHOD, TM_NULL, TM_NUM32, TM_NUM64, TM_NUMBER, TM_REAL, TM_REFERENCE, TM_SHORT, TM_VOID, tracing, TRANSIENT, TRUE, TRY, TYPE, URSHIFT, VARDECLARATION, VOID, VOLATILE, WHEREOFFSETBITS, WHILE
-
Fields inherited from interface org.glassfish.rmic.tools.java.RuntimeConstants
ACC_ABSTRACT, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_TRANSIENT, ACC_VOLATILE, CONSTANT_CLASS, CONSTANT_DOUBLE, CONSTANT_FIELD, CONSTANT_FLOAT, CONSTANT_INTEGER, CONSTANT_INTERFACEMETHOD, CONSTANT_INVOKEDYNAMIC, CONSTANT_LONG, CONSTANT_METHOD, CONSTANT_METHODHANDLE, CONSTANT_METHODTYPE, CONSTANT_NAMEANDTYPE, CONSTANT_STRING, CONSTANT_UNICODE, CONSTANT_UTF8, JAVA_DEFAULT_MINOR_VERSION, JAVA_DEFAULT_VERSION, JAVA_MAGIC, JAVA_MAX_SUPPORTED_MINOR_VERSION, JAVA_MAX_SUPPORTED_VERSION, JAVA_MIN_SUPPORTED_VERSION, opc_aaload, opc_aastore, opc_aconst_null, opc_aload, opc_aload_0, opc_aload_1, opc_aload_2, opc_aload_3, opc_anewarray, opc_areturn, opc_arraylength, opc_astore, opc_astore_0, opc_astore_1, opc_astore_2, opc_astore_3, opc_athrow, opc_baload, opc_bastore, opc_bipush, opc_breakpoint, opc_caload, opc_castore, opc_checkcast, opc_d2f, opc_d2i, opc_d2l, opc_dadd, opc_daload, opc_dastore, opc_dcmpg, opc_dcmpl, opc_dconst_0, opc_dconst_1, opc_ddiv, opc_dead, opc_dload, opc_dload_0, opc_dload_1, opc_dload_2, opc_dload_3, opc_dmul, opc_dneg, opc_drem, opc_dreturn, opc_dstore, opc_dstore_0, opc_dstore_1, opc_dstore_2, opc_dstore_3, opc_dsub, opc_dup, opc_dup_x1, opc_dup_x2, opc_dup2, opc_dup2_x1, opc_dup2_x2, opc_f2d, opc_f2i, opc_f2l, opc_fadd, opc_faload, opc_fastore, opc_fcmpg, opc_fcmpl, opc_fconst_0, opc_fconst_1, opc_fconst_2, opc_fdiv, opc_fload, opc_fload_0, opc_fload_1, opc_fload_2, opc_fload_3, opc_fmul, opc_fneg, opc_frem, opc_freturn, opc_fstore, opc_fstore_0, opc_fstore_1, opc_fstore_2, opc_fstore_3, opc_fsub, opc_getfield, opc_getstatic, opc_goto, opc_goto_w, opc_i2b, opc_i2c, opc_i2d, opc_i2f, opc_i2l, opc_i2s, opc_iadd, opc_iaload, opc_iand, opc_iastore, opc_iconst_0, opc_iconst_1, opc_iconst_2, opc_iconst_3, opc_iconst_4, opc_iconst_5, opc_iconst_m1, opc_idiv, opc_if_acmpeq, opc_if_acmpne, opc_if_icmpeq, opc_if_icmpge, opc_if_icmpgt, opc_if_icmple, opc_if_icmplt, opc_if_icmpne, opc_ifeq, opc_ifge, opc_ifgt, opc_ifle, opc_iflt, opc_ifne, opc_ifnonnull, opc_ifnull, opc_iinc, opc_iload, opc_iload_0, opc_iload_1, opc_iload_2, opc_iload_3, opc_imul, opc_ineg, opc_instanceof, opc_invokedynamic, opc_invokeinterface, opc_invokespecial, opc_invokestatic, opc_invokevirtual, opc_ior, opc_irem, opc_ireturn, opc_ishl, opc_ishr, opc_istore, opc_istore_0, opc_istore_1, opc_istore_2, opc_istore_3, opc_isub, opc_iushr, opc_ixor, opc_jsr, opc_jsr_w, opc_l2d, opc_l2f, opc_l2i, opc_label, opc_ladd, opc_laload, opc_land, opc_lastore, opc_lcmp, opc_lconst_0, opc_lconst_1, opc_ldc, opc_ldc_w, opc_ldc2_w, opc_ldiv, opc_lload, opc_lload_0, opc_lload_1, opc_lload_2, opc_lload_3, opc_lmul, opc_lneg, opc_lookupswitch, opc_lor, opc_lrem, opc_lreturn, opc_lshl, opc_lshr, opc_lstore, opc_lstore_0, opc_lstore_1, opc_lstore_2, opc_lstore_3, opc_lsub, opc_lushr, opc_lxor, opc_monitorenter, opc_monitorexit, opc_multianewarray, opc_new, opc_newarray, opc_nop, opc_pop, opc_pop2, opc_putfield, opc_putstatic, opc_ret, opc_return, opc_saload, opc_sastore, opc_sipush, opc_swap, opc_tableswitch, opc_try, opc_wide, opcLengths, opcNames, SIG_ARRAY, SIG_BOOLEAN, SIG_BYTE, SIG_CHAR, SIG_CLASS, SIG_DOUBLE, SIG_ENDCLASS, SIG_ENDMETHOD, SIG_FLOAT, SIG_INT, SIG_LONG, SIG_METHOD, SIG_PACKAGE, SIG_SHORT, SIG_VOID, SIGC_ARRAY, SIGC_BOOLEAN, SIGC_BYTE, SIGC_CHAR, SIGC_CLASS, SIGC_DOUBLE, SIGC_ENDCLASS, SIGC_ENDMETHOD, SIGC_FLOAT, SIGC_INT, SIGC_LONG, SIGC_METHOD, SIGC_PACKAGE, SIGC_SHORT, SIGC_VOID, T_BOOLEAN, T_BYTE, T_CHAR, T_CLASS, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT
-
-
Constructor Summary
Constructors Constructor Description Assembler()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
add(boolean flagNoCovered, long where, int opc, java.lang.Object obj)
void
add(long where, int opc)
void
add(long where, int opc, boolean flagNoCovered)
void
add(long where, int opc, java.lang.Object obj)
void
add(long where, int opc, java.lang.Object obj, boolean flagCondInverted)
void
add(Instruction inst)
Add an instructionvoid
addNativeToJcovTab(Environment env, ClassDefinition c)
(package private) void
balance(Label lbl, int depth)
Determine stack size, count local variablesvoid
collect(Environment env, MemberDefinition field, ConstantPool tab)
Collect all constants into the constant tableprivate java.lang.String
createClassJcovElement(Environment env, ClassDefinition c)
(package private) boolean
eliminate()
Eliminate instructions that are not reachedboolean
empty()
Return true if empty(package private) void
flowFields(Environment env, Label lbl, MemberDefinition[] locals)
Figure out when registers contain a legal value.void
GenJCov(Environment env)
void
GenVecJCov(Environment env, ClassDefinition c, long Time)
void
listing(java.io.PrintStream out)
Print the byte codesvoid
optimize(Environment env)
Optimize the byte codes(package private) void
optimize(Environment env, Label lbl)
Optimize instructions and mark those that can be reachedvoid
write(Environment env, java.io.DataOutputStream out, MemberDefinition field, ConstantPool tab)
Generate codevoid
writeCoverageTable(Environment env, ClassDefinition c, java.io.DataOutputStream out, ConstantPool tab, long whereField)
Write the coverage table(package private) void
writeExceptions(Environment env, java.io.DataOutputStream out, ConstantPool tab, Instruction first, Instruction last)
Write the exceptions tablevoid
writeLineNumberTable(Environment env, java.io.DataOutputStream out, ConstantPool tab)
Write the linenumber tablevoid
writeLocalVariableTable(Environment env, MemberDefinition field, java.io.DataOutputStream out, ConstantPool tab)
Write the local variable table.
-
-
-
Field Detail
-
NOTREACHED
static final int NOTREACHED
- See Also:
- Constant Field Values
-
REACHED
static final int REACHED
- See Also:
- Constant Field Values
-
NEEDED
static final int NEEDED
- See Also:
- Constant Field Values
-
first
Label first
-
last
Instruction last
-
maxdepth
int maxdepth
-
maxvar
int maxvar
-
maxpc
int maxpc
-
SourceClassList
static java.util.Vector<java.lang.String> SourceClassList
-
TmpCovTable
static java.util.Vector<java.lang.String> TmpCovTable
-
JcovClassCountArray
static int[] JcovClassCountArray
-
JcovMagicLine
static java.lang.String JcovMagicLine
-
JcovClassLine
static java.lang.String JcovClassLine
-
JcovSrcfileLine
static java.lang.String JcovSrcfileLine
-
JcovTimestampLine
static java.lang.String JcovTimestampLine
-
JcovDataLine
static java.lang.String JcovDataLine
-
JcovHeadingLine
static java.lang.String JcovHeadingLine
-
arrayModifiers
static int[] arrayModifiers
-
arrayModifiersOpc
static int[] arrayModifiersOpc
-
-
Method Detail
-
add
public void add(Instruction inst)
Add an instruction
-
add
public void add(long where, int opc)
-
add
public void add(long where, int opc, java.lang.Object obj)
-
add
public void add(long where, int opc, java.lang.Object obj, boolean flagCondInverted)
-
add
public void add(boolean flagNoCovered, long where, int opc, java.lang.Object obj)
-
add
public void add(long where, int opc, boolean flagNoCovered)
-
optimize
void optimize(Environment env, Label lbl)
Optimize instructions and mark those that can be reached
-
eliminate
boolean eliminate()
Eliminate instructions that are not reached
-
optimize
public void optimize(Environment env)
Optimize the byte codes
-
collect
public void collect(Environment env, MemberDefinition field, ConstantPool tab)
Collect all constants into the constant table
-
balance
void balance(Label lbl, int depth)
Determine stack size, count local variables
-
write
public void write(Environment env, java.io.DataOutputStream out, MemberDefinition field, ConstantPool tab) throws java.io.IOException
Generate code- Throws:
java.io.IOException
-
writeExceptions
void writeExceptions(Environment env, java.io.DataOutputStream out, ConstantPool tab, Instruction first, Instruction last) throws java.io.IOException
Write the exceptions table- Throws:
java.io.IOException
-
writeCoverageTable
public void writeCoverageTable(Environment env, ClassDefinition c, java.io.DataOutputStream out, ConstantPool tab, long whereField) throws java.io.IOException
Write the coverage table- Throws:
java.io.IOException
-
addNativeToJcovTab
public void addNativeToJcovTab(Environment env, ClassDefinition c)
-
createClassJcovElement
private java.lang.String createClassJcovElement(Environment env, ClassDefinition c)
-
GenVecJCov
public void GenVecJCov(Environment env, ClassDefinition c, long Time)
-
GenJCov
public void GenJCov(Environment env)
-
writeLineNumberTable
public void writeLineNumberTable(Environment env, java.io.DataOutputStream out, ConstantPool tab) throws java.io.IOException
Write the linenumber table- Throws:
java.io.IOException
-
flowFields
void flowFields(Environment env, Label lbl, MemberDefinition[] locals)
Figure out when registers contain a legal value. This is done using a simple data flow algorithm. This information is later used to generate the local variable table.
-
writeLocalVariableTable
public void writeLocalVariableTable(Environment env, MemberDefinition field, java.io.DataOutputStream out, ConstantPool tab) throws java.io.IOException
Write the local variable table. The necessary constants have already been added to the constant table by the collect() method. The flowFields method is used to determine which variables are alive at each pc.- Throws:
java.io.IOException
-
empty
public boolean empty()
Return true if empty
-
listing
public void listing(java.io.PrintStream out)
Print the byte codes
-
-