Small changes to allow:
[repair.git] / Repair / RepairCompiler / MCC / IR / PrintWrapper.java
1 package MCC.IR;
2 import java.util.*;
3
4 public class PrintWrapper {
5   java.io.PrintWriter output;
6   StringBuffer buffered=new StringBuffer("");
7   boolean buffer=false;
8   Hashtable vartable=new Hashtable();
9   public int indent=0;
10
11   public PrintWrapper(java.io.PrintWriter output) {
12     this.output=output;
13   }
14   void print(String s) {
15     if (buffer)
16       buffered.append(s);
17     else
18       output.print(s);
19   }
20   void flush() {
21     if (!buffer)
22       output.flush();
23   }
24   private void doindent() {
25     for (int i = 0; i < indent; i++) {
26       output.print("  ");
27     }
28   }
29   void println(String s) {
30     if (buffer)
31       buffered.append(s+"\n");
32     else
33       output.println(s);
34   }
35   void startBuffer() {
36     buffer=true;
37   }
38   void emptyBuffer() {
39     //Print out declarations
40     for(Iterator it=vartable.keySet().iterator();it.hasNext();) {
41       String var=(String)it.next();
42       doindent();
43       output.println(((String)vartable.get(var))+" "+var+";");
44     }
45     output.print(buffered.toString());
46     buffered=new StringBuffer("");
47     vartable=new Hashtable();
48     buffer=false;
49   }
50   void addDeclaration(String type, String varname) {
51     if (buffer) {
52       if (vartable.containsKey(varname)) {
53         String oldtype=(String)vartable.get(varname);
54         if (!oldtype.equals(type)) {
55           throw new Error("Internal error: Inconsistent declarations for:"+varname);
56         }
57       } else {
58         vartable.put(varname,type);
59       }
60     } else
61       output.println(type+" "+varname+";");
62   }
63   void addDeclaration(String f) {
64     if (buffer) {
65         buffered.insert(0,f+"\n");
66     } else
67       output.println(f);
68   }
69 }