private static bool WriteParametersToSb(MethodData operationData, MethodBase methodInfo, StringBuilder sb,
                                                MethodInterpreter interpreter, CrRuntimeLibrary crRuntime)
        {
            var identifierValues = operationData.Parameters;

            var escapingData = methodInfo.BuildEscapingBools(crRuntime);

            if (escapingData == null)
            {
                var argumentsCall = String.Join(", ", identifierValues.Select(p =>
                {
                    var computeValue = p.ComputedValue();

                    return(computeValue);
                }));

                sb.AppendFormat("({0});", argumentsCall);
                return(true);
            }

            #region Parameters

            sb.Append("(");
            var pos            = 0;
            var isFirst        = true;
            var argumentUsages =
                operationData.Interpreter.AnalyzeProperties.GetUsedArguments(
                    operationData.Interpreter.MidRepresentation.Vars.Arguments);

            var argumentTypes = operationData.Info.GetMethodArgumentTypes();
            for (var index = 0; index < identifierValues.Count; index++)
            {
                var value = identifierValues[index];
                if (!argumentUsages[index])
                {
                    continue;
                }
                if (isFirst)
                {
                    isFirst = false;
                }
                else
                {
                    sb.Append(", ");
                }
                var localValue   = value as LocalVariable;
                var argumentData = argumentTypes[pos];
                var isEscaping   = escapingData[pos];
                pos++;
                if (localValue == null)
                {
                    sb.Append(value.ComputedValue());
                    continue;
                }
                if (localValue.Kind == VariableKind.Argument)
                {
                }

                if (localValue.ComputedType().ClrType == typeof(IntPtr))
                {
                    var argumentTypeCast = argumentData.ToCppMangling();
                    sb.AppendFormat("({0}){1}", argumentTypeCast, localValue.Name);
                    continue;
                }

                var localValueData = interpreter.AnalyzeProperties.GetVariableData(localValue);
                switch (localValueData)
                {
                case EscapingMode.Smart:
                    if (!isEscaping && localValue.ComputedType().ClrType.IsClass)
                    {
                        sb.AppendFormat("{0}.get()", localValue.Name);
                    }
                    else
                    {
                        sb.AppendFormat("{0}", localValue.Name);
                    }
                    continue;

                case EscapingMode.Stack:
                    sb.AppendFormat("&{0}", localValue.Name);
                    continue;

                case EscapingMode.Pointer:
                    sb.AppendFormat(!isEscaping ? "{0}" : "{0}.get()", localValue.Name);
                    continue;
                }
            }

            sb.Append(");");

            #endregion

            return(false);
        }