This commit was manufactured by cvs2svn to create tag 'buildscript'.
[IRC.git] /
1 package IR.Tree;
2 import IR.Operation;
3
4 public class FlagOpNode extends FlagExpressionNode {
5   FlagExpressionNode left;
6   FlagExpressionNode right;
7   Operation op;
8
9   public FlagOpNode(FlagExpressionNode l, FlagExpressionNode r, Operation o) {
10     left=l;
11     right=r;
12     op=o;
13   }
14
15   public FlagOpNode(FlagExpressionNode l, Operation o) {
16     left=l;
17     right=null;
18     op=o;
19   }
20
21   public FlagExpressionNode getLeft() {
22     return left;
23   }
24
25   public FlagExpressionNode getRight() {
26     return right;
27   }
28
29   public Operation getOp() {
30     return op;
31   }
32
33   public String printNode(int indent) {
34     if (right==null)
35       return op.toString()+"("+left.printNode(indent)+")";
36     else
37       return left.printNode(indent)+" "+op.toString()+" "+right.printNode(indent);
38   }
39
40   public int kind() {
41     return Kind.FlagOpNode;
42   }
43
44   public DNFFlag getDNF() {
45     DNFFlag leftflag=left.getDNF();
46     DNFFlag rightflag=right!=null ? right.getDNF() : null;
47
48     if (op.getOp()==Operation.LOGIC_NOT) {
49       return leftflag.not();
50     } else if (op.getOp()==Operation.LOGIC_OR) {
51       return leftflag.or(rightflag);
52     } else if (op.getOp()==Operation.LOGIC_AND) {
53       return leftflag.and(rightflag);
54     } else throw new Error();
55   }
56 }