+2005-12-18 Carlos Alberto Cortez <calberto.cortez@gmail.com>
+
+ Fix #76995
+
+ * namespace.cs (NamespaceEntry): Add extern_aliases as a
+ ListDictionary, to contain the ExternAliasEntry entries (in
+ addition to the NamespaceEntry.aliases hashtable). This field is
+ shared between the original entry and its doppelganger (bodyless
+ copy of it).
+ (NamespaceEntry.UsingExternalAlias): Add the extern alias entry to
+ extern_aliases field.
+ (NamespaceEntry.Lookup): Move the IsImplicit check after the
+ lookup in extern_aliases.
+
2005-12-16 Raja R Harinath <rharinath@novell.com>
Fix #77006.
public bool DeclarationFound = false;
bool UsingFound;
+ ListDictionary extern_aliases;
+
static ArrayList entries = new ArrayList ();
public static void Reset ()
if (aliases == null)
aliases = new Hashtable ();
+ // Share the extern_aliases field with the Doppelganger
+ if (extern_aliases == null) {
+ extern_aliases = new ListDictionary ();
+ Doppelganger.extern_aliases = extern_aliases;
+ }
+
if (aliases.Contains (name)) {
AliasEntry ae = (AliasEntry) aliases [name];
Report.SymbolRelatedToPreviousError (ae.Location, ae.Name);
return;
}
- aliases [name] = new ExternAliasEntry (Doppelganger, name, loc);
+ // Register the alias in aliases and extern_aliases, since we need both of them
+ // to keep things simple (different resolution scenarios)
+ ExternAliasEntry alias = new ExternAliasEntry (Doppelganger, name, loc);
+ aliases [name] = alias;
+ extern_aliases [name] = alias;
}
public FullNamedExpression LookupNamespaceOrType (DeclSpace ds, string name, Location loc, bool ignore_cs0104)
if (fne != null)
return fne;
+ if (extern_aliases != null) {
+ AliasEntry entry = extern_aliases [name] as AliasEntry;
+ if (entry != null)
+ return entry.Resolve ();
+ }
+
if (IsImplicit)
return null;
-
+
//
- // Check aliases.
+ // Check aliases.
//
if (aliases != null) {
AliasEntry entry = aliases [name] as AliasEntry;