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