changes
authorbdemsky <bdemsky>
Thu, 16 Feb 2006 23:09:05 +0000 (23:09 +0000)
committerbdemsky <bdemsky>
Thu, 16 Feb 2006 23:09:05 +0000 (23:09 +0000)
Robust/src/IR/Flat/BuildFlat.java
Robust/src/IR/Flat/FlatReturnNode.java [new file with mode: 0644]
Robust/src/IR/Flat/ReturnNode.java [deleted file]
Robust/src/IR/Tree/BuildIR.java
Robust/src/IR/Tree/DeclarationNode.java
Robust/src/IR/VarDescriptor.java

index e00b609270b6a2e69eedbc6eafc19530369dde4f..b2aa3fdb8649ec0cb656838e777fca61b54e311d 100644 (file)
@@ -53,7 +53,57 @@ public class BuildFlat {
        return flattenExpressionNode(en.getExpression(),tmp);
     }
 
+    private NodePair flattenAssignmentNode(AssignmentNode an,TempDescriptor out_temp) {
+       throw new Error();
+    }
+
+    private NodePair flattenCastNode(CastNode cn,TempDescriptor out_temp) {
+       throw new Error();
+    }
+
+    private NodePair flattenCreateObjectNode(CreateObjectNode con,TempDescriptor out_temp) {
+       throw new Error();
+    }
+
+    private NodePair flattenFieldAccessNode(FieldAccessNode fan,TempDescriptor out_temp) {
+       throw new Error();
+    }
+
+    private NodePair flattenLiteralNode(LiteralNode ln,TempDescriptor out_temp) {
+       throw new Error();
+    }
+
+    private NodePair flattenMethodInvokeNode(MethodInvokeNode min,TempDescriptor out_temp) {
+       throw new Error();
+    }
+
+    private NodePair flattenNameNode(NameNode nn,TempDescriptor out_temp) {
+       throw new Error();
+    }
+
+    private NodePair flattenOpNode(OpNode on,TempDescriptor out_temp) {
+       throw new Error();
+    }
+
     private NodePair flattenExpressionNode(ExpressionNode en, TempDescriptor out_temp) {
+       switch(en.kind()) {
+       case Kind.AssignmentNode:
+           return flattenAssignmentNode((AssignmentNode)en,out_temp);
+       case Kind.CastNode:
+           return flattenCastNode((CastNode)en,out_temp);
+       case Kind.CreateObjectNode:
+           return flattenCreateObjectNode((CreateObjectNode)en,out_temp);
+       case Kind.FieldAccessNode:
+           return flattenFieldAccessNode((FieldAccessNode)en,out_temp);
+       case Kind.LiteralNode:
+           return flattenLiteralNode((LiteralNode)en,out_temp);
+       case Kind.MethodInvokeNode:
+           return flattenMethodInvokeNode((MethodInvokeNode)en,out_temp);
+       case Kind.NameNode:
+           return flattenNameNode((NameNode)en,out_temp);
+       case Kind.OpNode:
+           return flattenOpNode((OpNode)en,out_temp);
+       }
        throw new Error();
     }
 
@@ -131,10 +181,10 @@ public class BuildFlat {
        } else throw new Error();
     }
            
-    private NodePair flattenReturnNode(IR.Tree.ReturnNode rntree) {
+    private NodePair flattenReturnNode(ReturnNode rntree) {
        TempDescriptor retval=TempDescriptor.tempFactory("ret_value");
        NodePair cond=flattenExpressionNode(rntree.getReturnExpression(),retval);
-       ReturnNode rnflat=new IR.Flat.ReturnNode(retval);
+       FlatReturnNode rnflat=new FlatReturnNode(retval);
        cond.getEnd().addNext(rnflat);
        return new NodePair(cond.getBegin(),rnflat);
     }
diff --git a/Robust/src/IR/Flat/FlatReturnNode.java b/Robust/src/IR/Flat/FlatReturnNode.java
new file mode 100644 (file)
index 0000000..d407a38
--- /dev/null
@@ -0,0 +1,14 @@
+package IR.Flat;
+
+public class FlatReturnNode extends FlatNode {
+    TempDescriptor tempdesc;
+
+    public FlatReturnNode(TempDescriptor td) {
+       this.tempdesc=td;
+    }
+
+    public String toString() {
+       return "return "+tempdesc;
+    }
+
+}
diff --git a/Robust/src/IR/Flat/ReturnNode.java b/Robust/src/IR/Flat/ReturnNode.java
deleted file mode 100644 (file)
index ba11f76..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-package IR.Flat;
-
-public class ReturnNode extends FlatNode {
-    TempDescriptor tempdesc;
-
-    public ReturnNode(TempDescriptor td) {
-       this.tempdesc=td;
-    }
-
-    public String toString() {
-       return "return "+tempdesc;
-    }
-
-}
index cba6239026b9708c3b057ed961eb445f230ab6f6..0dafcc9d582ede04b216bf5c12cc445e5fdd1b85 100644 (file)
@@ -279,7 +279,7 @@ public class BuildIR {
                if (epn!=null)
                    en=parseExpression(epn.getFirstChild());
                
-               blockstatements.add(new DeclarationNode(new VarDescriptor(t,identifier, en)));
+               blockstatements.add(new DeclarationNode(new VarDescriptor(t,identifier),en));
            }
        } else if (isNode(pn,"nop")) {
            /* Do Nothing */
index d8825f3aac799cec536dcfee44eece580ad7a133..b354be9ce19205b2135391cf2f5119ef9d663743 100644 (file)
@@ -3,12 +3,16 @@ import IR.VarDescriptor;
 
 public class DeclarationNode extends BlockStatementNode {
     VarDescriptor vd;
-    public DeclarationNode(VarDescriptor var) {
+    ExpressionNode init_en;
+    public DeclarationNode(VarDescriptor var, ExpressionNode en) {
        vd=var;
+       init_en=en;
     }
     
     public String printNode(int indent) {
-       return vd.toString();
+       if (init_en==null)
+           return vd.toString();
+       else return vd.toString()+"="+init_en.printNode(0);
     }
 
     public int kind() {
index fd007a553816212dbe1fc961f90be83d5ac8d9bc..610e7a6679cfaeb72a62696b7dee4d6d4eddb534 100644 (file)
@@ -12,21 +12,16 @@ public class VarDescriptor extends Descriptor {
 
     protected TypeDescriptor td;
     protected String identifier;
-    protected ExpressionNode en;
     
-    public VarDescriptor(TypeDescriptor t, String identifier, ExpressionNode e) {
+    public VarDescriptor(TypeDescriptor t, String identifier) {
        super(identifier);
        this.td=t;
        this.identifier=identifier;
-       this.en=e;
         this.safename = "__" + name + "__";
        this.uniqueid=count++;
     }
 
     public String toString() {
-       if (en==null)
            return td.toString()+" "+identifier;
-       else
-           return td.toString()+" "+identifier+"="+en.printNode(0);
     }
 }