// (C) 2001 Ximian, Inc (http://www.ximian.com)
//
//
+
+//
+// We will eventually remove the SIMPLE_SPEEDUP, and should never change
+// the behavior of the compilation. This can be removed if we rework
+// the code to get a list of namespaces available.
+//
+#define SIMPLE_SPEEDUP
+
using System;
using System.Globalization;
using System.Collections;
return null;
}
+ static Hashtable negative_hits = new Hashtable ();
+
//
// This function is used when you want to avoid the lookups, and want to go
// directly to the source. This will use the cache.
if (t != null)
return t;
+#if SIMPLE_SPEEDUP
+ if (negative_hits.Contains (name))
+ return null;
+#endif
+
//
// Optimization: ComposedCast will work with an existing type, and might already have the
// full name of the type, so the full system lookup can probably be avoided.
types [name] = t;
return t;
}
+
+ //
+ // We know that System.Object does not have children, and since its the parent of
+ // all the objects, it always gets probbed for inner classes.
+ //
+ if (top_level_type == "System.Object")
+ return null;
string newt = top_level_type + "+" + String.Join ("+", elements, n, count - n);
t = LookupTypeDirect (newt);
types [newt] = t;
return t;
}
+
+#if SIMPLE_SPEEDUP
+ negative_hits [name] = true;
+#endif
return null;
}
namespaces [ns] = ns;
}
}
+ Console.WriteLine ("Namespaces: " + namespaces.Count);
return namespaces;
}
+
+ public static void GetAllTypes ()
+ {
+ Hashtable namespaces = new Hashtable ();
+
+ foreach (Assembly a in assemblies){
+ foreach (Type t in a.GetTypes ()){
+ }
+ }
+
+ foreach (ModuleBuilder mb in modules){
+ foreach (Type t in mb.GetTypes ()){
+ }
+ }
+ }
/// <summary>
/// Returns the C# name of a type if possible, or the full type name otherwise
return true;
}
- //
- // FIXME: we need to return the accessors depending on whether
- // they are visible or not.
- //
- static public MethodInfo [] GetAccessors (PropertyInfo pi)
- {
- MethodInfo [] ret;
-
- if (pi is PropertyBuilder){
- Pair pair = (Pair) properties [pi];
-
- ret = new MethodInfo [2];
- ret [0] = (MethodInfo) pair.First;
- ret [1] = (MethodInfo) pair.Second;
-
- return ret;
- } else {
- MethodInfo [] mi = new MethodInfo [2];
-
- //
- // Why this and not pi.GetAccessors?
- // Because sometimes index 0 is the getter
- // sometimes it is 1
- //
- mi [0] = pi.GetGetMethod (true);
- mi [1] = pi.GetSetMethod (true);
-
- return mi;
- }
- }
-
- static public MethodInfo GetPropertyGetter (PropertyInfo pi)
- {
- if (pi is PropertyBuilder){
- Pair de = (Pair) properties [pi];
-
- return (MethodInfo) de.Second;
- } else
- return pi.GetSetMethod ();
- }
-
- static public MethodInfo GetPropertySetter (PropertyInfo pi)
- {
- if (pi is PropertyBuilder){
- Pair de = (Pair) properties [pi];
-
- return (MethodInfo) de.First;
- } else
- return pi.GetGetMethod ();
- }
-
/// <summary>
/// Given an array of interface types, expand and eliminate repeated ocurrences
/// of an interface.
// Although a derived class can access protected members of its base class
// it cannot do so through an instance of the base class (CS1540).
- if ((closure_invocation_type != closure_start_type) &&
+ if (!mb.IsStatic && (closure_invocation_type != closure_start_type) &&
closure_invocation_type.IsSubclassOf (closure_start_type))
return false;
// Although a derived class can access protected members of its base class
// it cannot do so through an instance of the base class (CS1540).
- if ((closure_invocation_type != closure_start_type) &&
+ if (!fi.IsStatic && (closure_invocation_type != closure_start_type) &&
closure_invocation_type.IsSubclassOf (closure_start_type))
return false;
}
//
- // EventInfos and PropertyInfos, return true
+ // EventInfos and PropertyInfos, return true because they lack permission
+ // informaiton, so we need to check later on the methods.
//
return true;
}
//
if (invocation_type != null){
if (invocation_type == current_type){
- private_ok = (bf & BindingFlags.NonPublic) != 0;
+ private_ok = true;
} else
private_ok = always_ok_flag;