From 91c81574256a6a296201133b23263acb954053ef Mon Sep 17 00:00:00 2001 From: Sun Serega Date: Thu, 28 Mar 2024 12:29:20 +0100 Subject: [PATCH 1/2] =?UTF-8?q?=D0=9C=D0=B5=D0=BB=D0=BA=D0=B8=D0=B9=20?= =?UTF-8?q?=D1=80=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE=D1=80=D0=B8=D0=BD?= =?UTF-8?q?=D0=B3=20`AddIndirectUsedUnitsForType`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Compiler/PCU/PCUWriter.cs | 47 +++++++++++++++++---------------------- 1 file changed, 20 insertions(+), 27 deletions(-) diff --git a/Compiler/PCU/PCUWriter.cs b/Compiler/PCU/PCUWriter.cs index 7a8153f35..ef05cfa7c 100644 --- a/Compiler/PCU/PCUWriter.cs +++ b/Compiler/PCU/PCUWriter.cs @@ -899,37 +899,30 @@ namespace PascalABCCompiler.PCU private void AddIndirectUsedUnitsForType(type_node tn, Dictionary ns_dict, bool interf) { - if (tn is common_type_node) + if (!added_indirect_types.Add(tn)) return; + if (!(tn is common_type_node ctn)) return; + + common_namespace_node comp_cnn = ctn.comprehensive_namespace; + if (tn is common_generic_instance_type_node cgitn) + { + comp_cnn = cgitn.common_original_generic.comprehensive_namespace; + foreach (type_node param_tn in cgitn.instance_params) + AddIndirectUsedUnitsForType(param_tn, ns_dict, interf); + } + + if (comp_cnn != null && !ns_dict.ContainsKey(comp_cnn) && unit.SemanticTree != comp_cnn.cont_unit) { - common_namespace_node comp_cnn = (tn as common_type_node).comprehensive_namespace; - if (tn is common_generic_instance_type_node) - comp_cnn = (tn as common_generic_instance_type_node).common_original_generic.comprehensive_namespace; - - if (comp_cnn != null && !ns_dict.ContainsKey(comp_cnn) && unit.SemanticTree != comp_cnn.cont_unit) - { - var path = Compiler.GetUnitPath(unit, compiler.UnitsTopologicallySortedList.Find(u => u.SemanticTree == comp_cnn.cont_unit)); + var path = Compiler.GetUnitPath(unit, compiler.UnitsTopologicallySortedList.Find(u => u.SemanticTree == comp_cnn.cont_unit)); - if (interf) - unit.InterfaceUsedUnits.AddElement(comp_cnn.cont_unit, path); - else - unit.ImplementationUsedUnits.AddElement(comp_cnn.cont_unit, path); + if (interf) + unit.InterfaceUsedUnits.AddElement(comp_cnn.cont_unit, path); + else + unit.ImplementationUsedUnits.AddElement(comp_cnn.cont_unit, path); - ns_dict[comp_cnn] = true; - } - if (tn.base_type is common_type_node) - AddIndirectUsedUnitsForType(tn.base_type, ns_dict, interf); - if (tn is common_generic_instance_type_node) - { - foreach (type_node param_tn in (tn as common_generic_instance_type_node).instance_params) - { - if (!added_indirect_types.Contains(param_tn)) - { - added_indirect_types.Add(param_tn); - AddIndirectUsedUnitsForType(param_tn, ns_dict, interf); - } - } - } + ns_dict[comp_cnn] = true; } + + AddIndirectUsedUnitsForType(tn.base_type, ns_dict, interf); } private void AddIndirectUsedUnitsForFunction(common_namespace_function_node cnfn, Dictionary ns_dict, bool interf) From 963ff1e545357b34c250676e8c6e012b8090d443 Mon Sep 17 00:00:00 2001 From: Sun Serega Date: Thu, 28 Mar 2024 12:32:24 +0100 Subject: [PATCH 2/2] tabs=>spaces --- Compiler/PCU/PCUWriter.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Compiler/PCU/PCUWriter.cs b/Compiler/PCU/PCUWriter.cs index ef05cfa7c..c85cdaf1f 100644 --- a/Compiler/PCU/PCUWriter.cs +++ b/Compiler/PCU/PCUWriter.cs @@ -903,12 +903,12 @@ namespace PascalABCCompiler.PCU if (!(tn is common_type_node ctn)) return; common_namespace_node comp_cnn = ctn.comprehensive_namespace; - if (tn is common_generic_instance_type_node cgitn) - { - comp_cnn = cgitn.common_original_generic.comprehensive_namespace; - foreach (type_node param_tn in cgitn.instance_params) - AddIndirectUsedUnitsForType(param_tn, ns_dict, interf); - } + if (tn is common_generic_instance_type_node cgitn) + { + comp_cnn = cgitn.common_original_generic.comprehensive_namespace; + foreach (type_node param_tn in cgitn.instance_params) + AddIndirectUsedUnitsForType(param_tn, ns_dict, interf); + } if (comp_cnn != null && !ns_dict.ContainsKey(comp_cnn) && unit.SemanticTree != comp_cnn.cont_unit) {