at.dms.kjc
Class CMethod

java.lang.Object
  extended by at.dms.util.Utils
      extended by at.dms.kjc.CMember
          extended by at.dms.kjc.CMethod
All Implemented Interfaces:
Constants, DeepCloneable, Serializable
Direct Known Subclasses:
CBinaryMethod, CSourceMethod

public abstract class CMethod
extends CMember

This class represents a class method.

See Also:
Serialized Form

Field Summary
 
Fields inherited from class at.dms.kjc.CMember
owner
 
Fields inherited from class at.dms.util.Utils
EMPTY_LIST, getForLoopCallers
 
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_BIT, TID_BOOLEAN, TID_BYTE, TID_CHAR, TID_CLASS, TID_DOUBLE, TID_FLOAT, TID_INT, TID_LONG, TID_SHORT, TID_VECTOR, TID_VOID, VECTOR_EMPTY
 
Fields inherited from interface at.dms.classfile.Constants
ACC_ABSTRACT, ACC_FINAL, ACC_INLINE, ACC_INTERFACE, ACC_NATIVE, 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
protected CMethod()
           
  CMethod(CClass owner, int modifiers, String ident, CType returnType, CType[] parameters, CClassType[] exceptions, boolean deprecated)
          Constructs a method member.
 
Method Summary
 void checkOverriding(CMethod superMethod)
          Checks that overriding/hiding is correct.
 Object deepClone()
          Returns a deep clone of this object.
protected  void deepCloneInto(CMethod other)
          Clones all fields of this into
 boolean equals(CMethod other)
          equals search if two methods have same signature
 void genCode(CodeSequence code, boolean nonVirtual)
          Generates a sequence of bytecode
 CMethod getMethod()
           
 CType[] getParameters()
           
 CType getReturnType()
           
 String getSignature()
           
 CClassType[] getThrowables()
           
 boolean hasSameSignature(CMethod other)
          Has this method the same signature as the one given as argument ? NOTE: return type not considered
 boolean isAbstract()
          Returns true iff this method is abstract.
 boolean isApplicableTo(String ident, CType[] actuals)
          Is this method applicable to the specified invocation (JLS 15.12.2.1) ?
 boolean isConstructor()
          Returns true iff this method is a constructor.
 boolean isMoreSpecificThan(CMethod other)
          Is this method more specific than the one given as argument (JLS 15.12.2.2) ?
 boolean isNative()
          Returns true iff this method is native.
 void setReturnType(CType type)
           
 void setThrowables(Hashtable<Serializable,CThrowableInfo> throwables)
          This method is used by initializers that knows throwables exceptions only after body was checked.
 String toString()
          Returns a string representation of this method.
 
Methods inherited from class at.dms.kjc.CMember
deepCloneInto, getCClass, getField, getIdent, getJavaName, getModifiers, getOwner, getPrefixName, getQualifiedName, isAccessible, isDeprecated, isFinal, isPrivate, isProtected, isPublic, isStatic, setModifiers
 
Methods inherited from class at.dms.util.Utils
asPercent, cellMathEquivalent, cMathEquivalent, cppMathEquivalent, deepCloneInto, equalArrays, fail, getEnvironmentVariable, getExpression, hasPeeks, initArray, initArray, initLiteralArray, intArrayToList, isMathMethod, isUniform, kopi_assert, kopi_assert, makeCountdownForLoop, makeDotFileName, makeForLoop, makeForLoop, makeForLoop, makeForLoopFieldIndex, makeForLoopLocalIndex, nextPow2, passThruParens, peelMarkers, popBeforePeek, readFile, removeUnusedPops, replaceAll, setupDotFileName, simplifyMathMethod, splitQualifiedName, splitQualifiedName, toArray, toIntArray, toVector, voidToInt, writeFile
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

CMethod

protected CMethod()

CMethod

public CMethod(CClass owner,
               int modifiers,
               String ident,
               CType returnType,
               CType[] parameters,
               CClassType[] exceptions,
               boolean deprecated)
Constructs a method member.

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
parameters - the parameters type of this method
exceptions - a list of all exceptions of the throws list
deprecated - is this method deprecated
Method Detail

getMethod

public CMethod getMethod()
Overrides:
getMethod in class CMember
Returns:
the interface

getReturnType

public final CType getReturnType()
Returns:
the type of this field

setReturnType

public final void setReturnType(CType type)
Parameters:
type - to replace current return type.

getParameters

public final CType[] getParameters()
Returns:
the type of this field

getSignature

public String getSignature()
Returns:
the type of this field

getThrowables

public CClassType[] getThrowables()
Returns:
the exceptions that can be thrown by this method

setThrowables

public void setThrowables(Hashtable<Serializable,CThrowableInfo> throwables)
This method is used by initializers that knows throwables exceptions only after body was checked.

Parameters:
throwables - the exceptions that can be thrown by this method

isNative

public boolean isNative()
Returns true iff this method is native.


isAbstract

public boolean isAbstract()
Returns true iff this method is abstract.


isConstructor

public boolean isConstructor()
Returns true iff this method is a constructor.


equals

public boolean equals(CMethod other)
equals search if two methods have same signature

Parameters:
other - the other method

isApplicableTo

public boolean isApplicableTo(String ident,
                              CType[] actuals)
Is this method applicable to the specified invocation (JLS 15.12.2.1) ?

Parameters:
ident - method invocation name
actuals - method invocation arguments

isMoreSpecificThan

public boolean isMoreSpecificThan(CMethod other)
Is this method more specific than the one given as argument (JLS 15.12.2.2) ?

Parameters:
other - the method to compare to

hasSameSignature

public boolean hasSameSignature(CMethod other)
Has this method the same signature as the one given as argument ? NOTE: return type not considered

Parameters:
other - the method to compare to

checkOverriding

public void checkOverriding(CMethod superMethod)
                     throws UnpositionedError
Checks that overriding/hiding is correct.

Parameters:
superMethod - method which it overrides
Throws:
UnositionedError - the analysis detected an error
UnpositionedError

toString

public String toString()
Returns a string representation of this method.

Overrides:
toString in class Object

genCode

public void genCode(CodeSequence code,
                    boolean nonVirtual)
Generates a sequence of bytecode

Parameters:
code - the code sequence
nonVirtual - force non-virtual dispatching

deepClone

public Object deepClone()
Returns a deep clone of this object.

Specified by:
deepClone in interface DeepCloneable
Overrides:
deepClone in class CMember

deepCloneInto

protected void deepCloneInto(CMethod other)
Clones all fields of this into
other