public string Convert(ParameterIL parameter) { var type = typeConverter.Convert(parameter.DataType); return(parameter switch { NamedParameterIL param => $"{type} {nameMangler.Mangle(param.Symbol.Name)}", SelfParameterIL _ => $"{type} {nameMangler.SelfName}", FieldParameterIL param => $"{type} {nameMangler.Mangle(param.InitializeField.Name)}", _ => throw ExhaustiveMatch.Failed(parameter) });
private static string FormatParameter(ParameterIL parameter) { var format = parameter.IsMutableBinding ? "var {0}: {1}" : "{0}: {1}"; return(parameter switch { // TODO what about escaping the name? NamedParameterIL param => string.Format(CultureInfo.InvariantCulture, format, param.Symbol.Name, param.DataType), // TODO is this the correct name for self? SelfParameterIL param => string.Format(CultureInfo.InvariantCulture, format, "self", param.DataType), FieldParameterIL param => $".{param.InitializeField.Name}", _ => throw ExhaustiveMatch.Failed(parameter) });