From fce27649d1e9c2c8d40bfa03ed5e6dc3a60351d6 Mon Sep 17 00:00:00 2001 From: Mikhalkovich Stanislav Date: Wed, 7 Oct 2020 18:41:43 +0300 Subject: [PATCH] fix #2290 --- Configuration/GlobalAssemblyInfo.cs | 2 +- Configuration/Version.defs | 2 +- Release/pabcversion.txt | 2 +- ReleaseGenerators/PascalABCNET_version.nsh | 2 +- TestSuite/isvar1.pas | 19 +++++++++++++++++++ .../SyntaxTreeVisitorNodes/Patterns.cs | 2 +- .../TreeConversion/syntax_tree_visitor.cs | 2 +- 7 files changed, 25 insertions(+), 6 deletions(-) create mode 100644 TestSuite/isvar1.pas diff --git a/Configuration/GlobalAssemblyInfo.cs b/Configuration/GlobalAssemblyInfo.cs index 70efc987d..aed1340d2 100644 --- a/Configuration/GlobalAssemblyInfo.cs +++ b/Configuration/GlobalAssemblyInfo.cs @@ -15,7 +15,7 @@ internal static class RevisionClass public const string Major = "3"; public const string Minor = "7"; public const string Build = "1"; - public const string Revision = "2712"; + public const string Revision = "2714"; public const string MainVersion = Major + "." + Minor; public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision; diff --git a/Configuration/Version.defs b/Configuration/Version.defs index 6a1cf1644..904574e90 100644 --- a/Configuration/Version.defs +++ b/Configuration/Version.defs @@ -1,4 +1,4 @@ %COREVERSION%=1 -%REVISION%=2712 +%REVISION%=2714 %MINOR%=7 %MAJOR%=3 diff --git a/Release/pabcversion.txt b/Release/pabcversion.txt index 6a3de746c..8f6140ceb 100644 --- a/Release/pabcversion.txt +++ b/Release/pabcversion.txt @@ -1 +1 @@ -3.7.1.2712 +3.7.1.2714 diff --git a/ReleaseGenerators/PascalABCNET_version.nsh b/ReleaseGenerators/PascalABCNET_version.nsh index 08477596c..145e75515 100644 --- a/ReleaseGenerators/PascalABCNET_version.nsh +++ b/ReleaseGenerators/PascalABCNET_version.nsh @@ -1 +1 @@ -!define VERSION '3.7.1.2712' +!define VERSION '3.7.1.2714' diff --git a/TestSuite/isvar1.pas b/TestSuite/isvar1.pas new file mode 100644 index 000000000..5aac209e7 --- /dev/null +++ b/TestSuite/isvar1.pas @@ -0,0 +1,19 @@ +type + t1 = class end; + t2 = class(t1) end; + +procedure p1(a: t1); where T: class; +begin + var x: T; + if x is t1 then + Print(1); + + if a is T(var b) then + if b is t2(var c) then + Assert(c=c); +end; + +begin + var a: t1 := new t2; + p1&(a); +end. \ No newline at end of file diff --git a/TreeConverter/TreeConversion/SyntaxTreeVisitorNodes/Patterns.cs b/TreeConverter/TreeConversion/SyntaxTreeVisitorNodes/Patterns.cs index d545e498d..01d309297 100644 --- a/TreeConverter/TreeConversion/SyntaxTreeVisitorNodes/Patterns.cs +++ b/TreeConverter/TreeConversion/SyntaxTreeVisitorNodes/Patterns.cs @@ -260,7 +260,7 @@ namespace PascalABCCompiler.TreeConverter type_table.is_derived(expressionType, type) || AreTheSameType(type, expressionType) || type.IsInterface || - expressionType.IsInterface) + expressionType.IsInterface || type.is_generic_parameter || expressionType.is_generic_parameter) return; AddError(get_location(matchedExpression), "EXPRESSION_OF_TYPE_{0}_CANNOT_BE_MATCHED_AGAINST_PATTERN_WITH_TYPE_{1}", expressionType.name, type.name); diff --git a/TreeConverter/TreeConversion/syntax_tree_visitor.cs b/TreeConverter/TreeConversion/syntax_tree_visitor.cs index 1dc64a874..1e2f090aa 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -3104,7 +3104,7 @@ namespace PascalABCCompiler.TreeConverter else if (!(type_table.is_derived(en.type, tp) || type_table.is_derived(tp, en.type) || en.type == tp || en.type == SystemLibrary.SystemLibrary.object_type - || en.type.IsInterface || tp.IsInterface || tp.is_generic_parameter) + || en.type.IsInterface || tp.IsInterface || tp.is_generic_parameter || en.type.is_generic_parameter) ) { AddError(loc, "EXPECTED_DERIVED_CLASSES");