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); }
/// <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))); }
/// <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"); }