From acaff327bcd1e83d8405c8456ebf0c56db8c8d96 Mon Sep 17 00:00:00 2001 From: Ivan Bondarev Date: Wed, 1 Nov 2023 18:24:35 +0100 Subject: [PATCH] #2922 --- TestSuite/delegates21.pas | 10 ++++++++++ TreeConverter/TreeConversion/syntax_tree_visitor.cs | 12 ++++++------ 2 files changed, 16 insertions(+), 6 deletions(-) create mode 100644 TestSuite/delegates21.pas diff --git a/TestSuite/delegates21.pas b/TestSuite/delegates21.pas new file mode 100644 index 000000000..42b62778c --- /dev/null +++ b/TestSuite/delegates21.pas @@ -0,0 +1,10 @@ +procedure pr1(act: (array of integer)-> ()); +begin + act(Arr(1,2,3)); +end; +var l: integer; + +begin + pr1(x-> begin l := x.Length end); + assert(l = 3); +end. \ No newline at end of file diff --git a/TreeConverter/TreeConversion/syntax_tree_visitor.cs b/TreeConverter/TreeConversion/syntax_tree_visitor.cs index 062073acc..6523866d9 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -21055,14 +21055,14 @@ namespace PascalABCCompiler.TreeConverter if (_modern_proc_type.el != null) { var en = _modern_proc_type.el; - if (en.enumerators.Count == 1) - AddError(get_location(en.enumerators[0].name), "ONE_TYPE_PARAMETER_MUSTBE_WITHOUT_PARENTHESES"); + //if (en.enumerators.Count == 1) + // AddError(get_location(en.enumerators[0].name), "ONE_TYPE_PARAMETER_MUSTBE_WITHOUT_PARENTHESES"); for (int i = 0; i < en.enumerators.Count; i++) { if (en.enumerators[i].value != null) AddError(get_location(en.enumerators[i].name), "ONE_TKIDENTIFIER"); - if (!(en.enumerators[i].name is named_type_reference)) + if (!(en.enumerators[i].name is named_type_reference) && !(en.enumerators[i].name is array_type)) AddError(get_location(en.enumerators[i].name), "ONE_TKIDENTIFIER"); t.Add(en.enumerators[i].name); // ??????????????? @@ -21084,15 +21084,15 @@ namespace PascalABCCompiler.TreeConverter if (_modern_proc_type.el != null) { var en = _modern_proc_type.el; - if (en.enumerators.Count == 1) - AddError(get_location(en.enumerators[0].name), "ONE_TYPE_PARAMETER_MUSTBE_WITHOUT_PARENTHESES"); + //if (en.enumerators.Count == 1) + // AddError(get_location(en.enumerators[0].name), "ONE_TYPE_PARAMETER_MUSTBE_WITHOUT_PARENTHESES"); for (int i = 0; i < en.enumerators.Count; i++) { if (en.enumerators[i].value != null) AddError(get_location(en.enumerators[i].name), "ONE_TKIDENTIFIER"); - if (!(en.enumerators[i].name is named_type_reference)) + if (!(en.enumerators[i].name is named_type_reference) && !(en.enumerators[i].name is array_type)) AddError(get_location(en.enumerators[i].name), "ONE_TKIDENTIFIER"); t.Add(en.enumerators[i].name);