1 cananian 1.1.2.1 // LowQuadVisitor.java, created Tue Jan 19 21:15:19 1999 by cananian
 2 cananian 1.1.2.1 // Copyright (C) 1999 C. Scott Ananian <cananian@alumni.princeton.edu>
 3 cananian 1.1.2.1 // Licensed under the terms of the GNU GPL; see COPYING for details.
 4 cananian 1.1.2.1 package harpoon.IR.LowQuad;
 5 cananian 1.1.2.1 
 6 cananian 1.1.2.1 /**
 7 cananian 1.1.2.1  * <code>LowQuadVisitor</code> is another design pattern.  We live to
 8 cananian 1.1.2.1  * make Martin happy.
 9 cananian 1.1.2.1  * 
10 cananian 1.1.2.1  * @author  C. Scott Ananian <cananian@alumni.princeton.edu>
11 cananian 1.2      * @version $Id: LowQuadVisitor.java,v 1.2 2002/02/25 21:04:40 cananian Exp $
12 cananian 1.1.2.1  */
13 cananian 1.1.2.1 public abstract class LowQuadVisitor extends harpoon.IR.Quads.QuadVisitor {
14 cananian 1.1.2.6     /** if true, then throw an error if given any quads disallowed in lowquad
15 cananian 1.1.2.6      *  form. */
16 cananian 1.1.2.6     private final boolean strictLowQuad;
17 cananian 1.1.2.6     /** Create a <code>LowQuadVisitor</code>. If <code>strictLowQuad</code>
18 cananian 1.1.2.6      *  is true (the default), then the visitor will throw an error if
19 cananian 1.1.2.6      *  any quads are visited which are disallowed in lowquad form. */
20 cananian 1.1.2.6     protected LowQuadVisitor(boolean strictLowQuad) {
21 cananian 1.1.2.6         this.strictLowQuad = strictLowQuad;
22 cananian 1.1.2.6     }
23 cananian 1.1.2.6     protected LowQuadVisitor() { this(true); }
24 cananian 1.1.2.1 
25 cananian 1.1.2.1     // DISALLOW certain Quads in LowQuad form.
26 cananian 1.1.2.2     /** <code>AGET</code> is disallowed in <code>LowQuad</code> form.
27 cananian 1.1.2.6      *  This method throws an <code>Error</code> unless !strictLowQuad. */
28 cananian 1.1.2.6     public void visit(harpoon.IR.Quads.AGET q)
29 cananian 1.1.2.6     { if (strictLowQuad) error(q); else super.visit(q); }
30 cananian 1.1.2.2     /** <code>ASET</code> is disallowed in <code>LowQuad</code> form.
31 cananian 1.1.2.6      *  This method throws an <code>Error</code> unless !strictLowQuad. */
32 cananian 1.1.2.6     public void visit(harpoon.IR.Quads.ASET q)
33 cananian 1.1.2.6     { if (strictLowQuad) error(q); else super.visit(q); }
34 cananian 1.1.2.4     /** <code>CALL</code> is disallowed in <code>LowQuad</code> form.
35 cananian 1.1.2.6      *  This method throws an <code>Error</code> unless !strictLowQuad. */
36 cananian 1.1.2.6     public void visit(harpoon.IR.Quads.CALL q)
37 cananian 1.1.2.6     { if (strictLowQuad) error(q); else super.visit(q); }
38 cananian 1.1.2.2     /** <code>GET</code> is disallowed in <code>LowQuad</code> form.
39 cananian 1.1.2.6      *  This method throws an <code>Error</code> unless !strictLowQuad. */
40 cananian 1.1.2.6     public void visit(harpoon.IR.Quads.GET q)
41 cananian 1.1.2.6     { if (strictLowQuad) error(q); else super.visit(q); }
42 cananian 1.1.2.2     /** <code>HANDLER</code> is disallowed in <code>LowQuad</code> form.
43 cananian 1.1.2.6      *  This method throws an <code>Error</code> unless !strictLowQuad. */
44 cananian 1.1.2.6     public void visit(harpoon.IR.Quads.HANDLER q)
45 cananian 1.1.2.6     { if (strictLowQuad) error(q); else super.visit(q); }
46 cananian 1.1.2.2     /** <code>OPER</code> is disallowed in <code>LowQuad</code> form.
47 cananian 1.1.2.6      *  This method throws an <code>Error</code> unless !strictLowQuad. */
48 cananian 1.1.2.6     public void visit(harpoon.IR.Quads.OPER q)
49 cananian 1.1.2.6     { if (strictLowQuad) error(q); else super.visit(q); }
50 cananian 1.1.2.2     /** <code>SET</code> is disallowed in <code>LowQuad</code> form.
51 cananian 1.1.2.6      *  This method throws an <code>Error</code> unless !strictLowQuad. */
52 cananian 1.1.2.6     public void visit(harpoon.IR.Quads.SET q)
53 cananian 1.1.2.6     { if (strictLowQuad) error(q); else super.visit(q); }
54 cananian 1.1.2.2     // error function.
55 cananian 1.1.2.1     private static final void error(harpoon.IR.Quads.Quad q) {
56 cananian 1.1.2.1         throw new Error("Illegal LowQuad: "+q);
57 cananian 1.1.2.1     }
58 cananian 1.1.2.1 
59 cananian 1.1.2.1     // Visitor functions for new LowQuads.
60 cananian 1.1.2.3     public void visit(LowQuad q)    { visit((harpoon.IR.Quads.Quad)q); }
61 cananian 1.1.2.3     public void visit(POPER q)      { visit((harpoon.IR.Quads.Quad)q); }
62 cananian 1.1.2.5     public void visit(PCALL q)      { visit((harpoon.IR.Quads.SIGMA)q); }
63 cananian 1.1.2.3     public void visit(PGET q)       { visit((LowQuad)q); }
64 cananian 1.1.2.3     public void visit(PSET q)       { visit((LowQuad)q); }
65 cananian 1.1.2.3 
66 cananian 1.1.2.3     // PPTR:
67 cananian 1.1.2.3     public void visit(PPTR q)       { visit((LowQuad)q); }
68 cananian 1.1.2.3     public void visit(PARRAY q)     { visit((PPTR)q); }
69 cananian 1.1.2.3     public void visit(PFIELD q)     { visit((PPTR)q); }
70 cananian 1.1.2.3     public void visit(PMETHOD q)    { visit((PPTR)q); }
71 cananian 1.1.2.3     // PCONST:
72 cananian 1.1.2.3     public void visit(PCONST q)     { visit((LowQuad)q); }
73 cananian 1.1.2.3     public void visit(PAOFFSET q)   { visit((PCONST)q); }
74 cananian 1.1.2.3     public void visit(PFOFFSET q)   { visit((PCONST)q); }
75 cananian 1.1.2.3     public void visit(PMOFFSET q)   { visit((PCONST)q); }
76 cananian 1.1.2.3     public void visit(PFCONST q)    { visit((PCONST)q); }
77 cananian 1.1.2.3     public void visit(PMCONST q)    { visit((PCONST)q); }
78 cananian 1.2     }