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) Labelfirst(package private) static int[]JcovClassCountArray(package private) static java.lang.StringJcovClassLine(package private) static java.lang.StringJcovDataLine(package private) static java.lang.StringJcovHeadingLine(package private) static java.lang.StringJcovMagicLine(package private) static java.lang.StringJcovSrcfileLine(package private) static java.lang.StringJcovTimestampLine(package private) Instructionlast(package private) intmaxdepth(package private) intmaxpc(package private) intmaxvar(package private) static intNEEDED(package private) static intNOTREACHED(package private) static intREACHED(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 voidadd(boolean flagNoCovered, long where, int opc, java.lang.Object obj)voidadd(long where, int opc)voidadd(long where, int opc, boolean flagNoCovered)voidadd(long where, int opc, java.lang.Object obj)voidadd(long where, int opc, java.lang.Object obj, boolean flagCondInverted)voidadd(Instruction inst)Add an instructionvoidaddNativeToJcovTab(Environment env, ClassDefinition c)(package private) voidbalance(Label lbl, int depth)Determine stack size, count local variablesvoidcollect(Environment env, MemberDefinition field, ConstantPool tab)Collect all constants into the constant tableprivate java.lang.StringcreateClassJcovElement(Environment env, ClassDefinition c)(package private) booleaneliminate()Eliminate instructions that are not reachedbooleanempty()Return true if empty(package private) voidflowFields(Environment env, Label lbl, MemberDefinition[] locals)Figure out when registers contain a legal value.voidGenJCov(Environment env)voidGenVecJCov(Environment env, ClassDefinition c, long Time)voidlisting(java.io.PrintStream out)Print the byte codesvoidoptimize(Environment env)Optimize the byte codes(package private) voidoptimize(Environment env, Label lbl)Optimize instructions and mark those that can be reachedvoidwrite(Environment env, java.io.DataOutputStream out, MemberDefinition field, ConstantPool tab)Generate codevoidwriteCoverageTable(Environment env, ClassDefinition c, java.io.DataOutputStream out, ConstantPool tab, long whereField)Write the coverage table(package private) voidwriteExceptions(Environment env, java.io.DataOutputStream out, ConstantPool tab, Instruction first, Instruction last)Write the exceptions tablevoidwriteLineNumberTable(Environment env, java.io.DataOutputStream out, ConstantPool tab)Write the linenumber tablevoidwriteLocalVariableTable(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
-
-