1 cananian 1.1.2.1 // QuadStackFrame.java, created Mon Dec 28 17:16:11 1998 by cananian 2 cananian 1.1.2.5 // Copyright (C) 1998 C. Scott Ananian <cananian@alumni.princeton.edu> 3 cananian 1.1.2.5 // Licensed under the terms of the GNU GPL; see COPYING for details. 4 cananian 1.1.2.1 package harpoon.Interpret.Quads; 5 cananian 1.1.2.1 6 cananian 1.1.2.3 import harpoon.ClassFile.HMethod; 7 cananian 1.1.2.1 import harpoon.IR.Quads.Quad; 8 cananian 1.1.2.1 import harpoon.Temp.Temp; 9 cananian 1.1.2.1 import harpoon.Util.Util; 10 cananian 1.1.2.1 11 cananian 1.1.2.1 import java.util.Hashtable; 12 cananian 1.1.2.1 /** 13 cananian 1.1.2.1 * <code>QuadStackFrame</code> is a stack frame for an interpreted method. 14 cananian 1.1.2.1 * 15 cananian 1.1.2.1 * @author C. Scott Ananian <cananian@alumni.princeton.edu> 16 cananian 1.2 * @version $Id: QuadStackFrame.java,v 1.2 2002/02/25 21:05:46 cananian Exp $ 17 cananian 1.1.2.1 */ 18 cananian 1.1.2.1 final class QuadStackFrame extends StackFrame { 19 cananian 1.1.2.1 /** current location in the method. */ 20 cananian 1.1.2.1 Quad pc; 21 cananian 1.1.2.1 /** current mapping from <code>Temp</code>s to values. */ 22 cananian 1.1.2.1 final Hashtable state = new Hashtable(); 23 cananian 1.1.2.1 /** an object to stand for <code>null</code>. */ 24 cananian 1.1.2.1 static final private Object Onull = new Object(); 25 cananian 1.1.2.1 26 cananian 1.1.2.1 QuadStackFrame(Quad initial_pc) { this.pc = initial_pc; } 27 cananian 1.1.2.1 void update(Temp t, Object value) { 28 cananian 1.1.2.1 state.put(t, (value==null)?Onull:value); 29 cananian 1.1.2.1 } 30 cananian 1.1.2.1 Object get(Temp t) { 31 cananian 1.1.2.1 Object o = state.get(t); 32 cananian 1.1.2.4 if (o==null) 33 cananian 1.1.2.4 throw new Error("Use before def of "+t+" at " + getMethod() + 34 cananian 1.1.2.4 "("+ getSourceFile() +":"+ getLineNumber() +")"+ 35 cananian 1.1.2.4 "::" + pc); 36 cananian 1.1.2.1 return (o==Onull)?null:o; 37 cananian 1.1.2.1 } 38 cananian 1.1.2.6 void undefine(Temp t) { state.remove(t); } 39 cananian 1.1.2.1 40 cananian 1.1.2.2 final HMethod getMethod() { return pc.getFactory().getMethod(); } 41 cananian 1.1.2.1 final String getSourceFile() { return pc.getSourceFile(); } 42 cananian 1.1.2.1 final int getLineNumber() { return pc.getLineNumber(); } 43 cananian 1.2 }