This commit is contained in:
parent
5c4b3f1de4
commit
5db41ff65f
|
|
@ -899,6 +899,22 @@ namespace PascalABCCompiler.PCU
|
|||
}
|
||||
}
|
||||
|
||||
private void AddIndirectUsedUnitsForFunction(common_namespace_function_node cnfn, Dictionary<common_namespace_node, bool> ns_dict, bool interf)
|
||||
{
|
||||
common_namespace_node comp_cnn = cnfn.namespace_node;
|
||||
if (comp_cnn != null && !ns_dict.ContainsKey(comp_cnn) && unit.SemanticTree != comp_cnn.cont_unit)
|
||||
{
|
||||
var path = Compiler.GetUnitPath(unit, compiler.UnitsSortedList.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);
|
||||
|
||||
ns_dict[comp_cnn] = true;
|
||||
}
|
||||
}
|
||||
|
||||
private void AddIndirectUsedUnitsInStatement(statement_node stmt, Dictionary<common_namespace_node, bool> ns_dict, bool interf)
|
||||
{
|
||||
if (stmt == null)
|
||||
|
|
@ -923,6 +939,12 @@ namespace PascalABCCompiler.PCU
|
|||
common_method_call cmc = stmt as common_method_call;
|
||||
AddIndirectUsedUnitsForType(cmc.function_node.cont_type, ns_dict, interf);
|
||||
}
|
||||
else if (stmt is common_namespace_function_call)
|
||||
{
|
||||
common_namespace_function_call cnfc = stmt as common_namespace_function_call;
|
||||
if (cnfc.function_node.ConnectedToType != null)
|
||||
AddIndirectUsedUnitsForFunction(cnfc.function_node, ns_dict, interf);
|
||||
}
|
||||
else if (stmt is if_node)
|
||||
{
|
||||
if_node node = stmt as if_node;
|
||||
|
|
|
|||
7
TestSuite/units/u_indirect_extensionmethods1.pas
Normal file
7
TestSuite/units/u_indirect_extensionmethods1.pas
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
unit u_indirect_extensionmethods1;
|
||||
uses u_indirect_extensionmethods2;
|
||||
|
||||
begin
|
||||
// Вызов extensionmethod'а из неявно подключённого u3
|
||||
''.p1;
|
||||
end.
|
||||
4
TestSuite/units/u_indirect_extensionmethods2.pas
Normal file
4
TestSuite/units/u_indirect_extensionmethods2.pas
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
unit u_indirect_extensionmethods2;
|
||||
uses u_indirect_extensionmethods3;
|
||||
|
||||
end.
|
||||
4
TestSuite/units/u_indirect_extensionmethods3.pas
Normal file
4
TestSuite/units/u_indirect_extensionmethods3.pas
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
unit u_indirect_extensionmethods3;
|
||||
procedure p1(self: string); extensionmethod := exit;
|
||||
|
||||
end.
|
||||
4
TestSuite/usesunits/use_indirect_extensionmethods1.pas
Normal file
4
TestSuite/usesunits/use_indirect_extensionmethods1.pas
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
uses u_indirect_extensionmethods1;
|
||||
begin
|
||||
|
||||
end.
|
||||
Loading…
Reference in a new issue