private static void VisitTypeReference(ITypeReference typeReference, EmitContext context) { Debug.Assert(typeReference != null); IArrayTypeReference arrayType = typeReference as IArrayTypeReference; if (arrayType != null) { VisitTypeReference(arrayType.GetElementType(context), context); return; } IPointerTypeReference pointerType = typeReference as IPointerTypeReference; if (pointerType != null) { VisitTypeReference(pointerType.GetTargetType(context), context); return; } //IManagedPointerTypeReference managedPointerType = typeReference as IManagedPointerTypeReference; //if (managedPointerType != null) //{ // VisitTypeReference(managedPointerType.GetTargetType(this.context)); // return; //} IModifiedTypeReference modifiedType = typeReference as IModifiedTypeReference; if (modifiedType != null) { foreach (var custModifier in modifiedType.CustomModifiers) { VisitTypeReference(custModifier.GetModifier(context), context); } VisitTypeReference(modifiedType.UnmodifiedType, context); return; } // Visit containing type INestedTypeReference nestedType = typeReference.AsNestedTypeReference; if (nestedType != null) { VisitTypeReference(nestedType.GetContainingType(context), context); } // Visit generic arguments IGenericTypeInstanceReference genericInstance = typeReference.AsGenericTypeInstanceReference; if (genericInstance != null) { foreach (var arg in genericInstance.GetGenericArguments(context)) { VisitTypeReference(arg, context); } } }
internal static void GetConsolidatedTypeArguments(this ITypeReference typeReference, ArrayBuilder <ITypeReference> consolidatedTypeArguments, EmitContext context) { INestedTypeReference nestedTypeReference = typeReference.AsNestedTypeReference; nestedTypeReference?.GetContainingType(context).GetConsolidatedTypeArguments(consolidatedTypeArguments, context); IGenericTypeInstanceReference genTypeInstance = typeReference.AsGenericTypeInstanceReference; if (genTypeInstance != null) { consolidatedTypeArguments.AddRange(genTypeInstance.GetGenericArguments(context)); } }
public override void Visit(IGenericTypeInstanceReference genericTypeInstanceReference) { // ^ ensures this.path.Count == old(this.path.Count); INestedTypeReference nestedType = genericTypeInstanceReference.AsNestedTypeReference; if (nestedType != null) { ITypeReference containingType = nestedType.GetContainingType(Context); if (containingType.AsGenericTypeInstanceReference != null || containingType.AsSpecializedNestedTypeReference != null) { this.Visit(nestedType.GetContainingType(Context)); } } this.Visit(genericTypeInstanceReference.GenericType); this.Visit(genericTypeInstanceReference.GetGenericArguments(Context)); }
public override void Visit(IGenericTypeInstanceReference genericTypeInstanceReference) { // ^ ensures this.path.Count == old(this.path.Count); INestedTypeReference nestedType = genericTypeInstanceReference.AsNestedTypeReference; if (nestedType != null) { ITypeReference containingType = nestedType.GetContainingType(Context); if (containingType.AsGenericTypeInstanceReference != null || containingType.AsSpecializedNestedTypeReference != null) { this.Visit(nestedType.GetContainingType(Context)); } } this.Visit(genericTypeInstanceReference.GenericType); this.Visit(genericTypeInstanceReference.GetGenericArguments(Context)); }