Package org.glassfish.rmic.tools.tree
Class UplevelReference
- java.lang.Object
-
- org.glassfish.rmic.tools.tree.UplevelReference
-
- All Implemented Interfaces:
Constants
,RuntimeConstants
public class UplevelReference extends java.lang.Object implements Constants
A reference from one scope to another. 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) ClassDefinition
client
The class in which the reference occurs.(package private) LocalMember
localArgument
The local variable which bears a copy of the target's value, for all methods of the client class.(package private) MemberDefinition
localField
A private synthetic field of the client class which bears a copy of the target's value.(package private) UplevelReference
next
The next item on the references list of the client.(package private) LocalMember
target
The field being referenced.-
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 UplevelReference(ClassDefinition client, LocalMember target)
constructor
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
codeArguments(Environment env, Context ctx, Assembler asm, long where, MemberDefinition conField)
Code is being generated for a call to a constructor of the client class.void
codeInitialization(Environment env, Context ctx, Assembler asm, long where, MemberDefinition conField)
Code is being generated for a constructor of the client class.ClassDefinition
getClient()
the client classLocalMember
getLocalArgument()
the local argument for this referenceMemberDefinition
getLocalField()
the field allocated in the client for this referenceMemberDefinition
getLocalField(Environment env)
Get the local field, creating one if necessary.UplevelReference
getNext()
the next reference in the client's listLocalMember
getTarget()
the target of this referenceUplevelReference
insertInto(UplevelReference references)
Insert self into a list of references.boolean
isClientOuterField()
Tell if this uplevel reference is the up-level "this" pointer of an inner class.boolean
isEarlierThan(UplevelReference other)
Tells if self precedes the other in the canonical ordering.boolean
localArgumentAvailable(Environment env, Context ctx)
Tell if my local argument is directly available in this context.Expression
makeFieldReference(Environment env, Context ctx)
As with makeLocalReference(), build a locally-usable reference.private void
makeLocalField(Environment env)
Expression
makeLocalReference(Environment env, Context ctx)
Assuming noteReference() is all taken care of, build an uplevel reference.void
noteReference(Environment env, Context ctx)
Process an uplevel reference.java.lang.String
toString()
void
willCodeArguments(Environment env, Context ctx)
During the inline phase, call this on a list of references for which the code phase will later emit arguments.
-
-
-
Field Detail
-
client
ClassDefinition client
The class in which the reference occurs.
-
target
LocalMember target
The field being referenced. It is always a final argument or a final local variable. (An uplevel reference to a field of a class C is fetched through an implicit uplevel reference to C.this, which is an argument.)
-
localArgument
LocalMember localArgument
The local variable which bears a copy of the target's value, for all methods of the client class. Its name is "this$C" forthis.C
or "val$x" for other target variablesx
.This local variable is always a constructor argument, and is therefore usable only in the constructor and in initializers. All other methods use the local field.
- See Also:
localField
-
localField
MemberDefinition localField
A private synthetic field of the client class which bears a copy of the target's value. The compiler tries to avoid creating it if possible. The field has the same name and type as the localArgument.- See Also:
localArgument
-
next
UplevelReference next
The next item on the references list of the client.
-
-
Constructor Detail
-
UplevelReference
public UplevelReference(ClassDefinition client, LocalMember target)
constructor
-
-
Method Detail
-
insertInto
public UplevelReference insertInto(UplevelReference references)
Insert self into a list of references. Maintain "isEarlierThan" as an invariant of the list. This is important (a) to maximize stability of signatures, and (b) to allow uplevel "this" parameters to come at the front of every argument list they appear in.
-
isEarlierThan
public final boolean isEarlierThan(UplevelReference other)
Tells if self precedes the other in the canonical ordering.
-
getTarget
public final LocalMember getTarget()
the target of this reference
-
getLocalArgument
public final LocalMember getLocalArgument()
the local argument for this reference
-
getLocalField
public final MemberDefinition getLocalField()
the field allocated in the client for this reference
-
getLocalField
public final MemberDefinition getLocalField(Environment env)
Get the local field, creating one if necessary. The client class must not be frozen.
-
getClient
public final ClassDefinition getClient()
the client class
-
getNext
public final UplevelReference getNext()
the next reference in the client's list
-
isClientOuterField
public boolean isClientOuterField()
Tell if this uplevel reference is the up-level "this" pointer of an inner class. Such references are treated differently than others, because they affect constructor calls across compilation units.
-
localArgumentAvailable
public boolean localArgumentAvailable(Environment env, Context ctx)
Tell if my local argument is directly available in this context. If not, the uplevel reference will have to be via a class field.This must be called in a context which is local to the client of the uplevel reference.
-
noteReference
public void noteReference(Environment env, Context ctx)
Process an uplevel reference. The only decision to make at this point is whether to build a "localField" instance variable, which is done (lazily) when localArgumentAvailable() proves false.
-
makeLocalField
private void makeLocalField(Environment env)
-
makeLocalReference
public Expression makeLocalReference(Environment env, Context ctx)
Assuming noteReference() is all taken care of, build an uplevel reference.This must be called in a context which is local to the client of the uplevel reference.
-
makeFieldReference
public Expression makeFieldReference(Environment env, Context ctx)
As with makeLocalReference(), build a locally-usable reference. Ignore the availability of local arguments; always use a class field.
-
willCodeArguments
public void willCodeArguments(Environment env, Context ctx)
During the inline phase, call this on a list of references for which the code phase will later emit arguments. It will make sure that any "double-uplevel" values needed by the callee are also present at the call site.If any reference is a "ClientOuterField", it is skipped by this method (and by willCodeArguments). This is because
-
codeArguments
public void codeArguments(Environment env, Context ctx, Assembler asm, long where, MemberDefinition conField)
Code is being generated for a call to a constructor of the client class. Push an argument for the constructor.
-
codeInitialization
public void codeInitialization(Environment env, Context ctx, Assembler asm, long where, MemberDefinition conField)
Code is being generated for a constructor of the client class. Emit code which initializes the instance.
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
-