/// <nodoc/> internal FileModuleLiteral(AbsolutePath path, QualifierValue qualifier, GlobalModuleLiteral outerScope, Package package, ModuleRegistry moduleRegistry, LineMap lineMap) : this(ModuleLiteralId.Create(path), qualifier, outerScope, package, lineMap) { Contract.Requires(path.IsValid); Contract.Requires(lineMap != null); m_moduleRegistry = moduleRegistry; }
/// <nodoc /> internal FileModuleLiteral( BuildXLReader reader, PathTable pathTable, GlobalModuleLiteral outerScope, ModuleRegistry moduleRegistry, LineMap lineMap) : this(reader, pathTable, reader.ReadAbsolutePath(), ReadPackage(reader, pathTable), outerScope, moduleRegistry, lineMap) { }
/// <summary> /// Constructs an uninstantiated file module denoted by a path. /// </summary> /// <remarks> /// This factory should only be used during parsing. /// </remarks> public static FileModuleLiteral CreateFileModule(AbsolutePath path, GlobalModuleLiteral globalScope, Package package, ModuleRegistry moduleRegistry, LineMap lineMap) { Contract.Requires(path.IsValid); Contract.Requires(globalScope != null); Contract.Requires(package != null); Contract.Requires(lineMap != null); return(CreateInstantiatedFileModule(path, QualifierValue.Unqualified, globalScope, package, moduleRegistry, lineMap: lineMap)); }
/// <nodoc/> internal FileModuleLiteral(ModuleLiteralId id, QualifierValue qualifier, GlobalModuleLiteral outerScope, Package package, LineMap lineMap) : base(id, qualifier, outerScope, location: default(LineInfo)) { Contract.Requires(id.Path.IsValid); Contract.Requires(package != null); Contract.Requires(lineMap != null); Package = package; m_partialSymbolsCache = Lazy.Create(() => new ConcurrentDictionary <FullSymbol, ModuleBinding>()); LineMap = lineMap; }
internal static FileModuleLiteral Read( BuildXLReader reader, PathTable pathTable, GlobalModuleLiteral outerScope, ModuleRegistry moduleRegistry) { var kind = (SyntaxKind)reader.ReadInt32Compact(); var lineMap = LineMap.Read(reader); switch (kind) { case SyntaxKind.FileModuleLiteral: return(new FileModuleLiteral(reader, pathTable, outerScope, moduleRegistry, lineMap)); default: string message = I($"The file module literal {kind} is not deserializable yet."); throw new InvalidOperationException(message); } }
private FileModuleLiteral DoInstantiate(FileModuleLiteral module, QualifierValue qualifier, GlobalModuleLiteral outerScope) { Contract.Requires(module != null); Contract.Requires(qualifier != QualifierValue.Unqualified); Interlocked.CompareExchange(ref m_qualifier, qualifier, QualifierValue.Unqualified); if (m_qualifier.QualifierId == qualifier.QualifierId) { // Uninstantiated module becomes the first instance. return(this); } // Create a new file module instance. var newModule = CreateInstantiatedFileModule(module.Id.Path, qualifier, outerScope, module.Package, module.m_moduleRegistry, LineMap); newModule.CopyBindings(module, qualifier); return(newModule); }
/// <nodoc /> private FileModuleLiteral(BuildXLReader reader, PathTable pathTable, AbsolutePath path, Package package, GlobalModuleLiteral outerScope, ModuleRegistry moduleRegistry, LineMap lineMap) : this(path, QualifierValue.Unqualified, outerScope, package, moduleRegistry, lineMap) { var context = new DeserializationContext(this, reader, pathTable, lineMap); int resolveEntries = reader.ReadInt32Compact(); for (int i = 0; i < resolveEntries; i++) { FilePosition location = ReadFilePosition(reader); var resolvedEntry = ResolvedEntry.ReadResolvedEntry(context); AddResolvedEntry(location, resolvedEntry); if (resolvedEntry.SymbolName.IsValid) { AddResolvedEntry(resolvedEntry.SymbolName, resolvedEntry); } } }
/// <summary> /// Constructs an instantiated file module denoted by a path. /// </summary> /// <remarks> /// The outer scope is typically the global module. /// </remarks> protected static FileModuleLiteral CreateInstantiatedFileModule(AbsolutePath path, QualifierValue qualifier, GlobalModuleLiteral globalScope, Package package, ModuleRegistry moduleRegistry, LineMap lineMap) { return(new FileModuleLiteral(path, qualifier, globalScope, package, moduleRegistry, lineMap)); }