diff --git a/TestSuite/delegates12.pas b/TestSuite/delegates12.pas new file mode 100644 index 000000000..04c6c770d --- /dev/null +++ b/TestSuite/delegates12.pas @@ -0,0 +1,17 @@ +procedure p := exit; + +var i: integer; + +procedure p1; +begin + if p = nil then + i := 1 + else if nil = p then + i := -1 + else + i := 2; +end; +begin + p1; + assert(i = 2); +end. \ No newline at end of file diff --git a/TreeConverter/TreeConversion/syntax_tree_visitor.cs b/TreeConverter/TreeConversion/syntax_tree_visitor.cs index 534109e2a..c2d7046fa 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -1246,7 +1246,10 @@ namespace PascalABCCompiler.TreeConverter base_function_call bfc = ((left as typed_expression).type as delegated_methods).proper_methods[0]; left = convertion_data_and_alghoritms.explicit_convert_type(left, CreateDelegate(bfc.simple_function_node)); sil = left.type.find_in_type(name); - bfc = ((right as typed_expression).type as delegated_methods).proper_methods[0]; + if (!(right is typed_expression) && right.type is delegated_methods) + bfc = (right.type as delegated_methods).proper_methods[0]; + else + bfc = ((right as typed_expression).type as delegated_methods).proper_methods[0]; right = convertion_data_and_alghoritms.explicit_convert_type(right, CreateDelegate(bfc.simple_function_node)); sil2 = right.type.find_in_type(name); if (saved_sil != null && sil != null)