-
- static DoubleHash dh = new DoubleHash (1000);
-
- Type DefineTypeAndParents (DeclSpace tc)
- {
- DeclSpace container = tc.Parent;
-
- if (container.TypeBuilder == null && container.Name != "")
- DefineTypeAndParents (container);
-
- return tc.DefineType ();
- }
-
- Type LookupInterfaceOrClass (string ns, string name, out bool error)
- {
- DeclSpace parent;
- Type t;
- object r;
-
- error = false;
-
- if (dh.Lookup (ns, name, out r))
- return (Type) r;
- else {
- if (ns != ""){
- if (Namespace.IsNamespace (ns)){
- string fullname = (ns != "") ? ns + "." + name : name;
- t = TypeManager.LookupType (fullname);
- } else
- t = null;
- } else
- t = TypeManager.LookupType (name);
- }
-
- if (t != null) {
- dh.Insert (ns, name, t);
- return t;
- }
-
- //
- // In case we are fed a composite name, normalize it.
- //
- int p = name.LastIndexOf ('.');
- if (p != -1){
- ns = MakeFQN (ns, name.Substring (0, p));
- name = name.Substring (p+1);
- }
-
- parent = RootContext.Tree.LookupByNamespace (ns, name);
- if (parent == null) {
- dh.Insert (ns, name, null);
- return null;
- }
-
- t = DefineTypeAndParents (parent);
- if (t == null){
- error = true;
- return null;
- }
-
- dh.Insert (ns, name, t);
- return t;
- }