From 5de8f1602324dc835013977e28844780a7365e15 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: Thu, 22 Dec 2016 23:15:20 +0100 Subject: [PATCH] bug fix #324 --- ParserTools/ParserTools/DefaultLanguageInformation.cs | 8 ++++---- TestSuite/extensionoperators1.pas | 9 +++++++++ TreeConverter/TreeConversion/syntax_tree_visitor.cs | 6 ++++-- 3 files changed, 17 insertions(+), 6 deletions(-) create mode 100644 TestSuite/extensionoperators1.pas diff --git a/ParserTools/ParserTools/DefaultLanguageInformation.cs b/ParserTools/ParserTools/DefaultLanguageInformation.cs index bc9f9317d..540aa5f5d 100644 --- a/ParserTools/ParserTools/DefaultLanguageInformation.cs +++ b/ParserTools/ParserTools/DefaultLanguageInformation.cs @@ -1727,7 +1727,7 @@ namespace PascalABCCompiler.Parsers if (!class_generic_table.ContainsKey(class_generic_args[i].Name)) class_generic_table.Add(class_generic_args[i].Name, j); if (scope.GenericArgs != null && scope.GenericArgs.Count > j) - generic_param_args.Add(class_generic_args[i].Name, scope.GenericArgs[j]); + generic_param_args.Add(class_generic_args[i].Name, GetSimpleDescription(scope.DeclaringType.GenericInstances[0])); else if (scope.DeclaringType.TemplateArguments != null && scope.DeclaringType.TemplateArguments.Length > j) generic_param_args.Add(class_generic_args[i].Name, scope.DeclaringType.TemplateArguments[j]); } @@ -1754,9 +1754,9 @@ namespace PascalABCCompiler.Parsers int ind = class_generic_table[tt[i].Name]; if (scope.GenericArgs != null && scope.GenericArgs.Count > ind) { - sb.Append(scope.GenericArgs[ind]); + sb.Append(GetSimpleDescription(scope.DeclaringType.GenericInstances[ind])); if (!generic_param_args.ContainsKey(tt[i].Name)) - generic_param_args.Add(tt[i].Name, scope.GenericArgs[ind]); + generic_param_args.Add(tt[i].Name, GetSimpleDescription(scope.DeclaringType.GenericInstances[ind])); } } else @@ -1868,7 +1868,7 @@ namespace PascalABCCompiler.Parsers { if (extensionType != null) { - sb.Append(extensionType); + sb.Append(extensionType+"."); sb.Append(scope.Name); } else diff --git a/TestSuite/extensionoperators1.pas b/TestSuite/extensionoperators1.pas new file mode 100644 index 000000000..b4710759a --- /dev/null +++ b/TestSuite/extensionoperators1.pas @@ -0,0 +1,9 @@ +begin + var seq1 := Range(1, 3)+2; + var arr := seq1.ToArray; + assert(arr[3] = 2); + seq1 := 2+Range(1, 3); + assert(seq1.First = 2); + seq1 := Range(1, 3)+Range(4, 6); + assert(seq1.Last = 6); +end. \ No newline at end of file diff --git a/TreeConverter/TreeConversion/syntax_tree_visitor.cs b/TreeConverter/TreeConversion/syntax_tree_visitor.cs index 3a49d52e7..17017e352 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -1101,9 +1101,11 @@ namespace PascalABCCompiler.TreeConverter #endif function_node fn = ((function_node)(sic.sym_info)); - if (convertion_data_and_alghoritms.is_exist_eq_method_in_list(fn, funcs) != null) + if (convertion_data_and_alghoritms.is_exist_eq_method_in_list(fn, funcs) == null) { - break; + //break; + funcs.AddElement(fn); + } funcs.AddElement(fn); sic_last = sic;