mjc

org.multijava.mjc
Class JLocalVariableExpression

java.lang.Object
  extended byorg.multijava.util.Utils
      extended byorg.multijava.util.compiler.Phylum
          extended byorg.multijava.mjc.JPhylum
              extended byorg.multijava.mjc.JExpression
                  extended byorg.multijava.mjc.JLocalVariableExpression
All Implemented Interfaces:
CInitializable, Cloneable, Constants, Constants, PhylumType
Direct Known Subclasses:
JOuterLocalVariableExpression, JThisExpression.JThisExpression$2

public class JLocalVariableExpression
extends JExpression
implements CInitializable

This class represents the AST node for local variable references.


Field Summary
private  CType type
          The type of this local variable expression.
(package private)  JLocalVariable variable
           
 
Fields inherited from class org.multijava.mjc.JExpression
EMPTY
 
Fields inherited from class org.multijava.util.compiler.Phylum
 
Fields inherited from class org.multijava.util.Utils
DBG_LEVEL_HIGH, DBG_LEVEL_LOW, DBG_LEVEL_NO
 
Fields inherited from interface org.multijava.mjc.Constants
ACC_MODIFIER_FLAGS_MASK, ACC_NON_NULL, ACC_NON_NULL_BY_DEFAULT, ACC_NULLABLE, ACC_NULLABLE_BY_DEFAULT, ACC_PURE, ACCESS_FLAG_ARRAY, ACCESS_FLAG_NAMES, AMID_JAVA_MATH, AMID_MAX, AMID_SAFE_MATH, CMP_VERSION, IMPLICITLY_NON_NULL, JAV_ASSERTION_ERROR, JAV_CLASS, JAV_CLASSLOADER, JAV_CLASSNOTFOUND_EXCEPTION, JAV_CLONE, JAV_CLONEABLE, JAV_CONSTRUCTOR, JAV_ERROR, JAV_EXCEPTION, JAV_INIT, JAV_LENGTH, JAV_NAME_SEPARATOR, JAV_NOCLASSDEFFOUND_ERROR, JAV_OBJECT, JAV_OUTER_THIS, JAV_RMJ_RUNTIME_EXCEPTION, JAV_RUNTIME, JAV_RUNTIME_EXCEPTION, JAV_SERIALIZABLE, JAV_STATIC_INIT, JAV_STRING, JAV_STRINGBUFFER, JAV_SUPER, JAV_THIS, JAV_THROWABLE, MJ_ANCHOR, NULLITY_MODS, OPE_BAND, OPE_BNOT, OPE_BOR, OPE_BSR, OPE_BXOR, OPE_EQ, OPE_GE, OPE_GT, OPE_LAND, OPE_LE, OPE_LNOT, OPE_LOR, OPE_LT, OPE_MINUS, OPE_NE, OPE_PERCENT, OPE_PLUS, OPE_POSTDEC, OPE_POSTINC, OPE_PREDEC, OPE_PREINC, OPE_SIMPLE, OPE_SL, OPE_SLASH, OPE_SR, OPE_STAR, TID_ARRAY, TID_BOOLEAN, TID_BYTE, TID_CHAR, TID_CLASS, TID_DOUBLE, TID_FLOAT, TID_INT, TID_LONG, TID_MAX, TID_SHORT, TID_VOID, UNIV_ARRAY_TMP, UNIV_TMP
 
Fields inherited from interface org.multijava.util.classfile.Constants
ACC_ABSTRACT, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_VOLATILE, ATT_ANCHOR, ATT_BRIDGE, ATT_CODE, ATT_CONSTANTVALUE, ATT_DEPRECATED, ATT_DISPATCHER, ATT_EXCEPTIONS, ATT_GENERIC, ATT_GENERIC_FUNCTIONS, ATT_INNERCLASSES, ATT_LINENUMBERTABLE, ATT_LOCALVARIABLETABLE, ATT_MM_BODY, ATT_REDIRECTOR, ATT_RMJ_GLUE, ATT_RMJ_SIGNATURE, ATT_RUNTIME_VISIBLE_ANNOTATIONS, ATT_RUNTIME_VISIBLE_PARAMETER_ANNOTATIONS, ATT_SIGNATURE, ATT_SOURCEFILE, ATT_SYNTHETIC, ATT_UNIVERSE_FIELD, ATT_UNIVERSE_METHOD, ATT_UNIVERSE_VERSION, CST_CLASS, CST_DOUBLE, CST_FIELD, CST_FLOAT, CST_INTEGER, CST_INTERFACEMETHOD, CST_LONG, CST_METHOD, CST_NAMEANDTYPE, CST_STRING, CST_UTF8, ENV_DEBUG_MODE, ENV_USE_CACHE, JAVA_MAGIC, JAVA_MAJOR, JAVA_MINOR, MAX_CODE_PER_METHOD, 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_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_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_dup2, opc_dup2_x1, opc_dup2_x2, opc_dup_x1, opc_dup_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_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_ladd, opc_laload, opc_land, opc_lastore, opc_lcmp, opc_lconst_0, opc_lconst_1, opc_ldc, opc_ldc2_w, opc_ldc_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_wide, opc_xxxunusedxxx, POO_ASCII_CONSTANT, POO_CLASS_CONSTANT, POO_DOUBLE_CONSTANT, POO_FLOAT_CONSTANT, POO_INTEGER_CONSTANT, POO_LONG_CONSTANT, POO_NAT_CONSTANT, POO_REF_CONSTANT, POO_STRING_CONSTANT, TYP_ADDRESS, TYP_DOUBLE, TYP_FLOAT, TYP_INT, TYP_LONG, TYP_REFERENCE, TYP_VOID
 
Constructor Summary
JLocalVariableExpression(TokenReference where, JLocalVariable variable)
          Construct a node in the parsing tree
 
Method Summary
 void accept(MjcVisitor p)
          Accepts the specified visitor
 boolean equals(Object o)
           
 void genCode(CodeSequence code)
          Generates a sequence of bytecodes
 void genEndStoreCode(CodeSequence code, boolean discardValue)
          Generates a sequence of bytecodes
 void genStartStoreCode(CodeSequence code)
          Generates a sequence of bytecodes
 JLiteral getLiteral()
          Returns the literal value of this field
 int getPosition()
          Returns the position of this variable in the sets of local vars
 CType getType()
          Compute the type of this expression (called after parsing)
 int hashCode()
          Throws a runtime exception because hashCode isn't properly implemented yet.
 String ident()
           
 void initialize(CContextType context)
          Records that this variable is initialized in the given context.
 boolean isConstant()
          Returns true iff this expression is constant.
 boolean isDeclaredNonNull()
          Returns true iff the variable, field or method represente by this expression was declared non_null.
 boolean isDefinitelyAssigned(CContextType context)
          Returns true if this field is already initialized.
private  boolean isDefinitelyUnassigned(CContextType context)
           
 boolean isLValue(CExpressionContextType context)
          Returns true if this field accept assignment
 boolean isMaybeInitializable()
          Indicates whether this expression can appear on the left-hand side of an assignment or in an increment or decrement operation.
 boolean isNonNull(CContextType context)
          Returns true iff the value represented by this expression is non-null
 String toString()
           
 JExpression typecheck(CExpressionContextType context)
          Typechecks the expression and mutates the context to record information gathered during typechecking.
 JLocalVariable variable()
           
 
Methods inherited from class org.multijava.mjc.JExpression
buildUniverseDynChecks, clone, convertType, dumpArray, fail, genBranch, genUniverseDynCheckCode, getApparentType, getBooleanLiteral, getFANonNulls, getFANulls, getNumberLiteral, getOrdinalLiteral, getRealLiteral, getStringLiteral, isAssignableTo, isBooleanLiteral, isLiteral, isOrdinalLiteral, isRealLiteral, isStatementExpression, isStringLiteral, typecheck, unParenthesize
 
Methods inherited from class org.multijava.mjc.JPhylum
check, check, check, check, fail, fail, warn, warn, warn, warn
 
Methods inherited from class org.multijava.util.compiler.Phylum
getTokenReference, setTokenReference
 
Methods inherited from class org.multijava.util.Utils
assertTrue, assertTrue, combineArrays, escapeString, escapeString, fail, fail, getFilePath, hasFlag, hasOtherFlags, parsePathParts, relativePathTo, splitQualifiedName, splitQualifiedName, stripJavaModifiers, stripNonJavaModifiers, stripPrivateModifier, unescapeString, vectorToArray, vectorToIntArray
 
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
 

Field Detail

variable

JLocalVariable variable

type

private CType type
The type of this local variable expression. If the local variable is the target of an assignment, the type simply corresponds to its declared type. Otherwise, the type of this expression is the type resulting from applying capture conversion (JLS3 5.1.10) to the declared type of the variable.

Constructor Detail

JLocalVariableExpression

public JLocalVariableExpression(TokenReference where,
                                JLocalVariable variable)
Construct a node in the parsing tree

Parameters:
where - the line of this node in the source code
Method Detail

isMaybeInitializable

public boolean isMaybeInitializable()
Indicates whether this expression can appear on the left-hand side of an assignment or in an increment or decrement operation.


 also ensures true;
 

Overrides:
isMaybeInitializable in class JExpression

isLValue

public boolean isLValue(CExpressionContextType context)
Returns true if this field accept assignment

Specified by:
isLValue in interface CInitializable
Returns:
true if this expression is an LValue at call time a final variable is a lvalue until it is initialized

isDefinitelyAssigned

public boolean isDefinitelyAssigned(CContextType context)
Returns true if this field is already initialized.

Specified by:
isDefinitelyAssigned in interface CInitializable
Returns:
true if this expression is a variable already valued

isDefinitelyUnassigned

private boolean isDefinitelyUnassigned(CContextType context)

initialize

public void initialize(CContextType context)
                throws UnpositionedError
Records that this variable is initialized in the given context.

Specified by:
initialize in interface CInitializable
Throws:
UnpositionedError - if this is a final field and has already been assigned to

getPosition

public int getPosition()
Returns the position of this variable in the sets of local vars


getType

public CType getType()
Compute the type of this expression (called after parsing)

Returns:
the type of this expression

isNonNull

public boolean isNonNull(CContextType context)
Returns true iff the value represented by this expression is non-null

Overrides:
isNonNull in class JExpression

isDeclaredNonNull

public boolean isDeclaredNonNull()
Returns true iff the variable, field or method represente by this expression was declared non_null.

Overrides:
isDeclaredNonNull in class JExpression

ident

public String ident()

isConstant

public boolean isConstant()
Returns true iff this expression is constant.

Overrides:
isConstant in class JExpression

getLiteral

public JLiteral getLiteral()
Returns the literal value of this field

Overrides:
getLiteral in class JExpression

variable

public JLocalVariable variable()

toString

public String toString()
Overrides:
toString in class Object

typecheck

public JExpression typecheck(CExpressionContextType context)
                      throws PositionedError
Typechecks the expression and mutates the context to record information gathered during typechecking.

Parameters:
context - the context in which this expression appears
Returns:
a desugared Java expression (see JExpression.typecheck())
Throws:
PositionedError - if the check fails

accept

public void accept(MjcVisitor p)
Accepts the specified visitor

Parameters:
p - the visitor

equals

public boolean equals(Object o)
Overrides:
equals in class Object

hashCode

public int hashCode()
Throws a runtime exception because hashCode isn't properly implemented yet.

Overrides:
hashCode in class Object

genCode

public void genCode(CodeSequence code)
Generates a sequence of bytecodes

Parameters:
code - the code list

genStartStoreCode

public void genStartStoreCode(CodeSequence code)
Generates a sequence of bytecodes

Specified by:
genStartStoreCode in interface CInitializable
Parameters:
code - the code list

genEndStoreCode

public void genEndStoreCode(CodeSequence code,
                            boolean discardValue)
Generates a sequence of bytecodes

Specified by:
genEndStoreCode in interface CInitializable
Parameters:
code - the code list

mjc

mjc is Copyright (C) 2000-2004 by Iowa State University and is distributed under the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. mjc is based in part on the Kopi project Copyright (C) 1990-99 DMS Decision Management Systems Ges.m.b.H.