at.dms.kjc
Class CSourceMethod

java.lang.Object
  |
  +--at.dms.util.Utils
        |
        +--at.dms.kjc.CMember
              |
              +--at.dms.kjc.CMethod
                    |
                    +--at.dms.kjc.CSourceMethod
All Implemented Interfaces:
Constants, Constants

public class CSourceMethod
extends CMethod

This class represents an exported method declaration of a class or interface.


Fields inherited from class at.dms.kjc.CMember
ACCESSOR_PREFIX
 
Fields inherited from class at.dms.util.Utils
DBG_LEVEL_HIGH, DBG_LEVEL_LOW, DBG_LEVEL_NO
 
Fields inherited from interface at.dms.kjc.Constants
CMP_VERSION, JAV_CLASS, JAV_CLONE, JAV_CLONEABLE, JAV_CONSTRUCTOR, JAV_ERROR, JAV_EXCEPTION, JAV_INIT, JAV_LENGTH, JAV_NAME_SEPARATOR, JAV_OBJECT, JAV_OUTER_THIS, JAV_RUNTIME, JAV_RUNTIME_EXCEPTION, JAV_STATIC_INIT, JAV_STRING, JAV_STRINGBUFFER, JAV_THIS, JAV_THROWABLE, OPE_BAND, OPE_BNOT, OPE_BOR, OPE_BSR, OPE_BXOR, OPE_EQ, OPE_GE, OPE_GT, OPE_LE, OPE_LNOT, 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_SHORT, TID_VOID
 
Fields inherited from interface at.dms.classfile.Constants
ACC_ABSTRACT, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_NBR_FLAGS, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_TRANSIENT, ACC_VOLATILE, ATT_CODE, ATT_CONSTANTVALUE, ATT_DEPRECATED, ATT_EXCEPTIONS, ATT_GENERIC, ATT_INNERCLASSES, ATT_LINENUMBERTABLE, ATT_LOCALVARIABLETABLE, ATT_SOURCEFILE, ATT_SYNTHETIC, 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_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_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_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_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
CSourceMethod(CClass owner, int modifiers, java.lang.String ident, CType returnType, CType[] paramTypes, CClassType[] exceptions, boolean deprecated, JBlock body, int optimizingLevel)
          Constructs a source method export.
 
Method Summary
 CodeInfo genCode()
          Generates code for this method.
 MethodInfo genMethodInfo()
          Generate the code in a class file
 CSourceMethod getAccessor()
          Generates or returns an already-generated method that can access this method from classes that should be able to access this method per the JLS, but can't because the JVM doesn't allow it.
 java.lang.String getSignature()
           
 CSourceMethod getSuperAccessor()
          Generates or returns an already-generated method that can access the super-method of this method from classes that should be able to access this method per the JLS, but can't because the JVM doesn't implement it.
 boolean isUsed()
           
 void setUsed()
           
 
Methods inherited from class at.dms.kjc.CMethod
equals, genCode, getMethod, getParameters, getReturnType, getThrowables, isAbstract, isConstructor, isMatching, isMatchingParams, isMoreSpecificThan, isNative, setThrowables, toString
 
Methods inherited from class at.dms.kjc.CMember
getCClass, getField, getIdent, getJavaName, getModifiers, getOwner, getPrefixName, getQualifiedName, isAccessible, isDeprecated, isFinal, isPrivate, isProtected, isPublic, isStatic, isSynthetic, mustUseAccessorMethod, setModifiers, setSynthetic
 
Methods inherited from class at.dms.util.Utils
assert, assert, fail, fail, hasFlag, hasMoreThanOneFlag, hasOtherFlags, splitQualifiedName, splitQualifiedName, vectorToArray, vectorToIntArray
 
Methods inherited from class java.lang.Object
, clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

CSourceMethod

public CSourceMethod(CClass owner,
                     int modifiers,
                     java.lang.String ident,
                     CType returnType,
                     CType[] paramTypes,
                     CClassType[] exceptions,
                     boolean deprecated,
                     JBlock body,
                     int optimizingLevel)
Constructs a source method export.
Parameters:
owner - The owner of this method.
modifiers - The modifiers on this method.
ident - The ident of this method.
returnType - The return type of this method.
paramTypes - The parameter types of this method.
exceptions - A list of all exceptions in the throws list.
deprecated - Is this method deprecated.
body - The source code.
optimizingLevel - The optimization level.
Method Detail

isUsed

public boolean isUsed()

setUsed

public void setUsed()

genMethodInfo

public MethodInfo genMethodInfo()
Generate the code in a class file
Overrides:
genMethodInfo in class CMethod

getAccessor

public CSourceMethod getAccessor()
                          throws PositionedError
Generates or returns an already-generated method that can access this method from classes that should be able to access this method per the JLS, but can't because the JVM doesn't allow it.

This is the case for inner classes calling a private method in an outer class, or an outer class calling a private method in an inner class.

The accessor method will have package-only access rights, which is okay for inner classes, since they always reside in the same package as the class itself.


getSuperAccessor

public CSourceMethod getSuperAccessor()
                               throws PositionedError
Generates or returns an already-generated method that can access the super-method of this method from classes that should be able to access this method per the JLS, but can't because the JVM doesn't implement it.

This is the case for inner classes calling a super-method of an outer class.

The accessor method will have package-only access rights, which is okay for inner classes, since they always reside in the same package as the class itself.


getSignature

public java.lang.String getSignature()
Overrides:
getSignature in class CMethod
Returns:
the signature of this method.

genCode

public CodeInfo genCode()
Generates code for this method.