Fix bug for MGC garbage collection
[IRC.git] / Robust / src / IR / Flat / FlatOpNode.java
1 package IR.Flat;
2 import java.util.Vector;
3 import IR.*;
4
5 public class FlatOpNode extends FlatNode {
6   TempDescriptor dest;
7   TempDescriptor left;
8   TempDescriptor right;
9   Operation op;
10
11   public FlatOpNode(TempDescriptor dest, TempDescriptor left, TempDescriptor right, Operation op) {
12     this.dest=dest;
13     this.left=left;
14     this.right=right;
15     this.op=op;
16   }
17
18   public FlatNode clone(TempMap t) {
19     return new FlatOpNode(t.tempMap(dest), t.tempMap(left), t.tempMap(right), op);
20   }
21   public void rewriteDef(TempMap t) {
22     dest=t.tempMap(dest);
23   }
24   public void rewriteUse(TempMap t) {
25     left=t.tempMap(left);
26     right=t.tempMap(right);
27   }
28
29   public TempDescriptor getDest() {
30     return dest;
31   }
32
33   public TempDescriptor getLeft() {
34     return left;
35   }
36
37   public TempDescriptor getRight() {
38     return right;
39   }
40
41   public Operation getOp() {
42     return op;
43   }
44
45   public String toString() {
46     String str = "FlatOpNode_"+dest.toString();
47     if (right!=null)
48       str += "="+left.toString()+op.toString()+right.toString();
49     else if (op.getOp()==Operation.ASSIGN)
50       str += " = "+left.toString();
51     else
52       str += " "+op.toString() +" "+left.toString();
53     return str;
54   }
55
56   public int kind() {
57     return FKind.FlatOpNode;
58   }
59
60   public TempDescriptor [] readsTemps() {
61     if (right!=null)
62       return new TempDescriptor [] {left,right};
63     else
64       return new TempDescriptor [] {left};
65   }
66
67   public TempDescriptor [] writesTemps() {
68     return new TempDescriptor [] {dest};
69   }
70 }