a855aaf77ec9aafda4d36d51c31a5ac79965e638
[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   void println(String s) {
25     if (buffer)
26       buffered.append(s+"\n");
27     else
28       output.println(s);
29   }
30   void startBuffer() {
31     buffer=true;
32   }
33   void emptyBuffer() {
34     //Print out declarations
35     for(Iterator it=vartable.keySet().iterator();it.hasNext();) {
36       String var=(String)it.next();
37       output.println(((String)vartable.get(var))+" "+var+";");
38     }
39     output.print(buffered.toString());
40     buffered=new StringBuffer("");
41     vartable=new Hashtable();
42     buffer=false;
43   }
44   void addDeclaration(String type, String varname) {
45     if (buffer) {
46       if (vartable.containsKey(varname)) {
47         String oldtype=(String)vartable.get(varname);
48         if (!oldtype.equals(type)) {
49           throw new Error("Internal error: Inconsistent declarations for:"+varname);
50         }
51       } else {
52         vartable.put(varname,type);
53       }
54     } else
55       output.println(type+" "+varname+";");
56   }
57   void addDeclaration(String f) {
58     if (buffer) {
59         buffered.insert(0,f+"\n");
60     } else
61       output.println(f);
62   }
63 }