1 cananian 1.1.2.20 // Data.java, created Wed Sep 8 15:45:19 1999 by cananian 2 cananian 1.1.2.20 // Copyright (C) 1999 C. Scott Ananian <cananian@alumni.princeton.edu> 3 cananian 1.1.2.4 // Licensed under the terms of the GNU GPL; see COPYING for details. 4 duncan 1.1.2.1 package harpoon.IR.Tree; 5 duncan 1.1.2.1 6 duncan 1.1.2.1 import harpoon.Backend.Generic.Frame; 7 duncan 1.1.2.1 import harpoon.ClassFile.HClass; 8 cananian 1.1.2.22 import harpoon.ClassFile.HCode.PrintCallback; 9 duncan 1.1.2.1 import harpoon.ClassFile.HData; 10 cananian 1.1.2.20 import harpoon.ClassFile.HDataElement; 11 cananian 1.1.2.20 import harpoon.Temp.TempFactory; 12 pnkfelix 1.1.2.2 13 duncan 1.1.2.8 import java.util.Iterator; 14 duncan 1.1.2.1 import java.util.List; 15 duncan 1.1.2.1 /** 16 cananian 1.1.2.20 * <code>Data</code> is an abstract implementation of <code>HData</code> 17 cananian 1.1.2.20 * for <code>IR.Tree</code> form. 18 duncan 1.1.2.1 * 19 cananian 1.1.2.20 * @author C. Scott Ananian <cananian@alumni.princeton.edu> 20 cananian 1.4 * @version $Id: Data.java,v 1.4 2002/08/31 00:24:58 cananian Exp $ 21 duncan 1.1.2.1 */ 22 cananian 1.1.2.20 public abstract class Data extends harpoon.ClassFile.HData { 23 cananian 1.2.2.1 protected final String desc; 24 cananian 1.2.2.1 protected final Frame frame; 25 cananian 1.2.2.1 protected final TreeFactory tf; 26 cananian 1.1.2.20 27 cananian 1.4 /** Keep track of modifications to this <code>Data</code> so that the 28 cananian 1.4 * <code>getElementsI()</code> <code>Iterator</code> can fail-fast. */ 29 cananian 1.4 protected int modCount=0; 30 cananian 1.4 31 cananian 1.1.2.20 /** Create a proper TreeFactory. */ 32 cananian 1.1.2.20 protected class TreeFactory extends harpoon.IR.Tree.TreeFactory { 33 cananian 1.1.2.20 private int id=0; 34 cananian 1.1.2.20 TreeFactory() { } 35 cananian 1.1.2.21 /** No temp factory for Data */ 36 cananian 1.1.2.21 public TempFactory tempFactory() { return null; } 37 cananian 1.1.2.20 /** Returns the <code>HCode</code> to which all 38 cananian 1.1.2.20 * <code>HDataElement</code>s generated by this factory belong. */ 39 cananian 1.1.2.20 public Data getParent() { return Data.this; } 40 cananian 1.4 /** Indicate that the parent has changed, so that its 41 cananian 1.4 * fail-fast iterators will work correctly. */ 42 cananian 1.4 void incModCount() { Data.this.modCount++; } 43 cananian 1.1.2.20 /** Returns the <code>HClass</code> to which all 44 cananian 1.1.2.20 * <code>HDataElement</code>s generated by this factory belong. */ 45 cananian 1.1.2.20 public Frame getFrame() { return Data.this.frame; } 46 cananian 1.1.2.20 synchronized int getUniqueID() { return id++; } 47 cananian 1.1.2.20 public String toString() { 48 cananian 1.1.2.20 return "Data.TreeFactory["+getParent().toString()+"]"; 49 duncan 1.1.2.1 } 50 cananian 1.1.2.20 public int hashCode() { return Data.this.hashCode(); } 51 duncan 1.1.2.1 } 52 cananian 1.1.2.21 protected Data(String desc, Frame f) { 53 cananian 1.1.2.20 this.desc = desc; 54 cananian 1.1.2.20 this.frame = f; 55 cananian 1.1.2.20 this.tf = new TreeFactory(); 56 duncan 1.1.2.1 } 57 cananian 1.1.2.20 public String getDesc() { return desc; } 58 duncan 1.1.2.1 59 cananian 1.1.2.20 /** Print a human-readable representation of this dataview */ 60 cananian 1.1.2.22 public void print(java.io.PrintWriter pw, PrintCallback callback) { 61 cananian 1.1.2.22 Print.print(pw, this, callback); 62 duncan 1.1.2.1 } 63 cananian 1.2 }