-
- 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 ('+', '.');
-
- 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;
- }
-
- result = new TypeExpression (t, Location.Null);
- dh.Insert (ns, name, result);
- return result;
- }
-
- public static void Error_AmbiguousTypeReference (Location loc, string name, string t1, string t2)
- {
- Report.Error (104, loc,
- "`{0}' is an ambiguous reference ({1} or {2})",
- name, t1, t2);
- }