Package org.glassfish.rmic.tools.tree
Class Vset
- java.lang.Object
-
- org.glassfish.rmic.tools.tree.Vset
-
- All Implemented Interfaces:
Constants
,RuntimeConstants
public final class Vset extends java.lang.Object implements Constants
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 Vset
DEAD_END
This is the Vset which reports all vars assigned and unassigned.(package private) static long[]
emptyX
(package private) static long[]
fullX
(package private) long
uset
(package private) static int
VBITS
(package private) long
vset
(package private) long[]
x
-
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
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description Vset
addDAandJoinDU(Vset other)
Add in the definite assignment bits of another vset, but join the definite unassignment bits.Vset
addVar(int varNumber)
Note that a var is definitely assigned.Vset
addVarUnassigned(int varNumber)
Note that a var is definitely un-assigned.Vset
clearDeadEnd()
Replace canonical DEAD_END with a distinct but equivalent Vset.Vset
clearVar(int varNumber)
Retract any assertion about the var.Vset
copy()
Create an copy of the given Vset.static Vset
firstDAandSecondDU(Vset sourceDA, Vset sourceDU)
Construct a vset consisting of the DA bits of the first argument and the DU bits of the second argument.private void
growX(int length)
boolean
isDeadEnd()
Ask if this is a vset for a dead end.boolean
isReallyDeadEnd()
Ask if this is a vset for a dead end.Vset
join(Vset other)
Join with another vset.Vset
removeAdditionalVars(int varNumber)
Remove variables from the vset that are no longer part of a context.boolean
testVar(int varNumber)
Ask if a var is definitely assigned.boolean
testVarUnassigned(int varNumber)
Ask if a var is definitely un-assigned.java.lang.String
toString()
int
varLimit()
Return one larger than the highest bit set.
-
-
-
Field Detail
-
vset
long vset
-
uset
long uset
-
x
long[] x
-
emptyX
static final long[] emptyX
-
fullX
static final long[] fullX
-
VBITS
static final int VBITS
- See Also:
- Constant Field Values
-
DEAD_END
static final Vset DEAD_END
This is the Vset which reports all vars assigned and unassigned. This impossibility is degenerately true exactly when control flow cannot reach this point.
-
-
Method Detail
-
copy
public Vset copy()
Create an copy of the given Vset. (However, DEAD_END simply returns itself.)
-
growX
private void growX(int length)
-
isDeadEnd
public boolean isDeadEnd()
Ask if this is a vset for a dead end. Answer true only for the canonical dead-end, DEAD_END. A canonical dead-end is produced only as a result of a statement that cannot complete normally, as specified by the JLS. Due to the special-case rules for if-then and if-then-else, this may fail to detect actual unreachable code that could easily be identified.
-
isReallyDeadEnd
public boolean isReallyDeadEnd()
Ask if this is a vset for a dead end. Answer true for any dead-end. Since 'clearDeadEnd' has no effect on this predicate, if-then and if-then-else are handled in the more 'obvious' and precise way. This predicate is to be preferred for dead code elimination purposes. (Presently used in workaround for bug 4173473 in MethodExpression.java)
-
clearDeadEnd
public Vset clearDeadEnd()
Replace canonical DEAD_END with a distinct but equivalent Vset. The bits are unaltered, but the result does not answer true to 'isDeadEnd'.Used mostly for error recovery, but see 'IfStatement.check', where it is used to implement the special-case treatment of statement reachability for such statements.
-
testVar
public boolean testVar(int varNumber)
Ask if a var is definitely assigned.
-
testVarUnassigned
public boolean testVarUnassigned(int varNumber)
Ask if a var is definitely un-assigned. (This is not just the negation of testVar: It's possible for neither to be true.)
-
addVar
public Vset addVar(int varNumber)
Note that a var is definitely assigned. (Side-effecting.)
-
addVarUnassigned
public Vset addVarUnassigned(int varNumber)
Note that a var is definitely un-assigned. (Side-effecting.)
-
clearVar
public Vset clearVar(int varNumber)
Retract any assertion about the var. This operation is ineffective on a dead-end. (Side-effecting.)
-
join
public Vset join(Vset other)
Join with another vset. This is set intersection. (Side-effecting.)
-
addDAandJoinDU
public Vset addDAandJoinDU(Vset other)
Add in the definite assignment bits of another vset, but join the definite unassignment bits. This unusual operation is used only for 'finally' blocks. The original vset 'this' is destroyed by this operation. (Part of fix for 4068688.)
-
firstDAandSecondDU
public static Vset firstDAandSecondDU(Vset sourceDA, Vset sourceDU)
Construct a vset consisting of the DA bits of the first argument and the DU bits of the second argument. This is a higly unusual operation, as it implies a case where the flowgraph for DA analysis differs from that for DU analysis. It is only needed for analysing 'try' blocks. The result is a dead-end iff the first argument is dead-end. (Part of fix for 4068688.)
-
removeAdditionalVars
public Vset removeAdditionalVars(int varNumber)
Remove variables from the vset that are no longer part of a context. Zeroes are stored past varNumber. (Side-effecting.)However, if this is a dead end, keep it so. That is, leave an infinite tail of bits set.
-
varLimit
public int varLimit()
Return one larger than the highest bit set.
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
-