start of new file
[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 int numArgs() {
65         return argumentlist.size();
66     }
67
68     public ExpressionNode getArg(int i) {
69         return (ExpressionNode) argumentlist.get(i);
70     }
71
72     public String printNode(int indent) {
73         String st;
74         if (en!=null)
75             st=en.printNode(indent)+"."+methodid+"(";
76         else
77             st=methodid+"(";
78
79         for(int i=0;i<argumentlist.size();i++) {
80             ExpressionNode en=(ExpressionNode)argumentlist.get(i);
81             st+=en.printNode(indent);
82             if ((i+1)!=argumentlist.size())
83                 st+=", ";
84         }
85         return st+")";
86     }
87     public int kind() {
88         return Kind.MethodInvokeNode;
89     }
90 }