From ca3eb6f3c1bd057e2e0da1b00f04a3310b7e2a75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=91=D0=BE=D0=BD=D0=B4=D0=B0=D1=80=D0=B5=D0=B2=20=D0=98?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD?= Date: Wed, 10 Apr 2019 21:00:08 +0200 Subject: [PATCH] fix pascalabcnet/pascalabcnetide#52 --- CodeCompletion/DomSyntaxTreeVisitor.cs | 16 +++++++++++++++- TestSuite/intellisense_tests/ispattern4.pas | 7 +++++++ 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 TestSuite/intellisense_tests/ispattern4.pas diff --git a/CodeCompletion/DomSyntaxTreeVisitor.cs b/CodeCompletion/DomSyntaxTreeVisitor.cs index a4668700b..2271b1452 100644 --- a/CodeCompletion/DomSyntaxTreeVisitor.cs +++ b/CodeCompletion/DomSyntaxTreeVisitor.cs @@ -196,6 +196,13 @@ namespace CodeCompletion public override void visit(assign _assign) { + visit_is_patterns(_assign.from); + if (pending_is_pattern_vars.Count > 0) + { + foreach (var_def_statement vds in pending_is_pattern_vars) + vds.visit(this); + pending_is_pattern_vars.Clear(); + } if (_assign.from is function_lambda_definition) { _assign.to.visit(this); @@ -847,7 +854,14 @@ namespace CodeCompletion public override void visit(PascalABCCompiler.SyntaxTree.if_node _if_node) { visit_is_patterns(_if_node.condition); - statement then_stmt = merge_with_is_variables(_if_node.then_body); + statement then_stmt = _if_node.then_body; + if (pending_is_pattern_vars.Count > 0 && then_stmt != null) + { + statement_list slist = new statement_list(); + slist.source_context = _if_node.source_context; + slist.Add(then_stmt); + then_stmt = merge_with_is_variables(slist); + } if (then_stmt != null) then_stmt.visit(this); if (_if_node.else_body != null) diff --git a/TestSuite/intellisense_tests/ispattern4.pas b/TestSuite/intellisense_tests/ispattern4.pas new file mode 100644 index 000000000..ab31c9048 --- /dev/null +++ b/TestSuite/intellisense_tests/ispattern4.pas @@ -0,0 +1,7 @@ +function f1(o: object) := +(o is byte(var b)) and (b{@var b: byte;@}=5); + +begin + var o: object := byte(5); + if (o is byte(var b)) and (b{@var b: byte;@}=5) then +end. \ No newline at end of file