This commit is contained in:
Ivan Bondarev 2022-02-06 14:30:31 +01:00
parent 1a882ee112
commit 4a70f38e39
6 changed files with 24 additions and 4 deletions

View file

@ -4046,7 +4046,7 @@ namespace PascalABCCompiler.SyntaxTree
public void read_is_pattern_expr(is_pattern_expr _is_pattern_expr) 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.left = _read_node() as expression;
_is_pattern_expr.right = _read_node() as pattern_node; _is_pattern_expr.right = _read_node() as pattern_node;
} }

View file

@ -6250,7 +6250,7 @@ namespace PascalABCCompiler.SyntaxTree
public void write_is_pattern_expr(is_pattern_expr _is_pattern_expr) 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) if (_is_pattern_expr.left == null)
{ {
bw.Write((byte)0); bw.Write((byte)0);

View file

@ -48708,7 +48708,7 @@ namespace PascalABCCompiler.SyntaxTree
/// ///
///</summary> ///</summary>
[Serializable] [Serializable]
public partial class is_pattern_expr : expression public partial class is_pattern_expr : addressed_value
{ {
///<summary> ///<summary>

View file

@ -2893,7 +2893,7 @@
</TagIndices> </TagIndices>
</Tags> </Tags>
</SyntaxNode> </SyntaxNode>
<SyntaxNode Name="is_pattern_expr" BaseName="expression"> <SyntaxNode Name="is_pattern_expr" BaseName="addressed_value">
<Fields> <Fields>
<SyntaxField Name="left" SyntaxType="expression" /> <SyntaxField Name="left" SyntaxType="expression" />
<SyntaxField Name="right" SyntaxType="pattern_node" /> <SyntaxField Name="right" SyntaxType="pattern_node" />

View file

@ -0,0 +1,4 @@
//!Сопоставление с образцом не поддерживается в данном контексте
begin
(2 is object(var o1)).print;
end.

View file

@ -5,4 +5,20 @@
begin begin
var l: List<t1> := nil; var l: List<t1> := nil;
if (l <> nil) and (l[0] is t2(var a)) then ; if (l <> nil) and (l[0] is t2(var a)) then ;
l := new List<t1>();
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<t1>();
l.Add(new t1);
if (l <> nil) and (l[0] is t2(var a)) then
begin
o := new t2;
end;
assert(o = nil);
end. end.