コード例 #1
0
ファイル: ModuleLiteral.cs プロジェクト: narasamdya/BuildXL
 /// <nodoc/>
 protected ModuleLiteral(ModuleLiteralId id, QualifierValue qualifier, ModuleLiteral outerScope, LineInfo location)
     : base(location)
 {
     Id          = id;
     m_qualifier = qualifier;
     OuterScope  = outerScope;
 }
コード例 #2
0
        /// <summary>
        /// Creates a module key.
        /// </summary>
        public static QualifiedModuleId Create(ModuleLiteralId id, QualifierId qualifierId)
        {
            Contract.Requires(id.IsValid);
            Contract.Requires(qualifierId.IsValid);

            return(new QualifiedModuleId(id, qualifierId));
        }
コード例 #3
0
ファイル: FileModuleLiteral.cs プロジェクト: socat/BuildXL
        /// <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;
        }
コード例 #4
0
        /// <nodoc/>
        public TypeOrNamespaceModuleLiteral(ModuleLiteralId id, QualifierValue qualifier, ModuleLiteral outerScope, LineInfo location)
            : base(id, qualifier, outerScope, location)
        {
            Contract.Requires(id.Name.IsValid, "id.Name.IsValid");
            Contract.Requires(outerScope != null, "outerScope != null");

            // Only in V1 type or namespace module literals are unqualified. In V2 unqualified is never used for type or namespace literals.
            Contract.Requires(qualifier == QualifierValue.Unqualified || outerScope.Qualifier.QualifierId == qualifier.QualifierId);
        }
コード例 #5
0
ファイル: FileModuleLiteral.cs プロジェクト: socat/BuildXL
        /// <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;
        }
コード例 #6
0
ファイル: ModuleLiteral.cs プロジェクト: narasamdya/BuildXL
        /// <summary>
        /// Constructs module literal for namespace.
        /// </summary>
        protected static TypeOrNamespaceModuleLiteral CreateTypeOrNamespaceModule(FullSymbol namespaceName, ModuleLiteral outerScope, LineInfo location)
        {
            Contract.Requires(namespaceName.IsValid);
            Contract.Requires(outerScope != null);
            Contract.Requires(outerScope.IsFileOrGlobal);

            ModuleLiteralId moduleId = outerScope.Id.WithName(namespaceName);

            return(new TypeOrNamespaceModuleLiteral(moduleId, qualifier: QualifierValue.Unqualified,
                                                    outerScope: outerScope, location: location));
        }
コード例 #7
0
ファイル: ModuleLiteral.cs プロジェクト: narasamdya/BuildXL
        /// <nodoc />
        protected static ModuleLiteralId ReadModuleLiteralId(BuildXLReader reader)
        {
            var name = reader.ReadFullSymbol();
            var path = reader.ReadAbsolutePath();

            // Name and Id could be invalid in case of a fake type or namespace.
            if (!name.IsValid && !path.IsValid)
            {
                return(default(ModuleLiteralId));
            }

            return(ModuleLiteralId.Create(path).WithName(name));
        }
コード例 #8
0
ファイル: FileModuleLiteral.cs プロジェクト: socat/BuildXL
        private FileModuleLiteral GetFileModuleInstanceFromImportOrExportDeclaration(
            ModuleRegistry moduleRegistry,
            AbsolutePath referencedPath)
        {
            var importedModuleId = ModuleLiteralId.Create(referencedPath);

            // Get the uninstantiated version of this file module.
            UninstantiatedModuleInfo importedModuleInfo = moduleRegistry.GetUninstantiatedModuleInfoByModuleId(importedModuleId);

            // Evaluate qualifier if specified.
            QualifierValue qualifierValue = Qualifier;

            // Instantiate this file module according to the qualifier.
            FileModuleLiteral importedModule = importedModuleInfo.FileModuleLiteral.InstantiateFileModuleLiteral(moduleRegistry, qualifierValue);

            return(importedModule);
        }
コード例 #9
0
ファイル: ModuleLiteral.cs プロジェクト: narasamdya/BuildXL
 /// <nodoc />
 protected static void Write(BuildXLWriter writer, ModuleLiteralId moduleId)
 {
     writer.Write(moduleId.Name);
     writer.Write(moduleId.Path);
 }
コード例 #10
0
 /// <nodoc />
 private QualifiedModuleId(ModuleLiteralId id, QualifierId qualifier)
 {
     Id          = id;
     QualifierId = qualifier;
     m_hashCode  = HashCodeHelper.Combine(Id.GetHashCode(), QualifierId.GetHashCode());
 }