Example #1
0
 void ResolveImportAssemblyReferences()
 {
     foreach (Boo.Lang.Compiler.Ast.Module module in CompileUnit.Modules)
     {
         ImportCollection imports     = module.Imports;
         Import[]         importArray = imports.ToArray();
         for (int i = 0; i < importArray.Length; ++i)
         {
             Import u = importArray[i];
             ReferenceExpression reference = u.AssemblyReference;
             if (null != reference)
             {
                 try
                 {
                     Assembly asm = Parameters.FindAssembly(reference.Name);
                     if (null == asm)
                     {
                         asm = Parameters.LoadAssembly(reference.Name);
                         if (null != asm)
                         {
                             Parameters.AddAssembly(asm);
                         }
                     }
                     reference.Entity = new TypeSystem.AssemblyReference(asm);
                 }
                 catch (Exception x)
                 {
                     Errors.Add(CompilerErrorFactory.UnableToLoadAssembly(reference, reference.Name, x));
                     imports.RemoveAt(i);
                 }
             }
         }
     }
 }
Example #2
0
        private bool TryAutoAddAssemblyReference(Boo.Lang.Compiler.Ast.Import import)
        {
            Assembly asm = Parameters.FindAssembly(import.Namespace);

            if (asm != null)
            {
                return(false);                         //name resolution already failed earlier, don't try twice
            }
            asm = Parameters.LoadAssembly(import.Namespace, false);
            if (asm == null)
            {
                return(false);
            }

            if (asm != null)
            {
                try
                {
                    NameResolutionService.OrganizeAssemblyTypes(asm);
                }
                catch (Exception /*ignored*/)
                {
                    return(false);
                }
                Parameters.AddAssembly(asm);
                import.AssemblyReference        = new ReferenceExpression(import.LexicalInfo, import.Namespace);
                import.AssemblyReference.Entity = new AssemblyReference(asm);
                return(true);
            }
            return(false);
        }