/// <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); } } }
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; }
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 }
/// <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; }
public NativeFormatObjectLookupHashtable(NativeFormatMetadataUnit metadataUnit, MetadataReader metadataReader) { _metadataUnit = metadataUnit; _metadataReader = metadataReader; }
public QualifiedNamespaceDefinition(NativeFormatMetadataUnit metadataUnit, NamespaceDefinition namespaceDefinition) { MetadataUnit = metadataUnit; Definition = namespaceDefinition; }
public QualifiedScopeDefinition(NativeFormatMetadataUnit metadataUnit, Handle handle) { MetadataUnit = metadataUnit; Handle = handle.ToScopeDefinitionHandle(metadataUnit.MetadataReader); Definition = metadataUnit.MetadataReader.GetScopeDefinition(Handle); }