diff --git a/TestSuite/foreach9.pas b/TestSuite/foreach9.pas new file mode 100644 index 000000000..a8fab1dc1 --- /dev/null +++ b/TestSuite/foreach9.pas @@ -0,0 +1,24 @@ +var i: integer; + +type + t1 = record + private function InitA: integer; + begin + Inc(i); + end; + + public a := InitA; + public b: integer; + + public constructor(b: integer) := self.b := b; + + end; + +begin + var l := new List; + l += new t1(2); + l += new t1(3); + foreach var o in l do + ; + assert(i = 2); +end. \ No newline at end of file diff --git a/TreeConverter/TreeConversion/SyntaxTreeVisitorNodes/Foreach.cs b/TreeConverter/TreeConversion/SyntaxTreeVisitorNodes/Foreach.cs index 4c2edc2c3..0d8b1af28 100644 --- a/TreeConverter/TreeConversion/SyntaxTreeVisitorNodes/Foreach.cs +++ b/TreeConverter/TreeConversion/SyntaxTreeVisitorNodes/Foreach.cs @@ -161,8 +161,10 @@ namespace PascalABCCompiler.TreeConverter check_for_type_allowed(tn, get_location(_foreach_stmt.type_name)); check_using_static_class(tn, get_location(_foreach_stmt.type_name)); } - - context.close_var_definition_list(tn, null); + if (tn.is_value_type && !tn.is_standard_type) + context.close_var_definition_list(tn, new default_operator_node(tn, foreachVariable.location)); + else + context.close_var_definition_list(tn, null); } if (/*!(foreachVariable.type is compiled_generic_instance_type_node) &&*/ !sys_coll_ienum) // SSM 16.09.18 - закомментировал это ограничение для фиксации бага #1184