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