add support for super calls...ie...super.foo()
[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   boolean isSuper;
14
15   public MethodInvokeNode(NameDescriptor name) {
16     methodid=name.getIdentifier();
17     if (name.getBase()!=null) {
18       basename=name.getBase();
19     }
20     argumentlist=new Vector();
21     en=null;
22     md=null;
23     isSuper=false;
24   }
25
26   public MethodInvokeNode(String methodid, ExpressionNode exp) {
27     this.methodid=methodid;
28     this.en=exp;
29     argumentlist=new Vector();
30     md=null;
31     this.basename=null;
32     isSuper=false;
33   }
34
35   public void setSuper() {
36     isSuper=true;
37   }
38
39   public boolean getSuper() {
40     return isSuper;
41   }
42
43   public NameDescriptor getBaseName() {
44     return basename;
45   }
46
47   public String getMethodName() {
48     return methodid;
49   }
50
51   public ExpressionNode getExpression() {
52     return en;
53   }
54
55   public TypeDescriptor getType() {
56     return md.getReturnType();
57   }
58
59   public void setExpression(ExpressionNode en) {
60     this.en=en;
61   }
62
63   public void setMethod(MethodDescriptor md) {
64     this.md=md;
65   }
66
67   public MethodDescriptor getMethod() {
68     return md;
69   }
70
71   public void addArgument(ExpressionNode en) {
72     argumentlist.add(en);
73   }
74   
75   public void setArgument(ExpressionNode en, int index) {
76     argumentlist.setElementAt(en, index);
77   }
78
79   public int numArgs() {
80     return argumentlist.size();
81   }
82
83   public ExpressionNode getArg(int i) {
84     return (ExpressionNode) argumentlist.get(i);
85   }
86
87   public String printNode(int indent) {
88     String st;
89     if (en!=null)
90       st=en.printNode(indent)+"."+methodid+"(";
91     else
92       st=methodid+"(";
93
94     for(int i=0; i<argumentlist.size(); i++) {
95       ExpressionNode en=(ExpressionNode)argumentlist.get(i);
96       st+=en.printNode(indent);
97       if ((i+1)!=argumentlist.size())
98         st+=", ";
99     }
100     return st+")";
101   }
102   public int kind() {
103     return Kind.MethodInvokeNode;
104   }
105   
106   public Long evaluate() {
107     eval = null;
108     return eval; //null;
109   }
110 }