at.dms.kjc
Class JMethodDeclaration

java.lang.Object
  extended by at.dms.util.Utils
      extended by at.dms.compiler.Phylum
          extended by at.dms.kjc.JPhylum
              extended by at.dms.kjc.JMemberDeclaration
                  extended by at.dms.kjc.JMethodDeclaration
All Implemented Interfaces:
Constants, DeepCloneable, Finalizable, Serializable
Direct Known Subclasses:
JConstructorDeclaration, JInitializerDeclaration

public class JMethodDeclaration
extends JMemberDeclaration

This class represents a Java method declaration in the syntax tree.

See Also:
Serialized Form

Field Summary
protected  JBlock body
           
protected  CClassType[] exceptions
           
protected  String ident
           
protected  int modifiers
           
protected  JFormalParameter[] parameters
           
protected  CType returnType
           
 
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 JMethodDeclaration()
           
  JMethodDeclaration(CType returnType, String ident, JFormalParameter[] parameters, JBlock body)
           
  JMethodDeclaration(String comment)
          Dummy JMethodDeclarations should now include comment...
  JMethodDeclaration(TokenReference where, int modifiers, CType returnType, String ident, JFormalParameter[] parameters, CClassType[] exceptions, JBlock body, JavadocComment javadoc, JavaStyleComment[] comments)
          Constructs a method declaration node in the syntax tree.
 
Method Summary
 Object accept(AttributeVisitor p)
          Accepts the specified attribute visitor
 void accept(KjcVisitor p)
          Accepts the specified visitor
 void addAllStatements(int pos, List lst)
          Adds all statements in
 void addAllStatements(List lst)
          Adds all statements in
 void addParameter(JFormalParameter param)
          Inserts
 void addStatement(JStatement statement)
          Adds
 void addStatementFirst(JStatement statement)
          Adds
 void checkBody1(CClassContext context)
          Check expression and evaluate and alter context
 CSourceMethod checkInterface(CClassContext context)
          Second pass (quick), check interface looks good Exceptions are not allowed here, this pass is just a tuning pass in order to create informations about exported elements such as Classes, Interfaces, Methods, Constructors and Fields
 Object deepClone()
          Returns a deep clone of this object.
protected  void deepCloneInto(JMethodDeclaration other)
          Clones all fields of this into
 boolean doesIO()
          Returns whether this has a non-zero push, pop, or peek rate.
static JMethodDeclaration[] EMPTY()
           
 void genCode(CodeSequence code)
          Generates a sequence of bytescodes
 JBlock getBody()
          Returns the body of this.
 String getName()
          Return identifier of this method.
 JFormalParameter[] getParameters()
          Gets parameters of this.
 JExpression getPeek()
           
 int getPeekInt()
          Returns how many items are peeked.
 String getPeekString()
          Returns string representation of peek rate (either in literal or range, like [1,2,3]).
 JExpression getPop()
           
 int getPopInt()
          Returns how many items are popped.
 String getPopString()
          Returns string representation of pop rate (either in literal or range, like [1,2,3]).
 JExpression getPush()
           
 int getPushInt()
          Returns how many items are pushed.This will throw an exception if the integral numbers haven't been calculated yet--in this case one can only get the JExpression, but calling getPush.
 String getPushString()
          Returns string representation of push rate (either in literal or range, like [1,2,3]).
 CType getReturnType()
          Return ctype return type of this method.
 ListIterator getStatementIterator()
          Returns iterator of statements in this.
 List getStatements()
          Returns list of statements in this.
 void setBody(JBlock body)
          Sets the body of this
 void setName(String str)
          Set method name to
 void setParameters(JFormalParameter[] param)
           
 void setPeek(int p)
           
 void setPeek(JExpression p)
           
 void setPop(int p)
           
 void setPop(JExpression p)
           
 void setPush(int p)
           
 void setPush(JExpression p)
           
 String toString()
           
 
Methods inherited from class at.dms.kjc.JMemberDeclaration
deepCloneInto, genComments, genComments1, getCClass, getField, getMethod, isDeprecated, setInterface
 
Methods inherited from class at.dms.kjc.JPhylum
assertMutable, check, check, check, check, deepCloneInto, fail, setLineNumber
 
Methods inherited from class at.dms.compiler.Phylum
deepCloneInto, getTokenReference, setTokenReference
 
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
 

Field Detail

modifiers

protected int modifiers

returnType

protected CType returnType

ident

protected String ident

parameters

protected JFormalParameter[] parameters

exceptions

protected CClassType[] exceptions

body

protected JBlock body
Constructor Detail

JMethodDeclaration

protected JMethodDeclaration()

JMethodDeclaration

public JMethodDeclaration(String comment)
Dummy JMethodDeclarations should now include comment... (mostly Debugging aide) Replaces new JMethodDeclaration() in code since the constructor with 0 parameters is reserved for the cloner. Sets all io rates to 0, parameters to EMPTY, exceptions to EMPTY body to the passed comment as a block, returnType to Void.

Parameters:
comment - is for use in debugging Since this comment is often lost in making copies, it is included in C / C++ comment form in the ident.

JMethodDeclaration

public JMethodDeclaration(TokenReference where,
                          int modifiers,
                          CType returnType,
                          String ident,
                          JFormalParameter[] parameters,
                          CClassType[] exceptions,
                          JBlock body,
                          JavadocComment javadoc,
                          JavaStyleComment[] comments)
Constructs a method declaration node in the syntax tree.

Parameters:
where - the line of this node in the source code
modifiers - the list of modifiers of the method
returnType - the return type of the method
ident - the name of the method
parameters - the parameters of the method
exceptions - the exceptions declared by the method
body - the body of the method
javadoc - java documentation comments
comments - other comments in the source code

JMethodDeclaration

public JMethodDeclaration(CType returnType,
                          String ident,
                          JFormalParameter[] parameters,
                          JBlock body)
Method Detail

setName

public void setName(String str)
Set method name to
name


getName

public String getName()
Return identifier of this method.


getReturnType

public CType getReturnType()
Return ctype return type of this method.


addParameter

public void addParameter(JFormalParameter param)
Inserts
param
as the first parameter of this.


addStatement

public void addStatement(JStatement statement)
Adds
statement
to the end of the statements in this.


addStatementFirst

public void addStatementFirst(JStatement statement)
Adds
statement
to the end of the statements in this.


addAllStatements

public void addAllStatements(int pos,
                             List lst)
Adds all statements in
lst
to this, at the specified position.


addAllStatements

public void addAllStatements(List lst)
Adds all statements in
lst
to end of this.


doesIO

public boolean doesIO()
Returns whether this has a non-zero push, pop, or peek rate.


setPeek

public void setPeek(JExpression p)

setPop

public void setPop(JExpression p)

setPush

public void setPush(JExpression p)

setPeek

public void setPeek(int p)

setPop

public void setPop(int p)

setPush

public void setPush(int p)

getPeek

public JExpression getPeek()

getPop

public JExpression getPop()

getPush

public JExpression getPush()

getPopInt

public int getPopInt()
Returns how many items are popped. This will throw an exception if the integral numbers haven't been calculated yet--in this case one can only get the JExpression, but calling getPop.


getPeekInt

public int getPeekInt()
Returns how many items are peeked. This will throw an exception if the integral numbers haven't been calculated yet--in this case one can only get the JExpression, but calling getPeek.


getPushInt

public int getPushInt()
Returns how many items are pushed.This will throw an exception if the integral numbers haven't been calculated yet--in this case one can only get the JExpression, but calling getPush.


getPopString

public String getPopString()
Returns string representation of pop rate (either in literal or range, like [1,2,3]).


getPeekString

public String getPeekString()
Returns string representation of peek rate (either in literal or range, like [1,2,3]).


getPushString

public String getPushString()
Returns string representation of push rate (either in literal or range, like [1,2,3]).


checkInterface

public CSourceMethod checkInterface(CClassContext context)
                             throws PositionedError
Second pass (quick), check interface looks good Exceptions are not allowed here, this pass is just a tuning pass in order to create informations about exported elements such as Classes, Interfaces, Methods, Constructors and Fields

Returns:
true iff sub tree is correct enough to check code
Throws:
PositionedError - an error with reference to the source file

checkBody1

public void checkBody1(CClassContext context)
                throws PositionedError
Check expression and evaluate and alter context

Parameters:
context - the actual context of analyse
Throws:
PositionedError - Error catched as soon as possible

accept

public void accept(KjcVisitor p)
Accepts the specified visitor

Overrides:
accept in class JMemberDeclaration
Parameters:
p - the visitor

accept

public Object accept(AttributeVisitor p)
Accepts the specified attribute visitor

Overrides:
accept in class JMemberDeclaration
Parameters:
p - the visitor

genCode

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

Parameters:
code - the code list

getStatementIterator

public ListIterator getStatementIterator()
Returns iterator of statements in this.


getBody

public JBlock getBody()
Returns the body of this.


setBody

public void setBody(JBlock body)
Sets the body of this


getStatements

public List getStatements()
Returns list of statements in this.


getParameters

public JFormalParameter[] getParameters()
Gets parameters of this.


setParameters

public void setParameters(JFormalParameter[] param)

EMPTY

public static JMethodDeclaration[] EMPTY()

toString

public String toString()
Overrides:
toString in class Object

deepClone

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

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

deepCloneInto

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