6 public struct MProperty
11 public MSymbol Key { get { return this.key;} }
12 public object Val { get { return this.val; } }
14 public MProperty (MSymbol key, object val)
23 private MProperty prop;
28 prop = new MProperty (MSymbol.nil, null);
31 public bool tailp { get { return prop.key == MSymbol.nil; } }
33 public new string ToString ()
37 for (MPlist p = this; ! p.tailp; p = p.next)
39 str += (p == this ? "(" : " ") + p.prop.key.ToString () + ":";
40 if (p.prop.val is MSymbol)
41 str += ((MSymbol) p.prop.val).ToString ();
42 else if (p.prop.val is MPlist)
43 str += ((MPlist) p.prop.val).ToString ();
48 public object get (MSymbol key)
50 if ((object) key == null)
52 for (MPlist p = this; ! p.tailp; p = p.next)
53 if (p.prop.key == key)
58 public object put (MSymbol key, object val)
62 for (p = this; ! p.tailp; p = p.next)
63 if (p.prop.key == key)
75 p.next = new MPlist ();
80 public object push (MSymbol key, object val)
82 MPlist p = new MPlist ();
84 p.prop.key = this.prop.key;
85 p.prop.val = this.prop.val;
99 object val = this.prop.val;
101 this.prop.key = this.next.prop.key;
102 this.prop.val = this.next.prop.val;
103 this.next = this.next.next;
107 public object add (MSymbol key, object val)
111 for (p = this; ! p.tailp; p = p.next);
116 p.next = new MPlist ();