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");