try to make mp3decoder pass SSJava checking
[IRC.git] / Robust / src / IR / Tree / BlockNode.java
index b7d8719657899112a7d1c627860bd4a98609ca0f..992928fb25854fe52e623b4cb1bc60c0bf220a39 100644 (file)
@@ -1,23 +1,99 @@
 package IR.Tree;
 import java.util.Vector;
+import IR.*;
+
+public class BlockNode extends TreeNode {
+  Vector blockstatements;
+  int printStyle=0;
+  protected SymbolTable table;
+
+  public final static int NORMAL=0;
+  public final static int NOBRACES=1;
+  public final static int EXPRLIST=2;
+
+  String label=null;
+
+  public BlockNode() {
+    blockstatements=new Vector();
+    table=new SymbolTable();
+  }
+
+  public SymbolTable getVarTable() {
+    return table;
+  }
+
+  public void addBlockStatement(BlockStatementNode bsn) {
+    blockstatements.add(bsn);
+  }
+
+  public void addFirstBlockStatement(BlockStatementNode bsn) {
+    blockstatements.insertElementAt(bsn,0);
+  }
+
+  public void addBlockStatementAt(BlockStatementNode bsn, int i) {
+    blockstatements.insertElementAt(bsn,i);
+  }
+
+  public void setStyle(int style) {
+    printStyle=style;
+  }
+
+  public int size() {
+    return blockstatements.size();
+  }
+
+  public BlockStatementNode get(int i) {
+    return (BlockStatementNode) blockstatements.get(i);
+  }
+
+  public String printNode(int indent) {
+    if (printStyle==NORMAL) {
+      String st="{\n";
+      for(int i=0; i<blockstatements.size(); i++) {
+        BlockStatementNode bsn=(BlockStatementNode)blockstatements.get(i);
+        st+=printSpace(indent+INDENT)+bsn.printNode(indent+INDENT);
+        if (!((bsn instanceof SubBlockNode)||
+              (bsn instanceof LoopNode)||
+              (bsn instanceof IfStatementNode)))
+          st+=";\n";
+        if (bsn instanceof IfStatementNode)
+          st+="\n";
+      }
+      st+=printSpace(indent)+"}";
+      return st;
+    } else if (printStyle==NOBRACES) {
+      String st="";
+      for(int i=0; i<blockstatements.size(); i++) {
+        BlockStatementNode bsn=(BlockStatementNode)blockstatements.get(i);
+        st+=printSpace(indent)+bsn.printNode(indent);
+        if (!((bsn instanceof SubBlockNode)||
+              (bsn instanceof LoopNode)||
+              (bsn instanceof IfStatementNode)))
+          st+=";";
+      }
+      return st;
+    } else if (printStyle==EXPRLIST) {
+      String st="";
+      for(int i=0; i<blockstatements.size(); i++) {
+        BlockStatementNode bsn=(BlockStatementNode)blockstatements.get(i);
+        st+=bsn.printNode(0);
+        if ((i+1)!=blockstatements.size())
+          st+=", ";
+      }
+      return st;
+    } else throw new Error();
+  }
+
+  public int kind() {
+    return Kind.BlockNode;
+  }
+
+  public void setLabel(String l) {
+    label=l;
+  }
+
+  public String getLabel() {
+    return label;
+  }
 
-class BlockNode extends TreeNode {
-    Vector blockstatements;
-    public BlockNode() {
-       blockstatements=new Vector();
-    }
-
-    public void addBlockStatement(BlockStatementNode bsn) {
-       blockstatements.add(bsn);
-    }
-
-    public String printNode() {
-       String st="{\n";
-       for(int i=0;i<blockstatements.size();i++) {
-           BlockStatementNode bsn=(BlockStatementNode)blockstatements.get(i);
-           st+=bsn.printNode()+"\n";
-       }
-       st+="}\n";
-       return st;
-    }
 }