From 6b52b13695ab771bbdc0ea12e27acf81b73086b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=91=D0=BE=D0=BD=D0=B4=D0=B0=D1=80=D0=B5=D0=B2=20=D0=98?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD?= Date: Wed, 14 Sep 2016 19:47:34 +0200 Subject: [PATCH] bug fix #275 --- .../ParserTools/DefaultLanguageInformation.cs | 47 ++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/ParserTools/ParserTools/DefaultLanguageInformation.cs b/ParserTools/ParserTools/DefaultLanguageInformation.cs index 366e2d95a..2467f3ae5 100644 --- a/ParserTools/ParserTools/DefaultLanguageInformation.cs +++ b/ParserTools/ParserTools/DefaultLanguageInformation.cs @@ -415,6 +415,8 @@ namespace PascalABCCompiler.Parsers return getLambdaRepresentation(ctn, false, new List()); else if (ctn.Name == "IEnumerable`1") return "sequence of " + GetShortTypeName(ctn.GetGenericArguments()[0], false); + else if (ctn.Name.Contains("Tuple`")) + return get_tuple_string(ctn); } if (ctn.Name.Contains("`")) { @@ -439,6 +441,35 @@ namespace PascalABCCompiler.Parsers return ctn.FullName; } + private string get_tuple_string(ITypeScope[] generic_args) + { + StringBuilder sb = new StringBuilder(); + sb.Append("("); + for (int i = 0; i < generic_args.Length; i++) + { + sb.Append(GetSimpleDescriptionWithoutNamespace(generic_args[i])); + if (i < generic_args.Length - 1) + sb.Append(","); + } + sb.Append(")"); + return sb.ToString(); + } + + private string get_tuple_string(Type t) + { + StringBuilder sb = new StringBuilder(); + sb.Append("("); + Type[] generic_args = t.GetGenericArguments(); + for (int i = 0; i()); else if (ctn.Name == "IEnumerable`1") return "sequence of " + GetShortTypeName(ctn.GetGenericArguments()[0], false); + else if (ctn.Name.Contains("Tuple`")) + return get_tuple_string(ctn); } int len = ctn.GetGenericArguments().Length; System.Text.StringBuilder sb = new System.Text.StringBuilder(); @@ -1133,7 +1166,7 @@ namespace PascalABCCompiler.Parsers { return getLambdaRepresentation(scope, false); } - else if (scope.CompiledType.Name != null && scope.CompiledType.Name == "IEnumerable`1") + else if (scope.CompiledType.Name == "IEnumerable`1") { ITypeScope[] instances = scope.GenericInstances; if (instances != null && instances.Length > 0) @@ -1143,6 +1176,16 @@ namespace PascalABCCompiler.Parsers else return "sequence of T"; } + else if (scope.CompiledType.Name != null && scope.CompiledType.Name.Contains("Tuple`")) + { + ITypeScope[] instances = scope.GenericInstances; + if (instances != null && instances.Length > 0) + { + return get_tuple_string(instances); + } + else + return "(T1,...)"; + } else { string s = GetShortTypeName(scope.CompiledType); @@ -1520,6 +1563,8 @@ namespace PascalABCCompiler.Parsers return getLambdaRepresentation(t, true, generic_args, generic_param_args); else if (t.Name.Contains("Action`") ) return getLambdaRepresentation(t, false, generic_args, generic_param_args); + else if (t.Name.Contains("Tuple`")) + return get_tuple_string(t); } string name = GetShortTypeName(t); StringBuilder sb = new StringBuilder();