Mono.CSharp.ImplicitLambdaParameter.Resolve C# (CSharp) Method

Resolve() public method

public Resolve ( IMemberContext ec, int index ) : System.TypeSpec
ec IMemberContext
index int
return System.TypeSpec
		public override TypeSpec Resolve (IMemberContext ec, int index)
		{
			if (parameter_type == null)
				throw new InternalErrorException ("A type of implicit lambda parameter `{0}' is not set",
					Name);

			base.idx = index;
			return parameter_type;
		}

Usage Example

示例#1
0
        protected override ParametersCompiled ResolveParameters(ResolveContext ec, TypeInferenceContext tic, TypeSpec delegateType)
        {
            if (!delegateType.IsDelegate)
            {
                return(null);
            }

            AParametersCollection d_params = Delegate.GetParameters(delegateType);

            if (HasExplicitParameters)
            {
                if (!VerifyExplicitParameters(ec, delegateType, d_params))
                {
                    return(null);
                }

                return(Parameters);
            }

            //
            // If L has an implicitly typed parameter list we make implicit parameters explicit
            // Set each parameter of L is given the type of the corresponding parameter in D
            //
            if (!VerifyParameterCompatibility(ec, delegateType, d_params, ec.IsInProbingMode))
            {
                return(null);
            }

            TypeSpec [] ptypes = new TypeSpec [Parameters.Count];
            for (int i = 0; i < d_params.Count; i++)
            {
                // D has no ref or out parameters
                if ((d_params.FixedParameters [i].ModFlags & Parameter.Modifier.ISBYREF) != 0)
                {
                    return(null);
                }

                TypeSpec d_param = d_params.Types [i];

                //
                // When type inference context exists try to apply inferred type arguments
                //
                if (tic != null)
                {
                    d_param = tic.InflateGenericArgument(ec, d_param);
                }

                ptypes [i] = d_param;
                ImplicitLambdaParameter ilp = (ImplicitLambdaParameter)Parameters.FixedParameters [i];
                ilp.SetParameterType(d_param);
                ilp.Resolve(null, i);
            }

            Parameters.Types = ptypes;
            return(Parameters);
        }