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