Boo.Lang.Compiler.TypeSystem.GenericParameterInferrer.GetInferredType C# (CSharp) Method

GetInferredType() private method

private GetInferredType ( IGenericParameter gp ) : IType
gp IGenericParameter
return IType
        private IType GetInferredType(IGenericParameter gp)
        {
            if (_inferredTypes.ContainsKey(gp))
            {
                return _inferredTypes[gp].ResultingType;
            }
            else
            {
                return null;
            }
        }

Usage Example

Example #1
0
        private void ProcessClosureInMethodInvocation(GenericParameterInferrer inferrer, BlockExpression closure, ICallableType formalType)
        {
            var sig = formalType.GetSignature();

            var replacer = new TypeReplacer();
            var collector = new TypeCollector(delegate(IType t)
            {
                IGenericParameter gp = t as IGenericParameter;
                if (gp == null) return false;
                return gp.DeclaringEntity == inferrer.GenericMethod;
            });

            collector.Visit(formalType);
            foreach (var typeParameter in collector.Matches)
            {
                var inferredType = inferrer.GetInferredType((IGenericParameter)typeParameter);
                if (inferredType != null)
                    replacer.Replace(typeParameter, inferredType);
            }

            for (var i = 0; i < sig.Parameters.Length; i++)
            {
                var pd = closure.Parameters[i];
                if (pd.Type != null) continue;
                pd.Type = CodeBuilder.CreateTypeReference(replacer.MapType(sig.Parameters[i].Type));
            }

            ProcessClosureBody(closure);
        }