/// <summary>
        /// Translates the invocated name to lower case
        /// </summary>
        protected StringBuilder ToLower(MethodDefinition m, InvocationExpression i)
        {
            var result    = new StringBuilder();
            var lowerName = Char.ToLowerInvariant(m.Name[0]) + m.Name.Substring(1);

            return(result.Append(lowerName).Append("(").Append(ArgsToString(i.Arguments)).Append(")"));
        }
        // Dispatcher
        protected StringBuilder VisitShaderDefCall(MethodDefinition m, InvocationExpression invocationExpression)
        {
            var tok = m.Resolve().MetadataToken.ToInt32();
            Func <MethodDefinition, InvocationExpression, StringBuilder> handler;
            var etok = Expression.Lambda <Action>(Expression.Constant(tok));

            return(Handlers.TryGetValue(etok, out handler) ?
                   handler(m, invocationExpression) : PassThrough(m, invocationExpression));
        }
        /// <summary>
        /// Translates the invocated name without any modifications
        /// </summary>
        protected StringBuilder PassThrough(MethodDefinition m, InvocationExpression i)
        {
            var result = new StringBuilder();

            return(result.Append(m.Name).Append("(").Append(ArgsToString(i.Arguments)).Append(")"));
        }
 private StringBuilder KeywordDiscard(MethodDefinition unused1, InvocationExpression unused2)
 {
     return new StringBuilder("discard");
 }