diff --git a/SyntaxTree/tree/SyntaxTreeStreamReader.cs b/SyntaxTree/tree/SyntaxTreeStreamReader.cs index 2e6a9c0c3..20dc0eb10 100644 --- a/SyntaxTree/tree/SyntaxTreeStreamReader.cs +++ b/SyntaxTree/tree/SyntaxTreeStreamReader.cs @@ -4046,7 +4046,7 @@ namespace PascalABCCompiler.SyntaxTree public void read_is_pattern_expr(is_pattern_expr _is_pattern_expr) { - read_expression(_is_pattern_expr); + read_addressed_value(_is_pattern_expr); _is_pattern_expr.left = _read_node() as expression; _is_pattern_expr.right = _read_node() as pattern_node; } diff --git a/SyntaxTree/tree/SyntaxTreeStreamWriter.cs b/SyntaxTree/tree/SyntaxTreeStreamWriter.cs index 5e99c1e22..4d9b27874 100644 --- a/SyntaxTree/tree/SyntaxTreeStreamWriter.cs +++ b/SyntaxTree/tree/SyntaxTreeStreamWriter.cs @@ -6250,7 +6250,7 @@ namespace PascalABCCompiler.SyntaxTree public void write_is_pattern_expr(is_pattern_expr _is_pattern_expr) { - write_expression(_is_pattern_expr); + write_addressed_value(_is_pattern_expr); if (_is_pattern_expr.left == null) { bw.Write((byte)0); diff --git a/SyntaxTree/tree/Tree.cs b/SyntaxTree/tree/Tree.cs index 9cc12e4ca..aa615ae5f 100644 --- a/SyntaxTree/tree/Tree.cs +++ b/SyntaxTree/tree/Tree.cs @@ -48708,7 +48708,7 @@ namespace PascalABCCompiler.SyntaxTree /// /// [Serializable] - public partial class is_pattern_expr : expression + public partial class is_pattern_expr : addressed_value { /// diff --git a/SyntaxTree/tree/tree.xml b/SyntaxTree/tree/tree.xml index 1d5660798..daa9df67b 100644 --- a/SyntaxTree/tree/tree.xml +++ b/SyntaxTree/tree/tree.xml @@ -2893,7 +2893,7 @@ - + diff --git a/TestSuite/errors/err0501.pas b/TestSuite/errors/err0501.pas new file mode 100644 index 000000000..61e81fcd5 --- /dev/null +++ b/TestSuite/errors/err0501.pas @@ -0,0 +1,4 @@ +//!Сопоставление с образцом не поддерживается в данном контексте +begin + (2 is object(var o1)).print; +end. \ No newline at end of file diff --git a/TestSuite/patterns-extended-is-short.pas b/TestSuite/patterns-extended-is-short.pas index 77a37634e..c379b55ae 100644 --- a/TestSuite/patterns-extended-is-short.pas +++ b/TestSuite/patterns-extended-is-short.pas @@ -5,4 +5,20 @@ begin var l: List := nil; if (l <> nil) and (l[0] is t2(var a)) then ; + l := new List(); + var o := new t2; + l.Add(o); + if (l <> nil) and (l[0] is t2(var a)) then + begin + assert(a = o); + o := nil; + end; + assert(o = nil); + l := new List(); + l.Add(new t1); + if (l <> nil) and (l[0] is t2(var a)) then + begin + o := new t2; + end; + assert(o = nil); end. \ No newline at end of file