From 052d0e38a948680ece6c99885eba9c7dbf176bd9 Mon Sep 17 00:00:00 2001 From: Ivan Bondarev Date: Fri, 7 Apr 2023 14:09:53 +0200 Subject: [PATCH] #2833 --- TestSuite/Deconstructs2.pas | 16 ++++++++++++++++ .../SyntaxTreeVisitorNodes/Patterns.cs | 2 ++ 2 files changed, 18 insertions(+) create mode 100644 TestSuite/Deconstructs2.pas diff --git a/TestSuite/Deconstructs2.pas b/TestSuite/Deconstructs2.pas new file mode 100644 index 000000000..d47b21bf0 --- /dev/null +++ b/TestSuite/Deconstructs2.pas @@ -0,0 +1,16 @@ +var i: integer; +type + t1 = class + procedure Deconstruct; + begin + i := 1; + end; + end; + +begin + if new t1 is t1(var a) then + begin + i := 2; + end; + assert(i = 2); +end. \ No newline at end of file diff --git a/TreeConverter/TreeConversion/SyntaxTreeVisitorNodes/Patterns.cs b/TreeConverter/TreeConversion/SyntaxTreeVisitorNodes/Patterns.cs index 99dc7da6f..18cdb615d 100644 --- a/TreeConverter/TreeConversion/SyntaxTreeVisitorNodes/Patterns.cs +++ b/TreeConverter/TreeConversion/SyntaxTreeVisitorNodes/Patterns.cs @@ -93,6 +93,8 @@ namespace PascalABCCompiler.TreeConverter out type_node[] parameterTypes) { parameterTypes = new type_node[givenParameterTypes.Length]; + if (candidate.parameters.Count == 0) + return false; candidate.parameters[0].name = "Self"; // SSM 23.06.20 #2268 - это если в NET где-то такое нашли var selfParameter = candidate.is_extension_method ? candidate.parameters.FirstOrDefault(IsSelfParameter) : null; Debug.Assert(!candidate.is_extension_method || selfParameter != null, "Couldn't find self parameter in extension method");