public override GenericContext VerifyAndUpdateMethodArguments(int expectedNumberOfMethodArgs) { if (expectedNumberOfMethodArgs == (int)base.MethodArgs.Length) { return(this); } Type[] metadataOnlyTypeVariableRef = new Type[expectedNumberOfMethodArgs]; for (int i = 0; i < expectedNumberOfMethodArgs; i++) { metadataOnlyTypeVariableRef[i] = new MetadataOnlyTypeVariableRef(this.m_resolver, this.m_ownerMethod, i); } return(new OpenGenericContext(base.TypeArgs, metadataOnlyTypeVariableRef)); }
public OpenGenericContext(MetadataOnlyModule resolver, Type ownerType, Token ownerMethod) : base(null, null) { this.m_resolver = resolver; this.m_ownerMethod = ownerMethod; int length = (int)ownerType.GetGenericArguments().Length; Type[] metadataOnlyTypeVariableRef = new Type[length]; Token token = new Token(ownerType.MetadataToken); for (int i = 0; i < length; i++) { metadataOnlyTypeVariableRef[i] = new MetadataOnlyTypeVariableRef(resolver, token, i); } base.TypeArgs = metadataOnlyTypeVariableRef; }
public override bool Equals(Type other) { MetadataOnlyTypeVariableRef metadataOnlyTypeVariableRef = other as MetadataOnlyTypeVariableRef; if (metadataOnlyTypeVariableRef != null) { if (!this.Resolver.Equals(metadataOnlyTypeVariableRef.Resolver) || this.m_ownerToken.Value != metadataOnlyTypeVariableRef.m_ownerToken.Value) { return(false); } return(this.m_position == metadataOnlyTypeVariableRef.m_position); } if (!other.IsGenericParameter) { return(false); } bool isMethodVar = this.IsMethodVar == (other.DeclaringMethod != null); if (this.m_position == other.GenericParameterPosition) { return(isMethodVar); } return(false); }