From a89fa4fe7bbf0479c2ff04d85dd5a6c4cc8819dd Mon Sep 17 00:00:00 2001 From: Sun Serega Date: Sat, 26 Mar 2022 12:44:31 +0200 Subject: [PATCH] explicitly set is_class --- TestSuite/where-array.pas | 19 +++++++++++++++++++ .../TreeConversion/compilation_context.cs | 2 ++ .../convertion_data_and_alghoritms.cs | 5 ----- .../TreeConversion/type_constructor.cs | 5 ++++- 4 files changed, 25 insertions(+), 6 deletions(-) create mode 100644 TestSuite/where-array.pas diff --git a/TestSuite/where-array.pas b/TestSuite/where-array.pas new file mode 100644 index 000000000..e4201a5af --- /dev/null +++ b/TestSuite/where-array.pas @@ -0,0 +1,19 @@ +type + r1 = record end; + + t1 = class + where T: System.Array; + end; + +procedure p1; where T: System.Array; +begin end; + +begin + + p1&; + p1&; + + new t1; + new t1; + +end. \ No newline at end of file diff --git a/TreeConverter/TreeConversion/compilation_context.cs b/TreeConverter/TreeConversion/compilation_context.cs index 8f5e6dc54..f21e15b3d 100644 --- a/TreeConverter/TreeConversion/compilation_context.cs +++ b/TreeConverter/TreeConversion/compilation_context.cs @@ -1411,6 +1411,7 @@ namespace PascalABCCompiler.TreeConverter scope,def_loc); (scope as SymbolTable.ClassScope).class_type = tctn; // SSM 02.04.19 - каждый Scope пользовательского класса хранит свой type_node + tctn.is_class = true; tctn.IsPartial = is_partial; if (partial_class != null) { @@ -1438,6 +1439,7 @@ namespace PascalABCCompiler.TreeConverter scope, def_loc); _cmn.scope.AddSymbol(name, new SymbolInfo(tctn)); tctn.IsInterface = false; + tctn.is_class = true; _cmn.types.AddElement(tctn); _ctn = tctn; SystemLibrary.SystemLibrary.init_reference_type(tctn); diff --git a/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs b/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs index 4953af3fc..318a4ec13 100644 --- a/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs +++ b/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs @@ -1995,11 +1995,6 @@ namespace PascalABCCompiler.TreeConverter return find_eq_return_value_method_in_list(fn, funcs); } - public void init_reference_type(type_node ctn) - { - SystemLibrary.SystemLibrary.init_reference_type(ctn); - } - /// /// Получение compiled_type_node из либо compiled_type_node либо compiled_generic_instance_type_node. Используется ниже локально /// diff --git a/TreeConverter/TreeConversion/type_constructor.cs b/TreeConverter/TreeConversion/type_constructor.cs index 7bd9a198c..0bcbe510a 100644 --- a/TreeConverter/TreeConversion/type_constructor.cs +++ b/TreeConverter/TreeConversion/type_constructor.cs @@ -89,6 +89,7 @@ namespace PascalABCCompiler.TreeConverter compiler_string_consts.get_array_type_name(element_type.name,rank), SemanticTree.type_access_level.tal_public, cmn, convertion_data_and_alghoritms.symbol_table.CreateClassScope(top_scope,SystemLibrary.SystemLibrary.array_base_type.Scope), loc); comtn.internal_type_special_kind = SemanticTree.type_special_kind.array_kind; + comtn.is_class = true; comtn.add_internal_interface(aii); if (!types_unsized_arrays.TryGetValue(element_type,out ret)) { @@ -250,7 +251,8 @@ namespace PascalABCCompiler.TreeConverter SemanticTree.type_access_level.tal_public, cmn, convertion_data_and_alghoritms.symbol_table.CreateClassScope(top_scope, SystemLibrary.SystemLibrary.delegate_base_type.Scope, "delegate " + name), loc); - ctn.IsDelegate = true; + ctn.IsDelegate = true; + ctn.is_class = true; return ctn; } @@ -412,6 +414,7 @@ namespace PascalABCCompiler.TreeConverter common_type_node ctn = new common_type_node(null, name, SemanticTree.type_access_level.tal_public, _cmn, convertion_data_and_alghoritms.symbol_table.CreateClassScope(top_scope, null, "array_type " + name), loc); + ctn.is_class = true; ctn.SetBaseType(SystemLibrary.SystemLibrary.object_type); //DarkStar Add //loc не нужно мне это! и некому не нужно!