Example #1
0
        /// <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;
        }
Example #2
0
 /// <nodoc />
 internal FileModuleLiteral(
     BuildXLReader reader,
     PathTable pathTable,
     GlobalModuleLiteral outerScope,
     ModuleRegistry moduleRegistry,
     LineMap lineMap)
     : this(reader, pathTable, reader.ReadAbsolutePath(), ReadPackage(reader, pathTable), outerScope, moduleRegistry, lineMap)
 {
 }
Example #3
0
        /// <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));
        }
Example #4
0
        /// <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;
        }
Example #5
0
        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);
            }
        }
Example #6
0
        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);
        }
Example #7
0
        /// <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);
                }
            }
        }
Example #8
0
 /// <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));
 }