public static string GetReturnCSharpType(this IMethodLike callable, IndentWriter writer) { var retVal = callable.ReturnValue; if (retVal == null) { return("void"); } // TODO: Handle marshalling. // Try getting the array return value, then the type one. var retSymbol = retVal.Resolve(writer.Options); return(retSymbol.CSharpType); }
public static ParametersResult BuildParameters(this IMethodLike callable, GenerationOptions opts, bool appendInstanceParameters) { var parameters = callable.Parameters; var marshalTypeAndName = new List <string>(parameters.Count); var typeAndName = new List <string> (parameters.Count); var parameterNames = new List <string> (parameters.Count); for (int i = 0; i < parameters.Count; ++i) { var parameter = parameters [i]; if (!appendInstanceParameters) { if (parameter is InstanceParameter) { continue; } // HACK: Make this proper if (i == 0 && callable is Function) { continue; } } var symbol = parameter.Resolve(opts); marshalTypeAndName.Add(symbol.CSharpType + " " + parameter.Name); typeAndName.Add(symbol.CSharpType + (parameter.Array != null ? "[]" : "") + " " + parameter.Name); parameterNames.Add(parameter.Name); } // PERF: Use an array as the string[] overload of Join is way more efficient than the IEnumerable<string> one. string marshalParameterString = string.Join(", ", marshalTypeAndName.ToArray()); string parameterString = string.Join(", ", typeAndName.ToArray()); string baseParams = string.Join(", ", parameterNames.ToArray()); return(new ParametersResult(marshalParameterString, parameterString, baseParams)); }