2 // tree.cs: keeps a tree representation of the generated code
4 // Author: Miguel de Icaza (miguel@gnu.org)
6 // Licensed under the terms of the GNU GPL
8 // (C) 2001 Ximian, Inc (http://www.ximian.com)
13 using System.Collections;
14 using System.Reflection;
15 using System.Reflection.Emit;
21 public interface ITreeDump {
22 int Dump (Tree tree, StreamWriter output);
23 void ParseOptions (string options);
28 // We store here all the toplevel types that we have parsed,
29 // this is the root of all information we have parsed.
34 TypeContainer root_types;
37 // Keeps track of the interfaces defined in the source code
42 // Keeps track of the structs defined in the source code
47 // Keeps track of the classes defined in the source code
52 // Keeps track of namespaces defined in the source code
58 public Tree (RootContext rc)
60 root_types = new TypeContainer (rc, null, "", new Location (-1));
65 public void RecordInterface (string name, Interface iface)
68 ifaces = new Hashtable ();
70 ifaces.Add (name, iface);
73 public void RecordStruct (string name, Struct s)
76 structs = new Hashtable ();
78 structs.Add (name, s);
81 public void RecordClass (string name, Class c)
84 classes = new Hashtable ();
86 classes.Add (name, c);
89 public Namespace RecordNamespace (Namespace parent, string name)
91 if (namespaces == null)
92 namespaces = new Hashtable ();
94 Namespace ns = new Namespace (parent, name);
96 if (namespaces.Contains (ns.Name))
97 return (Namespace) namespaces [ns.Name];
99 namespaces.Add (ns.Name, ns);
103 public TypeContainer Types {
109 public Hashtable Interfaces {
115 public Hashtable Classes {
121 public Hashtable Structs {
127 public Hashtable Namespaces {