2 using System.Collections;
9 static private Hashtable pool = new Hashtable ();
11 internal class MSymbolData
17 public MSymbolData (string name)
23 static public MSymbol nil = new MSymbol ("nil");
24 static public MSymbol t = new MSymbol ("t");
26 private MSymbolData data;
28 public MSymbol (string name)
30 if (! pool.ContainsKey (name))
32 data = new MSymbolData (name);
33 pool.Add (name, data);
36 data = (MSymbolData) pool[name];
39 public override string ToString () { return data.name; }
41 public override bool Equals (Object sym)
43 return (this.data == ((MSymbol) sym).data);
46 public override int GetHashCode ()
48 return (data.name.GetHashCode ());
51 public static bool operator== (MSymbol sym1, MSymbol sym2)
53 return ((object) sym1.data == (object) sym2.data);
56 public static bool operator!= (MSymbol sym1, MSymbol sym2)
58 return ((object) sym1.data != (object) sym2.data);
61 public object get (MSymbol key)
63 return (data.plist == null ? null : data.plist.get (key));
66 public object put (MSymbol key, object val)
68 if (data.plist == null)
69 data.plist = new MPlist ();
70 return data.plist.put (key, val);