-
- 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 ();
- }
-
- FullNamedExpression LookupInterfaceOrClass (string ns, string name, out bool error)
- {
- DeclSpace parent;
- FullNamedExpression result;
- Type t;
- object r;
-
- error = false;
-
- if (dh.Lookup (ns, name, out r))
- return (FullNamedExpression) 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) {
- result = new TypeExpression (t, Location.Null);
- dh.Insert (ns, name, result);
- return result;
- }
-
- if (ns != "" && Namespace.IsNamespace (ns)) {
- result = Namespace.LookupNamespace (ns, false).Lookup (this, name, Location.Null);
- if (result != null) {
- dh.Insert (ns, name, result);
- return result;
- }
- }
-
- if (ns == "" && Namespace.IsNamespace (name)) {
- result = Namespace.LookupNamespace (name, false);
- dh.Insert (ns, name, result);
- return result;
- }
-
- //
- // 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);
- }
-
- if (ns.IndexOf ('+') != -1)
- ns = ns.Replace ('+', '.');