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 }