Bug fixes for MGC
[IRC.git] / Robust / src / IR / Tree / MethodInvokeNode.java
1 package IR.Tree;
2 import java.util.Vector;
3 import IR.NameDescriptor;
4 import IR.MethodDescriptor;
5 import IR.TypeDescriptor;
6
7 public class MethodInvokeNode extends ExpressionNode {
8   Vector argumentlist;
9   String methodid;
10   NameDescriptor basename;
11   ExpressionNode en;
12   MethodDescriptor md;
13
14   public MethodInvokeNode(NameDescriptor name) {
15     methodid=name.getIdentifier();
16     if (name.getBase()!=null) {
17       basename=name.getBase();
18     }
19     argumentlist=new Vector();
20     en=null;
21     md=null;
22   }
23
24   public MethodInvokeNode(String methodid, ExpressionNode exp) {
25     this.methodid=methodid;
26     this.en=exp;
27     argumentlist=new Vector();
28     md=null;
29     this.basename=null;
30   }
31
32   public NameDescriptor getBaseName() {
33     return basename;
34   }
35
36   public String getMethodName() {
37     return methodid;
38   }
39
40   public ExpressionNode getExpression() {
41     return en;
42   }
43
44   public TypeDescriptor getType() {
45     return md.getReturnType();
46   }
47
48   public void setExpression(ExpressionNode en) {
49     this.en=en;
50   }
51
52   public void setMethod(MethodDescriptor md) {
53     this.md=md;
54   }
55
56   public MethodDescriptor getMethod() {
57     return md;
58   }
59
60   public void addArgument(ExpressionNode en) {
61     argumentlist.add(en);
62   }
63   
64   public void setArgument(ExpressionNode en, int index) {
65     argumentlist.setElementAt(en, index);
66   }
67
68   public int numArgs() {
69     return argumentlist.size();
70   }
71
72   public ExpressionNode getArg(int i) {
73     return (ExpressionNode) argumentlist.get(i);
74   }
75
76   public String printNode(int indent) {
77     String st;
78     if (en!=null)
79       st=en.printNode(indent)+"."+methodid+"(";
80     else
81       st=methodid+"(";
82
83     for(int i=0; i<argumentlist.size(); i++) {
84       ExpressionNode en=(ExpressionNode)argumentlist.get(i);
85       st+=en.printNode(indent);
86       if ((i+1)!=argumentlist.size())
87         st+=", ";
88     }
89     return st+")";
90   }
91   public int kind() {
92     return Kind.MethodInvokeNode;
93   }
94   
95   public Long evaluate() {
96     eval = null;
97     return eval; //null;
98   }
99 }