pascalabcnet/documentation/Compiler/Uses lists/Uses lists.md
AlexanderZemlyak 271d5792ce
Documentation (#3211)
* Add Compiler documentation

* Add Intellisense documentation

* Move documentation folder to root directory
2024-10-08 10:00:14 +03:00

2.4 KiB
Raw Permalink Blame History

Owner: Alexander Zemlyak

  • Получение списков зависимостей из синтаксического дерева юнита
  1. interfaceUsesList может содержать юниты, пространства имен .NET и явные пространства имен (узлы SyntaxTree.unit_or_namepace)
  2. references содержит библиотеки dll (узлы TreeRealization.unit_node)
  3. namespaces содержит явные пользовательские пространства имен, подключенные с помощью директивы {$includenamespace} (узлы SyntaxTree.syntax_namespace_node)
CreateDependencyListsForCurrentUnit(currentUnit, currentDirectory, out var interfaceUsesList, out var references, out var namespaces);
  • Списки зависимостей, содержащиеся в CompilationUnit
  1. possibleNamespaces может содержать пространства имен .NET, стандартные паскалевские юниты из папки Lib, а также явные пространства имен, если они есть в секции uses
  2. InterfaceUsedUnits содержит все, что есть в possibleNamespaces + пользовательские юниты и dll, т.е., грубо говоря, все виды программных единиц, являющиеся зависимостями CompilationUnit
  3. InterfaceUsedDirectUnits содержит только пользовательские юниты
  4. ImplementationUsedUnits и ImplementationUsedDirectUnits устроены аналогично предыдущим двум
public class CompilationUnit
{
...
internal List<SyntaxTree.unit_or_namespace> possibleNamespaces = new List<PascalABCCompiler.SyntaxTree.unit_or_namespace>();

public Dictionary<unit_node, CompilationUnit> InterfaceUsedDirectUnits { get; } = new Dictionary<unit_node, CompilationUnit>();

public unit_node_list InterfaceUsedUnits { get; } = new unit_node_list();

public Dictionary<unit_node, CompilationUnit> ImplementationUsedDirectUnits { get; } = new Dictionary<unit_node, CompilationUnit>();

public unit_node_list ImplementationUsedUnits { get; } = new unit_node_list();
...
}