From 72fe2f7b5e67ce9cf9efcc5f5d388aaefeb00f07 Mon Sep 17 00:00:00 2001 From: Ivan Bondarev Date: Sun, 19 Feb 2023 12:23:03 +0100 Subject: [PATCH] #2803 --- TestSuite/attributes4.pas | 19 +++++++++++++++++++ .../TreeConversion/syntax_tree_visitor.cs | 3 ++- 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 TestSuite/attributes4.pas diff --git a/TestSuite/attributes4.pas b/TestSuite/attributes4.pas new file mode 100644 index 000000000..d4fe3c84b --- /dev/null +++ b/TestSuite/attributes4.pas @@ -0,0 +1,19 @@ +uses System; + + type + attrAttribute = class(Attribute) + constructor (params p1: array of System.Activator); + begin end; + end; + + c1 = class + [attr] + f1: integer; + end; + +begin + var v1:= new c1; + // ---> Операция '+=' не применима к типам array of Activator и integer <--- + v1.f1 += 1; + assert(v1.f1 = 1); +end. \ No newline at end of file diff --git a/TreeConverter/TreeConversion/syntax_tree_visitor.cs b/TreeConverter/TreeConversion/syntax_tree_visitor.cs index bd7647141..8f15ebdae 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -12499,8 +12499,9 @@ namespace PascalABCCompiler.TreeConverter check_for_strong_constant(cn, get_location(cnstr_args.expressions[i])); args.AddElement(cn); } - + context.save_var_definitions(); base_function_call bfc = create_constructor_call(tn, args, get_location(attr)); + context.restore_var_definitions(); if (ctn is common_type_node && tn == SystemLibrary.SystemLibrary.struct_layout_attribute_type) { if ((System.Runtime.InteropServices.LayoutKind)Convert.ToInt32((args[0] as constant_node).get_object_value()) == System.Runtime.InteropServices.LayoutKind.Explicit)