Ejemplo n.º 1
0
        IList <Expression> GetArgumentsWithConversions(Expression targetExpression, IParameterizedMember bestCandidateForNamedArguments)
        {
            var conversions = this.ArgumentConversions;

            Expression[] args = new Expression[arguments.Length];
            for (int i = 0; i < args.Length; i++)
            {
                var argument = arguments[i];
                if (this.IsExtensionMethodInvocation && i == 0 && targetExpression != null)
                {
                    argument = targetExpression;
                }
                int parameterIndex = bestCandidate.ArgumentToParameterMap[i];
                if (parameterIndex >= 0 && conversions[i] != Conversion.IdentityConversion)
                {
                    // Wrap argument in ConversionResolveResult
                    IType parameterType = bestCandidate.ParameterTypes[parameterIndex];
                    if (parameterType.Kind != TypeKind.Unknown)
                    {
                        if (arguments[i].IsCompileTimeConstant && conversions[i].IsValid && !conversions[i].IsUserDefined)
                        {
                            argument = new CastExpression(parameterType, argument).DoResolve(new ResolveContext(compilation).WithCheckForOverflow(CheckForOverflow));
                        }
                        else
                        {
                            argument = new AST.CastExpression(parameterType, argument, conversions[i], CheckForOverflow);
                        }
                    }
                }
                if (bestCandidateForNamedArguments != null && argumentNames[i] != null)
                {
                    // Wrap argument in NamedArgumentResolveResult
                    if (parameterIndex >= 0)
                    {
                        argument = new NamedArgumentExpression(bestCandidateForNamedArguments.Parameters[parameterIndex], argument, bestCandidateForNamedArguments);
                    }
                    else
                    {
                        argument = new NamedArgumentExpression(argumentNames[i], argument);
                    }
                }
                args[i] = argument;
            }
            return(args);
        }
Ejemplo n.º 2
0
 /// <summary>
 /// Renders a single CastExpression to VHDL
 /// </summary>
 /// <returns>The VHDL equivalent of the expression.</returns>
 /// <param name="e">The expression to render</param>
 private string RenderExpression(AST.CastExpression e)
 {
     return(string.Format("({0}){1}", m_typeScope.GetType(e.SourceResultType).Name, RenderExpression(e.Expression)));
 }
Ejemplo n.º 3
0
 /// <summary>
 /// Renders a single CastExpression to VHDL
 /// </summary>
 /// <returns>The VHDL equivalent of the expression.</returns>
 /// <param name="e">The expression to render</param>
 private string RenderExpression(AST.CastExpression e)
 {
     throw new Exception("All cast expressions should be removed");
 }