public class Context extends Object implements 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, WHILEACC_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 and Description |
|---|
Context(Context ctx) |
Context(Context ctx,
ClassDefinition c)
Create a new context, for initializing a class.
|
Context(Context ctx,
MemberDefinition field)
Create the initial context for a method
The incoming context is inherited from
|
| Modifier and Type | Method and Description |
|---|---|
boolean |
canReach(Environment env,
MemberDefinition f)
Check if a field can reach another field (only considers
forward references, not the access modifiers).
|
void |
checkBackBranch(Environment env,
Statement loop,
Vset vsEntry,
Vset vsBack)
Raise an error if a blank final was definitely unassigned
on entry to a loop, but has possibly been assigned on the
back-branch.
|
int |
declare(Environment env,
LocalMember local)
Declare local
|
int |
declareFieldNumber(MemberDefinition field)
Assign a number to a class field.
|
Expression |
findOuterLink(Environment env,
long where,
ClassDefinition reqc,
MemberDefinition f,
boolean needExactMatch) |
Expression |
findOuterLink(Environment env,
long where,
MemberDefinition f)
Return a local expression which can serve as the base reference
for the given field.
|
ClassDefinition |
findScope(Environment env,
ClassDefinition reqc)
From which enclosing class do members of this type come?
|
Identifier |
getApparentClassName(Environment env,
Identifier name)
Return the name of a lexically apparent type,
skipping inherited members, and ignoring
the current pacakge and imports.
|
MemberDefinition |
getApparentField(Environment env,
Identifier name)
Like getField, except that it skips over inherited fields.
|
Context |
getBreakContext(Identifier lbl)
Get the destination context of a break
|
Context |
getContinueContext(Identifier lbl)
Get the destination context of a continue
|
MemberDefinition |
getElement(int number)
Return the local field or member field corresponding to a number.
|
MemberDefinition |
getField()
Return the field containing the present context.
|
MemberDefinition |
getField(Environment env,
Identifier name)
Get either a local variable, or a field in a current class
|
int |
getFieldNumber(MemberDefinition field)
Retrieve a number previously assigned by declareMember().
|
Context |
getLabelContext(Identifier lbl)
Get the context that corresponds to a label, return null if
not found.
|
LocalMember |
getLocalClass(Identifier name)
Get a local class by name
|
LocalMember |
getLocalField(Identifier name)
Get a local variable by name
|
CheckContext |
getReturnContext()
Get the destination context of a return (the method body)
|
int |
getScopeNumber(ClassDefinition c)
Get the scope number for a reference to a member of this class
(Larger scope numbers are more deeply nested.)
|
int |
getThisNumber()
Return the number of the innermost current instance reference.
|
CheckContext |
getTryExitContext()
Get the context of the innermost surrounding try-block.
|
int |
getVarNumber() |
boolean |
isInScope(LocalMember field)
Check if the given field is active in this context.
|
Expression |
makeReference(Environment env,
LocalMember target)
Implement a reference (usually an uplevel one).
|
static Environment |
newEnvironment(Environment env,
Context ctx)
Extend an environment with the given context.
|
UplevelReference |
noteReference(Environment env,
LocalMember target)
Notice a reference (usually an uplevel one).
|
static boolean |
outerLinkExists(Environment env,
ClassDefinition reqc,
ClassDefinition thisc)
Is there a "this" of type reqc in scope?
|
Vset |
removeAdditionalVars(Vset vset)
Remove variables from the vset set that are no longer part of
this context.
|
public Context(Context ctx, MemberDefinition field)
public Context(Context ctx, ClassDefinition c)
public Context(Context ctx)
public int declare(Environment env, LocalMember local)
public LocalMember getLocalField(Identifier name)
public int getScopeNumber(ClassDefinition c)
LocalMember.scopeNumberpublic int declareFieldNumber(MemberDefinition field)
public int getFieldNumber(MemberDefinition field)
public MemberDefinition getElement(int number)
public LocalMember getLocalClass(Identifier name)
public final MemberDefinition getField(Environment env, Identifier name) throws AmbiguousMember, ClassNotFound
AmbiguousMemberClassNotFoundpublic final MemberDefinition getApparentField(Environment env, Identifier name) throws AmbiguousMember, ClassNotFound
AmbiguousMemberClassNotFoundpublic boolean isInScope(LocalMember field)
public UplevelReference noteReference(Environment env, LocalMember target)
The target must be in scope in this context. So, call this method only from the check phase. (In other phases, the context may be less complete.)
This can and should be called both before and after classes are frozen. It should be a no-op, and will raise a compiler error if not.
public Expression makeReference(Environment env, LocalMember target)
The resulting expression tree does not need checking; it can be code-generated right away. If the reference is not uplevel, the result is an IDENT or THIS.
public Expression findOuterLink(Environment env, long where, MemberDefinition f)
Return null if there is no need for such an argument, or if there was an error.
public Expression findOuterLink(Environment env, long where, ClassDefinition reqc, MemberDefinition f, boolean needExactMatch)
public static boolean outerLinkExists(Environment env, ClassDefinition reqc, ClassDefinition thisc)
public ClassDefinition findScope(Environment env, ClassDefinition reqc)
public Identifier getApparentClassName(Environment env, Identifier name)
public void checkBackBranch(Environment env, Statement loop, Vset vsEntry, Vset vsBack)
public boolean canReach(Environment env, MemberDefinition f)
public Context getLabelContext(Identifier lbl)
public Context getBreakContext(Identifier lbl)
public Context getContinueContext(Identifier lbl)
public CheckContext getReturnContext()
public CheckContext getTryExitContext()
public final Vset removeAdditionalVars(Vset vset)
public final int getVarNumber()
public int getThisNumber()
public final MemberDefinition getField()
public static Environment newEnvironment(Environment env, Context ctx)
Copyright © 2017. All Rights Reserved.