OpNodes
authorroot <root>
Fri, 17 Feb 2006 01:11:59 +0000 (01:11 +0000)
committerroot <root>
Fri, 17 Feb 2006 01:11:59 +0000 (01:11 +0000)
Robust/src/IR/Flat/BuildFlat.java
Robust/src/IR/Tree/OpNode.java

index 0c44e8337a6eb73a2147cdf81ea62612f4044378..d14bc6a3fc9a61f1dd969f1cd5afed63812236fa 100644 (file)
@@ -85,7 +85,21 @@ public class BuildFlat {
     }
 
     private NodePair flattenOpNode(OpNode on,TempDescriptor out_temp) {
-       throw new Error();
+       TempDescriptor temp_left=TempDescriptor.tempFactory("leftop");
+       TempDescriptor temp_right=TempDescriptor.tempFactory("rightop");
+       NodePair left=flattenExpressionNode(on.getLeft(),temp_left);
+       NodePair right;
+       if (on.getRight()!=null)
+           right=flattenExpressionNode(on.getRight(),temp_right);
+       else {
+           FlatNop nop=new FlatNop();
+           right=new NodePair(nop,nop);
+       }
+       Operation op=on.getOp();
+       FlatOpNode fon=new FlatOpNode(out_temp,temp_left,temp_right,op);
+       left.getEnd().addNext(right.getBegin());
+       right.getEnd().addNext(fon);
+       return new NodePair(left.getBegin(),fon);
     }
 
     private NodePair flattenExpressionNode(ExpressionNode en, TempDescriptor out_temp) {
index c85b951b8e3aa1c1ca0ceb1981fd4693be0c192e..3b80faba71228806e797dcf995d698e00c516302 100644 (file)
@@ -18,6 +18,18 @@ public class OpNode extends ExpressionNode {
        op=o;
     }
 
+    public ExpressionNode getLeft() {
+       return left;
+    }
+
+    public ExpressionNode getRight() {
+       return right;
+    }
+
+    public Operation getOp() {
+       return op;
+    }
+
     public String printNode(int indent) {
        if (right==null)
            return op.toString()+"("+left.printNode(indent)+")";