1 duncan 1.1.2.1 // FieldValueList.java, created Mon Dec 28 00:24:15 1998 by cananian 2 cananian 1.1.2.4 // Copyright (C) 1998 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.Interpret.Tree; 5 duncan 1.1.2.1 6 duncan 1.1.2.1 import harpoon.ClassFile.HField; 7 duncan 1.1.2.1 8 duncan 1.1.2.1 /** 9 duncan 1.1.2.1 * <code>FieldValueList</code> holds field values. 10 duncan 1.1.2.1 * 11 duncan 1.1.2.1 * @author C. Scott Ananian <cananian@alumni.princeton.edu> 12 cananian 1.2 * @version $Id: FieldValueList.java,v 1.2 2002/02/25 21:05:50 cananian Exp $ 13 duncan 1.1.2.1 */ 14 duncan 1.1.2.1 final class FieldValueList { 15 duncan 1.1.2.1 /** which field this value is for. */ 16 duncan 1.1.2.1 final HField which; 17 duncan 1.1.2.1 /** the value of the field. */ 18 duncan 1.1.2.1 Object value; 19 duncan 1.1.2.1 /** the next field/value pair in the list. */ 20 duncan 1.1.2.1 FieldValueList next; 21 duncan 1.1.2.1 22 duncan 1.1.2.1 FieldValueList(HField which, Object value, FieldValueList next) { 23 duncan 1.1.2.1 this.which = which; this.value = value; this.next = next; 24 duncan 1.1.2.1 } 25 duncan 1.1.2.1 26 duncan 1.1.2.1 static Object get(FieldValueList fvl, HField f) { 27 duncan 1.1.2.1 for (FieldValueList fvlp=fvl; fvlp!=null; fvlp=fvlp.next) 28 duncan 1.1.2.1 if (fvlp.which.equals(f)) return fvlp.value; 29 duncan 1.1.2.1 throw new Error("Field not found: "+f); 30 duncan 1.1.2.1 } 31 duncan 1.1.2.1 static FieldValueList update(FieldValueList fvl, HField f, Object value) { 32 duncan 1.1.2.1 for (FieldValueList fvlp=fvl; fvlp!=null; fvlp=fvlp.next) 33 duncan 1.1.2.1 if (fvlp.which.equals(f)) { fvlp.value = value; return fvl; } 34 duncan 1.1.2.1 return new FieldValueList(f, value, fvl); 35 duncan 1.1.2.1 } 36 duncan 1.1.2.1 static FieldValueList clone(FieldValueList fvl) { 37 duncan 1.1.2.1 return (fvl==null)?fvl: 38 duncan 1.1.2.1 new FieldValueList(fvl.which, fvl.value, clone(fvl.next)); 39 duncan 1.1.2.2 } 40 duncan 1.1.2.2 41 duncan 1.1.2.2 public String toString() { 42 duncan 1.1.2.2 StringBuffer sb = new StringBuffer(""); 43 duncan 1.1.2.2 if (which != null) { 44 duncan 1.1.2.2 sb.append("< "); 45 duncan 1.1.2.2 sb.append(which); 46 duncan 1.1.2.2 sb.append(" >"); 47 duncan 1.1.2.2 } 48 duncan 1.1.2.2 if (next != null) { 49 duncan 1.1.2.2 sb.append(next.toString()); 50 duncan 1.1.2.2 } 51 duncan 1.1.2.2 52 duncan 1.1.2.2 return sb.toString(); 53 duncan 1.1.2.1 } 54 duncan 1.1.2.1 } 55 cananian 1.2