public SourceModuleSymbol(SourceAssemblySymbol sourceAssembly, SourceDeclarations tables, string name) { _sourceAssembly = sourceAssembly; _name = name; _tables = tables; _ns = new SourceGlobalNamespaceSymbol(this); }
/// <summary> /// A helper method for ReferenceManager to set assembly identities for assemblies /// referenced by this module and corresponding AssemblySymbols. /// </summary> internal void SetReferences(ModuleReferences<AssemblySymbol> moduleReferences, SourceAssemblySymbol originatingSourceAssemblyDebugOnly = null) { Debug.Assert(_moduleReferences == null); Debug.Assert(moduleReferences != null); _moduleReferences = moduleReferences; }
public PEAssemblyBuilder( SourceAssemblySymbol sourceAssembly, Cci.ModulePropertiesForSerialization serializationProperties, IEnumerable<ResourceDescription> manifestResources, OutputKind outputKind, EmitOptions emitOptions) :base(sourceAssembly.DeclaringCompilation, (SourceModuleSymbol)sourceAssembly.Modules[0], serializationProperties, manifestResources, outputKind, emitOptions) { _sourceAssembly = sourceAssembly; _metadataName = (emitOptions.OutputNameOverride == null) ? sourceAssembly.MetadataName : FileNameUtilities.ChangeExtension(emitOptions.OutputNameOverride, extension: null); AssemblyOrModuleSymbolToModuleRefMap.Add(sourceAssembly, this); }
public SourceModuleSymbol(SourceAssemblySymbol sourceAssembly, string name) { _sourceAssembly = sourceAssembly; _name = name; _ns = new SourceGlobalNamespaceSymbol(this); }
/// <summary> /// A helper method for ReferenceManager to set assembly identities for assemblies /// referenced by this module and corresponding AssemblySymbols. /// </summary> internal void SetReferences(ModuleReferences <AssemblySymbol> moduleReferences, SourceAssemblySymbol originatingSourceAssemblyDebugOnly = null) { Debug.Assert(_moduleReferences == null); Debug.Assert(moduleReferences != null); _moduleReferences = moduleReferences; }
internal void CreateSourceAssemblyForCompilation(PhpCompilation compilation) { if (compilation._lazyAssemblySymbol != null) return; // TODO: lock Debug.Assert(_lazyExplicitReferences.IsDefault); Debug.Assert(_lazyCorLibrary == null); Debug.Assert(_lazyPhpCorLibrary == null); // var externalRefs = CorLibReferences.SelectMany(reference => compilation.Options.MetadataReferenceResolver.ResolveReference(reference, null, new MetadataReferenceProperties())) .Concat(compilation.ExternalReferences).AsImmutable(); var assemblies = new List<AssemblySymbol>(externalRefs.Length); var referencesMap = new Dictionary<MetadataReference, IAssemblySymbol>(); var metadataMap = new Dictionary<IAssemblySymbol, MetadataReference>(); var assembliesMap = new Dictionary<AssemblyIdentity, PEAssemblySymbol>(); var refmodules = new List<PEModuleSymbol>(); foreach (PortableExecutableReference pe in externalRefs) { var symbol = PEAssemblySymbol.Create(pe); if (symbol != null) { assemblies.Add(symbol); referencesMap[pe] = symbol; metadataMap[symbol] = pe; if (_lazyCorLibrary == null && symbol.IsCorLibrary) _lazyCorLibrary = symbol; if (_lazyPhpCorLibrary == null && symbol.IsPchpCorLibrary) _lazyPhpCorLibrary = symbol; // cache bound assembly symbol _assembliesMap.Add(symbol.Identity, symbol); // list of modules to initialize later refmodules.AddRange(symbol.Modules.Cast<PEModuleSymbol>()); } else { throw new Exception($"symbol '{pe.FilePath}' could not be created!"); } } // _lazyExplicitReferences = externalRefs; _lazyImplicitReferences = ImmutableArray<MetadataReference>.Empty; _metadataMap = metadataMap.ToImmutableDictionary(); _referencesMap = referencesMap.ToImmutableDictionary(); // var assembly = new SourceAssemblySymbol(compilation, compilation.Options.ModuleName, compilation.Options.ModuleName); assembly.SetCorLibrary(_lazyCorLibrary); compilation._lazyAssemblySymbol = assembly; assembly.SourceModule.SetReferences(new ModuleReferences<AssemblySymbol>( assemblies.Select(x => x.Identity).AsImmutable(), assemblies.AsImmutable(), ImmutableArray<UnifiedAssembly<AssemblySymbol>>.Empty), assembly); assemblies.ForEach(ass => ass.SetCorLibrary(_lazyCorLibrary)); // recursively initialize references of referenced modules SetReferencesOfReferencedModules(compilation.Options.MetadataReferenceResolver, refmodules); // set cor types for this compilation if (_lazyPhpCorLibrary == null) throw new DllNotFoundException("Peachpie.Runtime not found"); if (_lazyCorLibrary == null) throw new DllNotFoundException("A corlib not found"); compilation.CoreTypes.Update(_lazyPhpCorLibrary); compilation.CoreTypes.Update(_lazyCorLibrary); }