* Add Compiler documentation * Add Intellisense documentation * Move documentation folder to root directory
39 lines
2.4 KiB
Markdown
39 lines
2.4 KiB
Markdown
|
||
Owner: Alexander Zemlyak
|
||
|
||
- **Получение списков зависимостей из синтаксического дерева юнита**
|
||
1. *interfaceUsesList* может содержать юниты, пространства имен .NET и явные пространства имен (узлы SyntaxTree.unit_or_namepace)
|
||
2. *references* содержит библиотеки dll (узлы TreeRealization.unit_node)
|
||
3. *namespaces* содержит явные пользовательские пространства имен, подключенные с помощью директивы {$includenamespace} (узлы SyntaxTree.syntax_namespace_node)
|
||
|
||
```csharp
|
||
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* устроены аналогично предыдущим двум
|
||
|
||
```csharp
|
||
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();
|
||
...
|
||
}
|
||
```
|
||
|
||
<aside>
|
||
💡 Узел using_list является устаревшим, так как он относился к ключевому слову using.
|
||
|
||
</aside> |