foreach (var entry in external_aliases)
LoadAssembly (entry.Value, entry.Key, false);
+
+ if (modules.Count > 0) {
+ foreach (string module in modules)
+ LoadModule (module);
+ }
ctx.GlobalRootNamespace.ComputeNamespaces (ctx);
}
ShowTime ("Loading references");
ctx.MetaImporter.Initialize ();
- LoadReferences ();
-
- if (modules.Count > 0) {
- foreach (string module in modules)
- LoadModule (module);
- }
-
+ LoadReferences ();
+
if (timestamps)
ShowTime ("References loaded");
all_types = e.Types;
}
+ ImportTypes (all_types, targetNamespace, extension_type);
+ }
+
+ public void ImportModule (Module module, Namespace targetNamespace)
+ {
+ Type extension_type = HasExtensionAttribute (CustomAttributeData.GetCustomAttributes (module));
+
+ Type[] all_types;
+ try {
+ all_types = module.GetTypes ();
+ } catch (ReflectionTypeLoadException e) {
+ all_types = e.Types;
+ throw;
+ }
+
+ ImportTypes (all_types, targetNamespace, extension_type);
+ }
+
+ void ImportTypes (Type[] types, Namespace targetNamespace, Type extension_type)
+ {
Namespace ns = targetNamespace;
string prev_namespace = null;
- foreach (var t in all_types) {
+ foreach (var t in types) {
if (t == null || t.IsNested)
continue;
referenced_assemblies = n;
}
- public void ImportTypes (CompilerContext ctx)
+ public virtual void ImportTypes (CompilerContext ctx)
{
foreach (Assembly a in referenced_assemblies) {
try {
return rn;
}
+
+ public override void ImportTypes (CompilerContext ctx)
+ {
+ base.ImportTypes (ctx);
+
+ if (modules != null) {
+ // 0 is this module
+ for (int i = 1; i < modules.Length; ++i) {
+ ctx.MetaImporter.ImportModule (modules[i], this);
+ }
+ }
+ }
}
/// <summary>