Пример #1
0
        /// <summary>
        /// Enumerate all type definitions within a given namespace.
        /// </summary>
        /// <param name="metadataUnit">Metadata unit containing the namespace</param>
        /// <param name="metadataReader">Metadata reader for the scope metadata</param>
        /// <param name="namespaceDefinitionHandle">Namespace to enumerate</param>
        private IEnumerable <MetadataType> GetTypesInNamespace(
            NativeFormatMetadataUnit metadataUnit,
            MetadataReader metadataReader,
            NamespaceDefinitionHandle namespaceDefinitionHandle)
        {
            NamespaceDefinition namespaceDefinition = metadataReader.GetNamespaceDefinition(namespaceDefinitionHandle);

            // First, enumerate all types (including nested) in the current namespace
            foreach (TypeDefinitionHandle namespaceTypeHandle in namespaceDefinition.TypeDefinitions)
            {
                yield return((MetadataType)metadataUnit.GetType(namespaceTypeHandle));

                foreach (MetadataType nestedType in GetNestedTypes(metadataUnit, metadataReader, namespaceTypeHandle))
                {
                    yield return(nestedType);
                }
            }

            // Second, recurse into nested namespaces
            foreach (NamespaceDefinitionHandle nestedNamespace in namespaceDefinition.NamespaceDefinitions)
            {
                foreach (MetadataType type in GetTypesInNamespace(metadataUnit, metadataReader, nestedNamespace))
                {
                    yield return(type);
                }
            }
        }
Пример #2
0
        public NativeFormatModule GetModuleFromAssemblyName(string assemblyNameString)
        {
            AssemblyBindResult  bindResult;
            RuntimeAssemblyName assemblyName = AssemblyNameParser.Parse(assemblyNameString);
            Exception           failureException;

            if (!AssemblyBinderImplementation.Instance.Bind(assemblyName, cacheMissedLookups: true, out bindResult, out failureException))
            {
                throw failureException;
            }

            var moduleList = Internal.Runtime.TypeLoader.ModuleList.Instance;
            NativeFormatModuleInfo primaryModule = moduleList.GetModuleInfoForMetadataReader(bindResult.Reader);

            // If this isn't the primary module, defer to that module to load the MetadataUnit
            if (primaryModule != _module)
            {
                return(Context.ResolveMetadataUnit(primaryModule).GetModule(bindResult.ScopeDefinitionHandle));
            }

            // Setup arguments and allocate the NativeFormatModule
            ArrayBuilder <NativeFormatModule.QualifiedScopeDefinition> qualifiedScopes = new ArrayBuilder <NativeFormatModule.QualifiedScopeDefinition>();

            qualifiedScopes.Add(new NativeFormatModule.QualifiedScopeDefinition(this, bindResult.ScopeDefinitionHandle));

            foreach (QScopeDefinition scope in bindResult.OverflowScopes)
            {
                NativeFormatModuleInfo   module       = moduleList.GetModuleInfoForMetadataReader(scope.Reader);
                ScopeDefinitionHandle    scopeHandle  = scope.Handle;
                NativeFormatMetadataUnit metadataUnit = Context.ResolveMetadataUnit(module);
                qualifiedScopes.Add(new NativeFormatModule.QualifiedScopeDefinition(metadataUnit, scopeHandle));
            }

            return(new NativeFormatModule(Context, qualifiedScopes.ToArray()));
        }
        // TODO
        // bool _hasModifiers;

        public NativeFormatSignatureParser(NativeFormatMetadataUnit metadataUnit, Handle signatureHandle, MetadataReader metadataReader)
        {
            _metadataUnit    = metadataUnit;
            _signatureHandle = signatureHandle;
            _metadataReader  = metadataReader;
            // _hasModifiers = false;
        }
Пример #4
0
        internal NativeFormatType(NativeFormatMetadataUnit metadataUnit, TypeDefinitionHandle handle)
        {
            _handle       = handle;
            _metadataUnit = metadataUnit;

            _typeDefinition = metadataUnit.MetadataReader.GetTypeDefinition(handle);
            _module         = metadataUnit.GetModuleFromNamespaceDefinition(_typeDefinition.NamespaceDefinition);

            _baseType = this; // Not yet initialized flag

#if DEBUG
            // Initialize name eagerly in debug builds for convenience
            this.ToString();
#endif
        }
Пример #5
0
        /// <summary>
        /// Enumerate all nested types under a given owning type.
        /// </summary>
        /// <param name="metadataUnit">Metadata unit containing the type</param>
        /// <param name="metadataReader">Metadata reader for the type metadata</param>
        /// <param name="owningTypeHandle">Containing type to search for nested types</param>
        private IEnumerable <MetadataType> GetNestedTypes(
            NativeFormatMetadataUnit metadataUnit,
            MetadataReader metadataReader,
            TypeDefinitionHandle owningTypeHandle)
        {
            TypeDefinition owningType = metadataReader.GetTypeDefinition(owningTypeHandle);

            foreach (TypeDefinitionHandle nestedTypeHandle in owningType.NestedTypes)
            {
                yield return((MetadataType)metadataUnit.GetType(nestedTypeHandle));

                foreach (MetadataType nestedType in GetNestedTypes(metadataUnit, metadataReader, nestedTypeHandle))
                {
                    yield return(nestedType);
                }
            }
        }
 internal NativeFormatGenericParameter(NativeFormatMetadataUnit metadataUnit, GenericParameterHandle handle)
 {
     _metadataUnit = metadataUnit;
     _handle       = handle;
 }
Пример #7
0
 public NativeFormatObjectLookupHashtable(NativeFormatMetadataUnit metadataUnit, MetadataReader metadataReader)
 {
     _metadataUnit   = metadataUnit;
     _metadataReader = metadataReader;
 }
Пример #8
0
 public QualifiedNamespaceDefinition(NativeFormatMetadataUnit metadataUnit, NamespaceDefinition namespaceDefinition)
 {
     MetadataUnit = metadataUnit;
     Definition   = namespaceDefinition;
 }
Пример #9
0
 public QualifiedScopeDefinition(NativeFormatMetadataUnit metadataUnit, Handle handle)
 {
     MetadataUnit = metadataUnit;
     Handle       = handle.ToScopeDefinitionHandle(metadataUnit.MetadataReader);
     Definition   = metadataUnit.MetadataReader.GetScopeDefinition(Handle);
 }