From aad1437f36078084add21f612862f93040b1a338 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, 31 Dec 2015 15:11:25 +0100 Subject: [PATCH] bug fix s.ToWords() from pabcrtl.dll --- TestSuite/extensionmethods13.pas | 12 ++++++++++++ TestSuite/params7.pas | 1 - .../TreeConversion/convertion_data_and_alghoritms.cs | 9 +++++++-- 3 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 TestSuite/extensionmethods13.pas diff --git a/TestSuite/extensionmethods13.pas b/TestSuite/extensionmethods13.pas new file mode 100644 index 000000000..33f29ac36 --- /dev/null +++ b/TestSuite/extensionmethods13.pas @@ -0,0 +1,12 @@ +begin +var res := Seq('234 456','222 333').Select(s->s.ToWords).Select(ss->Rec(ss[0],ss[1].ToInteger)); +var ind := 0; +foreach tup: System.Tuple in res do +begin + if ind = 0 then + assert(tup.Item2 = 456) + else + assert(tup.Item2 = 333); + Inc(ind); +end; +end. \ No newline at end of file diff --git a/TestSuite/params7.pas b/TestSuite/params7.pas index bd12767e6..22dfbb84e 100644 --- a/TestSuite/params7.pas +++ b/TestSuite/params7.pas @@ -2,5 +2,4 @@ begin var s := 'abc def'; var arr : array of string := s.ToWords; assert(arr[0] = 'abc'); - writeln(s.ToWords); end. \ No newline at end of file diff --git a/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs b/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs index 10555032e..8f03d237e 100644 --- a/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs +++ b/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs @@ -1625,7 +1625,9 @@ namespace PascalABCCompiler.TreeConverter } else if ((exprs.Count < fn.parameters.Count) && (fn.node_kind == SemanticTree.node_kind.compiled)) { - if (exprs.Count == 0 && fn.parameters != null && fn.parameters.Count == 1 && fn.parameters[0].is_params) + if (exprs.Count == 0 && fn.parameters != null && fn.parameters.Count == 1 && fn.parameters[0].is_params || + exprs.Count == 1 && fn.parameters != null && fn is compiled_function_node && (fn as compiled_function_node).ConnectedToType != null && + fn.parameters.Count == 2 && fn.parameters[1].is_params) { statements_expression_node sre = new statements_expression_node(ptcal.snl, ptcal.var_ref, ptcal.var_ref.location); exprs.AddElement(sre); @@ -1820,7 +1822,10 @@ namespace PascalABCCompiler.TreeConverter } else if (parameters.Count == 1 && fn is common_namespace_function_node && (fn as common_namespace_function_node).ConnectedToType != null && fn.parameters.Count == 2 && fn.parameters[1].is_params) set_of_possible_functions.AddElement(fn); - functions=functions.Next; + else if (parameters.Count == 1 && fn is compiled_function_node && (fn as compiled_function_node).ConnectedToType != null && fn.parameters.Count == 2 && fn.parameters[1].is_params) + if (!set_of_possible_functions.Contains(fn)) + set_of_possible_functions.AddElement(fn); + functions =functions.Next; } if (set_of_possible_functions.Count==0 && indefinits.Count == 0)