From 271d5792cedbee8f8c623009474ca470153dc64f Mon Sep 17 00:00:00 2001 From: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com> Date: Tue, 8 Oct 2024 10:00:14 +0300 Subject: [PATCH] Documentation (#3211) * Add Compiler documentation * Add Intellisense documentation * Move documentation folder to root directory --- .../Compilation algorithm.md | 163 ++ ...»ΠΈΡ‡Π΅ΡΠΊΠ°Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ.png | Bin 0 -> 165371 bytes documentation/Compiler/Compiler_api.md | 2412 +++++++++++++++++ documentation/Compiler/PABCRtl/PABCRtl dll.md | 22 + documentation/Compiler/PABCRtl/Untitled.png | Bin 0 -> 25321 bytes .../Compiler/Uses lists/Uses lists.md | 39 + .../Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Intellisense.md | 41 + 7 files changed, 2677 insertions(+) create mode 100644 documentation/Compiler/Compilation algorithm/Compilation algorithm.md create mode 100644 documentation/Compiler/Compilation algorithm/допустимая цикличСская Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ.png create mode 100644 documentation/Compiler/Compiler_api.md create mode 100644 documentation/Compiler/PABCRtl/PABCRtl dll.md create mode 100644 documentation/Compiler/PABCRtl/Untitled.png create mode 100644 documentation/Compiler/Uses lists/Uses lists.md create mode 100644 documentation/Intellisense/Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Intellisense.md diff --git a/documentation/Compiler/Compilation algorithm/Compilation algorithm.md b/documentation/Compiler/Compilation algorithm/Compilation algorithm.md new file mode 100644 index 000000000..38960f475 --- /dev/null +++ b/documentation/Compiler/Compilation algorithm/Compilation algorithm.md @@ -0,0 +1,163 @@ + +Owner: Alexander Zemlyak +Tags: Infrastructure + +### Алгоритм Π½Π° псСвдокодС + +- Полная вСрсия + + ``` + CompileUnit(ИмяЀайла) + 1.CompileUnit(new Π‘ΠΏΠΈΡΠΎΠΊΠœΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ИмяЀайла) + 2.Π”ΠΎΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈΠ· Π‘ΠΏΠΈΡΠΎΠΊΠžΡ‚Π»ΠΎΠΆΠ΅Π½ΠΎΠΉΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΠΈ; + + CompileUnit(Π‘ΠΏΠΈΡΠΎΠΊΠœΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ИмяЀайла) + 1.Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉΠœΠΎΠ΄ΡƒΠ»ΡŒ = Π’Π°Π±Π»ΠΈΡ†Π°ΠœΠΎΠ΄ΡƒΠ»Π΅ΠΉ[ИмяЀайла]; + Если (Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉΠœΠΎΠ΄ΡƒΠ»ΡŒ != 0) Ρ‚ΠΎ + Если (Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉΠœΠΎΠ΄ΡƒΠ»ΡŒ.БостояниС != BeginCompilation) + Π‘ΠΏΠΈΡΠΎΠΊΠœΠΎΠ΄ΡƒΠ»Π΅ΠΉ.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉΠœΠΎΠ΄ΡƒΠ»ΡŒ); + Π’Ρ‹Ρ…ΠΎΠ΄; + ΠΈΠ½Π°Ρ‡Π΅ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ ΠΏΡƒΠ½ΠΊΡ‚Ρƒ 5 + + 2.Если Π­Ρ‚ΠΎΠ€Π°ΠΉΠ»DLL(ИмяЀайла) Ρ‚ΠΎ + Если ((Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉΠœΠΎΠ΄ΡƒΠ»ΡŒ = Π‘Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒDLL(ИмяЀайла)) != 0) Ρ‚ΠΎ + Π‘ΠΏΠΈΡΠΎΠΊΠœΠΎΠ΄ΡƒΠ»Π΅ΠΉ.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉΠœΠΎΠ΄ΡƒΠ»ΡŒ); + Π’Π°Π±Π»ΠΈΡ†Π°ΠœΠΎΠ΄ΡƒΠ»Π΅ΠΉ.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉΠœΠΎΠ΄ΡƒΠ»ΡŒ); + Π’Ρ‹Ρ…ΠΎΠ΄; + ΠΈΠ½Π°Ρ‡Π΅ + Ошибка("НС ΠΌΠΎΠ³Ρƒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ сборку"); + Π’Ρ‹Ρ…ΠΎΠ΄; + + 3.Если Π­Ρ‚ΠΎΠ€Π°ΠΉΠ»PCU(ИмяЀайла) Ρ‚ΠΎ + Если ((Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉΠœΠΎΠ΄ΡƒΠ»ΡŒ = Π‘Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒPCU(ИмяЀайла)) != 0) Ρ‚ΠΎ + Π‘ΠΏΠΈΡΠΎΠΊΠœΠΎΠ΄ΡƒΠ»Π΅ΠΉ.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉΠœΠΎΠ΄ΡƒΠ»ΡŒ); + Π’Π°Π±Π»ΠΈΡ†Π°ΠœΠΎΠ΄ΡƒΠ»Π΅ΠΉ.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉΠœΠΎΠ΄ΡƒΠ»ΡŒ); + Π’Ρ‹Ρ…ΠΎΠ΄; + ΠΈΠ½Π°Ρ‡Π΅ + ΠΈΠ½Π°Ρ‡Π΅ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ ΠΏΡƒΠ½ΠΊΡ‚Ρƒ 4; + + 4.Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉΠœΠΎΠ΄ΡƒΠ»ΡŒ = Π½ΠΎΠ²Ρ‹ΠΉΠœΠΎΠ΄ΡƒΠ»ΡŒ(); + Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉΠœΠΎΠ΄ΡƒΠ»ΡŒ.БинтаксичСскоСДСрСво = ΠŸΠ°Ρ€Π°ΡΠ΅Ρ€Ρ‹.ΠŸΠ°Ρ€ΡΠΈΡ‚ΡŒ(ИмяЀайла,Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉΠœΠΎΠ΄ΡƒΠ»ΡŒ.БписокОшибок); + Если (Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉΠœΠΎΠ΄ΡƒΠ»ΡŒ.БинтаксичСскоСДСрСво == 0) Ρ‚ΠΎ + Если (Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉΠœΠΎΠ΄ΡƒΠ»ΡŒ.БписокОшибок.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ == 0) Ρ‚ΠΎ + Ошибка("ΠœΠΎΠ΄ΡƒΠ»ΡŒ Π½Π΅ Π½Π΅Π°ΠΉΠ΄Π΅Π½"); + ΠΈΠ½Π°Ρ‡Π΅ + Ошибка(Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉΠœΠΎΠ΄ΡƒΠ»ΡŒ.БписокОшибок[0]); + Π’Π°Π±Π»ΠΈΡ†Π°ΠœΠΎΠ΄ΡƒΠ»Π΅ΠΉ[ИмяЀайла] = Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉΠœΠΎΠ΄ΡƒΠ»ΡŒ; + Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉΠœΠΎΠ΄ΡƒΠ»ΡŒ.БостояниС = BeginCompilation; + + 5.Π‘ΠΈΠ½Ρ‚Π°ΠΊΡΠΈΡ‡Π΅ΡΠΊΠΈΠΉΠ‘ΠΏΠΈΡΠΎΠΊΠœΠΎΠ΄ΡƒΠ»Π΅ΠΉ = Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉΠœΠΎΠ΄ΡƒΠ»ΡŒ.БинтаксичСскоСДСрСво.Interface.usesList; + Для(i = Π‘ΠΈΠ½Ρ‚Π°ΠΊΡΠΈΡ‡Π΅ΡΠΊΠΈΠΉΠ‘ΠΏΠΈΡΠΎΠΊΠœΠΎΠ΄ΡƒΠ»Π΅ΠΉ.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ - 1 - Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉΠœΠΎΠ΄ΡƒΠ»ΡŒ.ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹Π΅Π’Interface.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ; i >= 0; i--) + Π’Π΅ΠΊΡƒΡˆΠΈΠΉΠœΠΎΠ΄ΡƒΠ»ΡŒ.Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉUsesΠœΠΎΠ΄ΡƒΠ»ΡŒ = Π‘ΠΈΠ½Ρ‚Π°ΠΊΡΠΈΡ‡Π΅ΡΠΊΠΈΠΉΠ‘ΠΏΠΈΡΠΎΠΊΠœΠΎΠ΄ΡƒΠ»Π΅ΠΉ[i].ИмяЀайла; + ИмяUsesΠ€Π°ΠΉΠ»Π° = Π‘ΠΈΠ½Ρ‚Π°ΠΊΡΠΈΡ‡Π΅ΡΠΊΠΈΠΉΠ‘ΠΏΠΈΡΠΎΠΊΠœΠΎΠ΄ΡƒΠ»Π΅ΠΉ[i].ИмяЀайла; + Если (Π’Π°Π±Π»ΠΈΡ†Π°ΠœΠΎΠ΄ΡƒΠ»Π΅ΠΉ[ИмяUsesΠ€Π°ΠΉΠ»Π°] != 0) + Если (Π’Π°Π±Π»ΠΈΡ†Π°ΠœΠΎΠ΄ΡƒΠ»Π΅ΠΉ[ИмяUsesΠ€Π°ΠΉΠ»Π°].БостояниС == BeginCompilation) + Если (Π’Π°Π±Π»ΠΈΡ†Π°ΠœΠΎΠ΄ΡƒΠ»Π΅ΠΉ[Π’Π°Π±Π»ΠΈΡ†Π°ΠœΠΎΠ΄ΡƒΠ»Π΅ΠΉ[ИмяUsesΠ€Π°ΠΉΠ»Π°].Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉUsesΠœΠΎΠ΄ΡƒΠ»ΡŒ].БостояниС=BeginCompilation) + Ошибка("ЦикличСская связь ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ"); + CompileUnit(Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉΠœΠΎΠ΄ΡƒΠ»ΡŒ.ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹Π΅Π’Interface, ИмяUsesΠ€Π°ΠΉΠ»Π°); + Если (Π’Π΅ΠΊΡƒΡˆΠΈΠΉΠœΠΎΠ΄ΡƒΠ»ΡŒ.БостояниС == Compiled) Ρ‚ΠΎ + Π‘ΠΏΠΈΡΠΎΠΊΠœΠΎΠ΄ΡƒΠ»Π΅ΠΉ.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π’Π΅ΠΊΡƒΡˆΠΈΠΉΠœΠΎΠ΄ΡƒΠ»ΡŒ); + Π’Ρ‹Ρ…ΠΎΠ΄; + + 6.Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉΠœΠΎΠ΄ΡƒΠ»ΡŒ.БСмантичСскоСДСрСво = ΠšΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΎΡ€Π”Π΅Ρ€Π΅Π²Π°.ΠšΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒInterfaceΠ§Π°ΡΡ‚ΡŒ( + Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉΠœΠΎΠ΄ΡƒΠ»ΡŒ.БинтаксичСскоСДСрСво, + Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉΠœΠΎΠ΄ΡƒΠ»ΡŒ.ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹Π΅Π’Interface, + Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉΠœΠΎΠ΄ΡƒΠ»ΡŒ.БписокОшибок); + Π‘ΠΏΠΈΡΠΎΠΊΠœΠΎΠ΄ΡƒΠ»Π΅ΠΉ.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉΠœΠΎΠ΄ΡƒΠ»ΡŒ); + Π‘ΠΈΠ½Ρ‚Π°ΠΊΡΠΈΡ‡Π΅ΡΠΊΠΈΠΉΠ‘ΠΏΠΈΡΠΎΠΊΠœΠΎΠ΄ΡƒΠ»Π΅ΠΉ = Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉΠœΠΎΠ΄ΡƒΠ»ΡŒ.БинтаксичСскоСДСрСво.Implementation.usesList; + Для(i = Π‘ΠΈΠ½Ρ‚Π°ΠΊΡΠΈΡ‡Π΅ΡΠΊΠΈΠΉΠ‘ΠΏΠΈΡΠΎΠΊΠœΠΎΠ΄ΡƒΠ»Π΅ΠΉ.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ - 1; i >= 0; i--) + Если (Π’Π°Π±Π»ΠΈΡ†Π°ΠœΠΎΠ΄ΡƒΠ»Π΅ΠΉ[Π‘ΠΈΠ½Ρ‚Π°ΠΊΡΠΈΡ‡Π΅ΡΠΊΠΈΠΉΠ‘ΠΏΠΈΡΠΎΠΊΠœΠΎΠ΄ΡƒΠ»Π΅ΠΉ[i].ИмяЀайла].БостояниС == BeginCompilation) + Π‘ΠΏΠΈΡΠΎΠΊΠžΡ‚Π»ΠΎΠΆΠ΅Π½ΠΎΠΉΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΠΈ.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π’Π°Π±Π»ΠΈΡ†Π°ΠœΠΎΠ΄ΡƒΠ»Π΅ΠΉ[Π‘ΠΈΠ½Ρ‚Π°ΠΊΡΠΈΡ‡Π΅ΡΠΊΠΈΠΉΠ‘ΠΏΠΈΡΠΎΠΊΠœΠΎΠ΄ΡƒΠ»Π΅ΠΉ[i].ИмяЀайла]); + ΠΈΠ½Π°Ρ‡Π΅ + CompileUnit(Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉΠœΠΎΠ΄ΡƒΠ»ΡŒ.ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹Π΅Π’Implementation, Π‘ΠΈΠ½Ρ‚Π°ΠΊΡΠΈΡ‡Π΅ΡΠΊΠΈΠΉΠ‘ΠΏΠΈΡΠΎΠΊΠœΠΎΠ΄ΡƒΠ»Π΅ΠΉ[i].ИмяЀайла); + Если(ДобавлялиΠ₯ΠΎΡ‚ΡΠ±Ρ‹ΠžΠ΄ΠΈΠ½Π’Π‘ΠΏΠΈΡΠΎΠΊΠžΡ‚Π»ΠΎΠΆΠ΅Π½ΠΎΠΉΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΠΈ) + Π‘ΠΏΠΈΡΠΎΠΊΠžΡ‚Π»ΠΎΠΆΠ΅Π½ΠΎΠΉΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΠΈ.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉΠœΠΎΠ΄ΡƒΠ»ΡŒ); + Π²Ρ‹Ρ…ΠΎΠ΄; + ΠΈΠ½Π°Ρ‡Π΅ + ΠšΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΎΡ€Π”Π΅Ρ€Π΅Π²Π°.ΠšΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒImplementationΠ§Π°ΡΡ‚ΡŒ( + Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉΠœΠΎΠ΄ΡƒΠ»ΡŒ.БинтаксичСскоСДСрСво, + Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉΠœΠΎΠ΄ΡƒΠ»ΡŒ.БСмантичСскоСДСрСво, + Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉΠœΠΎΠ΄ΡƒΠ»ΡŒ.ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹Π΅Π’Implementation + Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉΠœΠΎΠ΄ΡƒΠ»ΡŒ.БписокОшибок); + Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉΠœΠΎΠ΄ΡƒΠ»ΡŒ.БостояниС = Compiled; + Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒPCU(Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉΠœΠΎΠ΄ΡƒΠ»ΡŒ); + ``` + +- ΠšΡ€Π°Ρ‚ΠΊΠ°Ρ вСрсия (мСньшС тСхничСских подробностСй) + + ``` + CompileUnit(ИмяЀайла) + 1.CompileUnit(new Π‘ΠΏΠΈΡΠΎΠΊΠœΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ИмяЀайла) + 2.Π”ΠΎΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈΠ· Π‘ΠΏΠΈΡΠΎΠΊΠžΡ‚Π»ΠΎΠΆΠ΅Π½ΠΎΠΉΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΠΈ; + + CompileUnit(Π‘ΠΏΠΈΡΠΎΠΊΠœΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ИмяЀайла); + 1.Если Ρƒ этого модуля ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ хотябы интСрфСйс Ρ‚ΠΎ + Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² Π‘ΠΏΠΈΡΠΎΠΊΠœΠΎΠ΄ΡƒΠ»Π΅ΠΉ + Π²Ρ‹Ρ…ΠΎΠ΄ + 2.Если это DLL Ρ‚ΠΎ + ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ + Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² Π‘ΠΏΠΈΡΠΎΠΊΠœΠΎΠ΄ΡƒΠ»Π΅ΠΉ + Π²Ρ‹Ρ…ΠΎΠ΄ + 3.Если это PCU Ρ‚ΠΎ + ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ + Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² Π‘ΠΏΠΈΡΠΎΠΊΠœΠΎΠ΄ΡƒΠ»Π΅ΠΉ + Π²Ρ‹Ρ…ΠΎΠ΄ + 4.ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉΠœΠΎΠ΄ΡƒΠ»ΡŒ + Π Π°ΡΠΏΠ°Ρ€ΡΠΈΡ‚ΡŒΠ’Π΅ΠΊΡΡ‚(ИмяЀайла) + БостояниС ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎΠœΠΎΠ΄ΡƒΠ»Ρ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π½Π° BeginCompilation + 5.Для всСх ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΈΠ· Interface части ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎΠœΠΎΠ΄ΡƒΠ»Ρ справа Π½Π°Π»Π΅Π²ΠΎ + Если ΠΌΡ‹ ΡƒΠΆΠ΅ Π½Π°Ρ‡Π°ΠΈΠ½Π°Π»ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ этот ΠΌΠΎΠ΄ΡƒΠ»ΡŒ + Если состояниС модуля BeginCompilation + Если состояниС послСднСго ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΈΠΌ модуля BeginCompilation + ошибка("ЦикличСская связь ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ") + Π²Ρ‹Ρ…ΠΎΠ΄ + CompileUnit(Бписок ΠΈΠ· Interface части ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎΠœΠΎΠ΄ΡƒΠ»Ρ,ΠΌΠΎΠ΄ΡƒΠ»ΡŒ.имя) + Если ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉΠœΠΎΠ΄ΡƒΠ»ΡŒ.БостояниС Compiled Ρ‚ΠΎ + Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² Π‘ΠΏΠΈΡΠΎΠΊΠœΠΎΠ΄ΡƒΠ»Π΅ΠΉ + Π²Ρ‹Ρ…ΠΎΠ΄ + 6.ΠžΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Interface Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎΠœΠΎΠ΄ΡƒΠ»Ρ + Для всСх ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΈΠ· Implementation части ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎΠœΠΎΠ΄ΡƒΠ»Ρ справа Π½Π°Π»Π΅Π²ΠΎ + Если состояниС ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ³ΠΎ модуля BeginCompilation Ρ‚ΠΎ + Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² список ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½ΠΎΠΉ компиляции; + ΠΈΠ½Π°Ρ‡Π΅ + CompileUnit(Бписок ΠΈΠ· Implementation части ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎΠœΠΎΠ΄ΡƒΠ»Ρ,ΠΌΠΎΠ΄ΡƒΠ»ΡŒ.имя) + Если Добавляли Π₯отя Π±Ρ‹ Один Π’ Бписок ΠžΡ‚Π»ΠΎΠΆΠ΅Π½ΠΎΠΉ ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΠΈ Ρ‚ΠΎ + Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉΠœΠΎΠ΄ΡƒΠ»ΡŒ Π² список ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½ΠΎΠΉ компиляции + Π²Ρ‹Ρ…ΠΎΠ΄ + ΠžΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Implementation Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎΠœΠΎΠ΄ΡƒΠ»Ρ + БостояниС ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎΠœΠΎΠ΄ΡƒΠ»Ρ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π½Π° Compiled + Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² Π‘ΠΏΠΈΡΠΎΠΊΠœΠΎΠ΄ΡƒΠ»Π΅ΠΉ + Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉΠœΠΎΠ΄ΡƒΠ»ΡŒ Π² Π²ΠΈΠ΄Π΅ PCU Ρ„Π°ΠΉΠ»Π° Π½Π° диск + ``` + + +### БловСсноС описаниС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° + +ΠœΠΎΠ΄ΡƒΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² порядкС, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ порядку **ΠΎΠ±Ρ…ΠΎΠ΄Π° Π² Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ** Π³Ρ€Π°Ρ„Π° зависимостСй. ΠžΠ±Ρ…ΠΎΠ΄ Π² Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ рСализуСтся рСкурсивными Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ CompileUnit. + +Π‘Π½Π°Ρ‡Π°Π»Π° рСкурсивно обходятся всС зависимости интСрфСйсных частСй ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π² порядкС **ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ** порядку Π² спискС uses. Ясно, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ **цикличСская Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ интСрфСйсных частСй** ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ. Она запрСщаСтся (Π²ΠΎ врСмя компиляции выдаСтся соотв. ошибка). Π¦ΠΈΠΊΠ» обнаруТиваСтся, Ссли ΠΌΡ‹ встрСчаСм ΠΌΠΎΠ΄ΡƒΠ»ΡŒ с Π½Π΅ ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ интСрфСйсом, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΡ‹ ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΈ. + + + +**ΠŸΡ€ΠΈΠΌΠ΅Ρ€ допустимого Ρ†ΠΈΠΊΠ»Π°** +![[допустимая цикличСская Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ.png]] +--- + +Если всС зависимости интСрфСйса скомпилированы, Ρ‚ΠΎ Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ порядкС Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ рСкурсивно ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ зависимости части Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ (implementation). **ΠžΡ‚Π»ΠΎΠΆΠ΅Π½Π½Π°Ρ компиляция** происходит сразу послС окончания ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΎΠ±Ρ…ΠΎΠ΄Π° всСх ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ΠΊΠΎΠ³Π΄Π° Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ всС интСрфСйсныС части ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΡƒΠΆΠ΅ скомпилированы. Π­Ρ‚ΠΎ условиС Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ отсутствиС Π½ΠΎΠ²Ρ‹Ρ… цикличСских интСрфСйсных зависимостСй. ΠœΠΎΠ΄ΡƒΠ»ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² список ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ компиляции Π² случаС, Ссли Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π΅ Π² спискС uses части Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΅ΡΡ‚ΡŒ Ρ€Π°Π½Π΅Π΅ встрСчСнный ΠΌΠΎΠ΄ΡƒΠ»ΡŒ с Π΅Ρ‰Π΅ Π½Π΅ ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ интСрфСйсом (Π² список Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±Π° этих модуля). + + + +```csharp +if (currentUnit.State != UnitState.BeginCompilation || currentUnit.SemanticTree != null) +{ + AddCurrentUnitAndItsReferencesToUsesLists(unitsFromUsesSection, directUnitsFromUsesSection, + currentUnitNode, currentUnit, GetReferences(currentUnit)); + return currentUnit; +} +``` \ No newline at end of file diff --git a/documentation/Compiler/Compilation algorithm/допустимая цикличСская Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ.png b/documentation/Compiler/Compilation algorithm/допустимая цикличСская Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ.png new file mode 100644 index 0000000000000000000000000000000000000000..771d1f2c38b4aea7970efce3a0ab4e1a2b0449a5 GIT binary patch literal 165371 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 literal 0 HcmV?d00001 diff --git a/documentation/Compiler/Compiler_api.md b/documentation/Compiler/Compiler_api.md new file mode 100644 index 000000000..f8f6100c4 --- /dev/null +++ b/documentation/Compiler/Compiler_api.md @@ -0,0 +1,2412 @@ +# Class Compiler + +Namespace: [PascalABCCompiler](PascalABCCompiler.md) +Assembly: Compiler.dll + +```csharp +public class Compiler : MarshalByRefObject, ICompiler +``` + +#### Inheritance + +[object](https://learn.microsoft.com/dotnet/api/system.object) ← +[MarshalByRefObject](https://learn.microsoft.com/dotnet/api/system.marshalbyrefobject) ← +[Compiler](PascalABCCompiler.Compiler.md) + +#### Implements + +[ICompiler](PascalABCCompiler.ICompiler.md) + +#### Inherited Members + +[MarshalByRefObject.MemberwiseClone\(bool\)](https://learn.microsoft.com/dotnet/api/system.marshalbyrefobject.memberwiseclone), +[MarshalByRefObject.GetLifetimeService\(\)](https://learn.microsoft.com/dotnet/api/system.marshalbyrefobject.getlifetimeservice), +[MarshalByRefObject.InitializeLifetimeService\(\)](https://learn.microsoft.com/dotnet/api/system.marshalbyrefobject.initializelifetimeservice), +[MarshalByRefObject.CreateObjRef\(Type\)](https://learn.microsoft.com/dotnet/api/system.marshalbyrefobject.createobjref), +[object.ToString\(\)](https://learn.microsoft.com/dotnet/api/system.object.tostring), +[object.Equals\(object\)](https://learn.microsoft.com/dotnet/api/system.object.equals\#system\-object\-equals\(system\-object\)), +[object.Equals\(object, object\)](https://learn.microsoft.com/dotnet/api/system.object.equals\#system\-object\-equals\(system\-object\-system\-object\)), +[object.ReferenceEquals\(object, object\)](https://learn.microsoft.com/dotnet/api/system.object.referenceequals), +[object.GetHashCode\(\)](https://learn.microsoft.com/dotnet/api/system.object.gethashcode), +[object.GetType\(\)](https://learn.microsoft.com/dotnet/api/system.object.gettype), +[object.MemberwiseClone\(\)](https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone) + +## Constructors + +### Compiler\(\) + +```csharp +private static Compiler() +``` + +### Compiler\(\) + +```csharp +public Compiler() +``` + +### Compiler\(ICompiler, SourceFilesProviderDelegate, ChangeCompilerStateEventDelegate\) + +```csharp +public Compiler(ICompiler comp, SourceFilesProviderDelegate SourceFilesProvider, ChangeCompilerStateEventDelegate ChangeCompilerState) +``` + +#### Parameters + +`comp` [ICompiler](PascalABCCompiler.ICompiler.md) + +`SourceFilesProvider` SourceFilesProviderDelegate + +`ChangeCompilerState` [ChangeCompilerStateEventDelegate](PascalABCCompiler.ChangeCompilerStateEventDelegate.md) + +### Compiler\(SourceFilesProviderDelegate, ChangeCompilerStateEventDelegate\) + +```csharp +public Compiler(SourceFilesProviderDelegate SourceFilesProvider, ChangeCompilerStateEventDelegate ChangeCompilerState) +``` + +#### Parameters + +`SourceFilesProvider` SourceFilesProviderDelegate + +`ChangeCompilerState` [ChangeCompilerStateEventDelegate](PascalABCCompiler.ChangeCompilerStateEventDelegate.md) + +## Fields + +### BadNodesInSyntaxTree + +```csharp +private Hashtable BadNodesInSyntaxTree +``` + +#### Field Value + + [Hashtable](https://learn.microsoft.com/dotnet/api/system.collections.hashtable) + +### CodeGeneratorsController + +```csharp +public Controller CodeGeneratorsController +``` + +#### Field Value + + Controller + +### CompiledVariables + +```csharp +public List CompiledVariables +``` + +#### Field Value + + [List](https://learn.microsoft.com/dotnet/api/system.collections.generic.list\-1) + +### DLLCache + +```csharp +private Dictionary DLLCache +``` + +#### Field Value + + [Dictionary](https://learn.microsoft.com/dotnet/api/system.collections.generic.dictionary\-2)<[string](https://learn.microsoft.com/dotnet/api/system.string), [CompilationUnit](PascalABCCompiler.CompilationUnit.md)\> + +### PCUReadersAndWritersClosed + +```csharp +private bool PCUReadersAndWritersClosed +``` + +#### Field Value + + [bool](https://learn.microsoft.com/dotnet/api/system.boolean) + +### RecompileList + +```csharp +public Hashtable RecompileList +``` + +#### Field Value + + [Hashtable](https://learn.microsoft.com/dotnet/api/system.collections.hashtable) + +### StandardModules + +```csharp +private List StandardModules +``` + +#### Field Value + + [List](https://learn.microsoft.com/dotnet/api/system.collections.generic.list\-1)<[string](https://learn.microsoft.com/dotnet/api/system.string)\> + +### SyntaxTreeToSemanticTreeConverter + +```csharp +public SyntaxTreeToSemanticTreeConverter SyntaxTreeToSemanticTreeConverter +``` + +#### Field Value + + [SyntaxTreeToSemanticTreeConverter](PascalABCCompiler.TreeConverter.SyntaxTreeToSemanticTreeConverter.md) + +### UnitsToCompileDelayedList + +список ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ компиляции Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ (ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π° Π² Compile, Π° Π½Π΅ Π² Π‘ompileUnit) + +```csharp +private List UnitsToCompileDelayedList +``` + +#### Field Value + + [List](https://learn.microsoft.com/dotnet/api/system.collections.generic.list\-1)<[CompilationUnit](PascalABCCompiler.CompilationUnit.md)\> + +### UnitsTopologicallySortedList + +```csharp +public List UnitsTopologicallySortedList +``` + +#### Field Value + + [List](https://learn.microsoft.com/dotnet/api/system.collections.generic.list\-1)<[CompilationUnit](PascalABCCompiler.CompilationUnit.md)\> + +### \_clear\_after\_compilation + +```csharp +private bool _clear_after_compilation +``` + +#### Field Value + + [bool](https://learn.microsoft.com/dotnet/api/system.boolean) + +### assemblyResolveScope + +```csharp +private AssemblyResolveScope assemblyResolveScope +``` + +#### Field Value + + AssemblyResolveScope + +### beginOffset + +Начало основной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ + +```csharp +public int beginOffset +``` + +#### Field Value + + [int](https://learn.microsoft.com/dotnet/api/system.int32) + +### currentCompilationUnit + +```csharp +private CompilationUnit currentCompilationUnit +``` + +#### Field Value + + [CompilationUnit](PascalABCCompiler.CompilationUnit.md) + +### errorsList + +```csharp +private List errorsList +``` + +#### Field Value + + [List](https://learn.microsoft.com/dotnet/api/system.collections.generic.list\-1) + +### firstCompilationUnit + +```csharp +private CompilationUnit firstCompilationUnit +``` + +#### Field Value + + [CompilationUnit](PascalABCCompiler.CompilationUnit.md) + +### internalDebug + +```csharp +private CompilerInternalDebug internalDebug +``` + +#### Field Value + + [CompilerInternalDebug](PascalABCCompiler.CompilerInternalDebug.md) + +### linesCompiled + +```csharp +private uint linesCompiled +``` + +#### Field Value + + [uint](https://learn.microsoft.com/dotnet/api/system.uint32) + +### pABCCodeHealth + +```csharp +private int pABCCodeHealth +``` + +#### Field Value + + [int](https://learn.microsoft.com/dotnet/api/system.int32) + +### pcuCompilationUnits + +```csharp +private static Dictionary pcuCompilationUnits +``` + +#### Field Value + + [Dictionary](https://learn.microsoft.com/dotnet/api/system.collections.generic.dictionary\-2)<[string](https://learn.microsoft.com/dotnet/api/system.string), [CompilationUnit](PascalABCCompiler.CompilationUnit.md)\> + +### project + +```csharp +private ProjectInfo project +``` + +#### Field Value + + [ProjectInfo](PascalABCCompiler.ProjectInfo.md) + +### semanticTree + +```csharp +private program_node semanticTree +``` + +#### Field Value + + program\_node + +### semanticTreeConvertersController + +```csharp +private SemanticTreeConvertersController semanticTreeConvertersController +``` + +#### Field Value + + [SemanticTreeConvertersController](PascalABCCompiler.SemanticTreeConverters.SemanticTreeConvertersController.md) + +### sourceFilesProvider + +```csharp +private SourceFilesProviderDelegate sourceFilesProvider +``` + +#### Field Value + + SourceFilesProviderDelegate + +### standartAssemblyPath + +```csharp +private static string standartAssemblyPath +``` + +#### Field Value + + [string](https://learn.microsoft.com/dotnet/api/system.string) + +### standart\_assembly\_dict + +```csharp +public static Dictionary standart_assembly_dict +``` + +#### Field Value + + [Dictionary](https://learn.microsoft.com/dotnet/api/system.collections.generic.dictionary\-2)<[string](https://learn.microsoft.com/dotnet/api/system.string), [string](https://learn.microsoft.com/dotnet/api/system.string)\> + +### state + +```csharp +private CompilerState state +``` + +#### Field Value + + [CompilerState](PascalABCCompiler.CompilerState.md) + +### supportedProjectFiles + +```csharp +private SupportedSourceFile[] supportedProjectFiles +``` + +#### Field Value + + [SupportedSourceFile](PascalABCCompiler.SupportedSourceFile.md)\[\] + +### supportedSourceFiles + +```csharp +private SupportedSourceFile[] supportedSourceFiles +``` + +#### Field Value + + [SupportedSourceFile](PascalABCCompiler.SupportedSourceFile.md)\[\] + +### unitTable + +```csharp +private CompilationUnitHashTable unitTable +``` + +#### Field Value + + [CompilationUnitHashTable](PascalABCCompiler.CompilationUnitHashTable.md) + +### varBeginOffset + +ПолоТСниС ΠΏΠ΅Ρ€Π²Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² пространствС ΠΈΠΌΠ΅Π½ основной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ + +```csharp +public int varBeginOffset +``` + +#### Field Value + + [int](https://learn.microsoft.com/dotnet/api/system.int32) + +### warnings + +```csharp +private List warnings +``` + +#### Field Value + + [List](https://learn.microsoft.com/dotnet/api/system.collections.generic.list\-1) + +## Properties + +### Banner + +```csharp +public static string Banner { get; } +``` + +#### Property Value + + [string](https://learn.microsoft.com/dotnet/api/system.string) + +### BeginOffset + +```csharp +public int BeginOffset { get; } +``` + +#### Property Value + + [int](https://learn.microsoft.com/dotnet/api/system.int32) + +### ClearAfterCompilation + +```csharp +public bool ClearAfterCompilation { get; set; } +``` + +#### Property Value + + [bool](https://learn.microsoft.com/dotnet/api/system.boolean) + +### CompilerOptions + +```csharp +public CompilerOptions CompilerOptions { get; set; } +``` + +#### Property Value + + [CompilerOptions](PascalABCCompiler.CompilerOptions.md) + +### CompilerType + +```csharp +public CompilerType CompilerType { get; } +``` + +#### Property Value + + [CompilerType](PascalABCCompiler.CompilerType.md) + +### ErrorsList + +```csharp +public List ErrorsList { get; } +``` + +#### Property Value + + [List](https://learn.microsoft.com/dotnet/api/system.collections.generic.list\-1) + +### GetUnitFileNameCache + +```csharp +public Dictionary, string> GetUnitFileNameCache { get; } +``` + +#### Property Value + + [Dictionary](https://learn.microsoft.com/dotnet/api/system.collections.generic.dictionary\-2)<[Tuple](https://learn.microsoft.com/dotnet/api/system.tuple\-2)<[string](https://learn.microsoft.com/dotnet/api/system.string), [string](https://learn.microsoft.com/dotnet/api/system.string)\>, [string](https://learn.microsoft.com/dotnet/api/system.string)\> + +### InternalDebug + +```csharp +public CompilerInternalDebug InternalDebug { get; set; } +``` + +#### Property Value + + [CompilerInternalDebug](PascalABCCompiler.CompilerInternalDebug.md) + +### LanguageProvider + +```csharp +private LanguageProvider LanguageProvider { get; } +``` + +#### Property Value + + LanguageProvider + +### LinesCompiled + +```csharp +public uint LinesCompiled { get; } +``` + +#### Property Value + + [uint](https://learn.microsoft.com/dotnet/api/system.uint32) + +### PABCCodeHealth + +Π—Π΄ΠΎΡ€ΠΎΠ²ΡŒΠ΅ ΠΊΠΎΠ΄Π° Π½Π° всякий случай выносим Π² интСрфСйс компилятора +РСально ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ запускС ΠΈΠ· ΠΏΠΎΠ΄ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ (Remote Compiler) + +```csharp +public int PABCCodeHealth { get; } +``` + +#### Property Value + + [int](https://learn.microsoft.com/dotnet/api/system.int32) + +### PCUFileNamesDictionary + +```csharp +public Dictionary, Tuple> PCUFileNamesDictionary { get; } +``` + +#### Property Value + + [Dictionary](https://learn.microsoft.com/dotnet/api/system.collections.generic.dictionary\-2)<[Tuple](https://learn.microsoft.com/dotnet/api/system.tuple\-2)<[string](https://learn.microsoft.com/dotnet/api/system.string), [string](https://learn.microsoft.com/dotnet/api/system.string)\>, [Tuple](https://learn.microsoft.com/dotnet/api/system.tuple\-2)<[string](https://learn.microsoft.com/dotnet/api/system.string), [int](https://learn.microsoft.com/dotnet/api/system.int32)\>\> + +### SemanticTree + +```csharp +public IProgramNode SemanticTree { get; } +``` + +#### Property Value + + IProgramNode + +### SemanticTreeConvertersController + +```csharp +public SemanticTreeConvertersController SemanticTreeConvertersController { get; } +``` + +#### Property Value + + [SemanticTreeConvertersController](PascalABCCompiler.SemanticTreeConverters.SemanticTreeConvertersController.md) + +### ShortVersion + +```csharp +public static string ShortVersion { get; } +``` + +#### Property Value + + [string](https://learn.microsoft.com/dotnet/api/system.string) + +### SourceFileNamesDictionary + +```csharp +public Dictionary, Tuple> SourceFileNamesDictionary { get; } +``` + +#### Property Value + + [Dictionary](https://learn.microsoft.com/dotnet/api/system.collections.generic.dictionary\-2)<[Tuple](https://learn.microsoft.com/dotnet/api/system.tuple\-2)<[string](https://learn.microsoft.com/dotnet/api/system.string), [string](https://learn.microsoft.com/dotnet/api/system.string)\>, [Tuple](https://learn.microsoft.com/dotnet/api/system.tuple\-2)<[string](https://learn.microsoft.com/dotnet/api/system.string), [int](https://learn.microsoft.com/dotnet/api/system.int32)\>\> + +### SourceFilesProvider + +```csharp +public SourceFilesProviderDelegate SourceFilesProvider { get; } +``` + +#### Property Value + + SourceFilesProviderDelegate + +### State + +```csharp +public CompilerState State { get; } +``` + +#### Property Value + + [CompilerState](PascalABCCompiler.CompilerState.md) + +### SupportedProjectFiles + +```csharp +public SupportedSourceFile[] SupportedProjectFiles { get; } +``` + +#### Property Value + + [SupportedSourceFile](PascalABCCompiler.SupportedSourceFile.md)\[\] + +### SupportedSourceFiles + +```csharp +public SupportedSourceFile[] SupportedSourceFiles { get; set; } +``` + +#### Property Value + + [SupportedSourceFile](PascalABCCompiler.SupportedSourceFile.md)\[\] + +### UnitTable + +```csharp +public CompilationUnitHashTable UnitTable { get; } +``` + +#### Property Value + + [CompilationUnitHashTable](PascalABCCompiler.CompilationUnitHashTable.md) + +### VarBeginOffset + +```csharp +public int VarBeginOffset { get; } +``` + +#### Property Value + + [int](https://learn.microsoft.com/dotnet/api/system.int32) + +### Version + +```csharp +public static string Version { get; } +``` + +#### Property Value + + [string](https://learn.microsoft.com/dotnet/api/system.string) + +### VersionDateTime + +```csharp +public static DateTime VersionDateTime { get; } +``` + +#### Property Value + + [DateTime](https://learn.microsoft.com/dotnet/api/system.datetime) + +### Warnings + +```csharp +public List Warnings { get; } +``` + +#### Property Value + + [List](https://learn.microsoft.com/dotnet/api/system.collections.generic.list\-1) + +## Methods + +### AddCodeGenerationErrorToErrorList\(Exception\) + +```csharp +private void AddCodeGenerationErrorToErrorList(Exception err) +``` + +#### Parameters + +`err` [Exception](https://learn.microsoft.com/dotnet/api/system.exception) + +### AddCurrentUnitAndItsReferencesToUsesLists\(unit\_node\_list, Dictionary, unit\_or\_namespace, CompilationUnit, unit\_node\_list\) + +```csharp +private void AddCurrentUnitAndItsReferencesToUsesLists(unit_node_list unitsFromUsesSection, Dictionary directUnitsFromUsesSection, unit_or_namespace currentUnitNode, CompilationUnit currentUnit, unit_node_list references) +``` + +#### Parameters + +`unitsFromUsesSection` unit\_node\_list + +`directUnitsFromUsesSection` [Dictionary](https://learn.microsoft.com/dotnet/api/system.collections.generic.dictionary\-2) + +`currentUnitNode` unit\_or\_namespace + +`currentUnit` [CompilationUnit](PascalABCCompiler.CompilationUnit.md) + +`references` unit\_node\_list + +### AddDeclarationsAndReferencedUnitsToNamespaces\(List, string, unit\_module, syntax\_namespace\_node\) + +```csharp +private void AddDeclarationsAndReferencedUnitsToNamespaces(List namespace_modules, string file, unit_module unitModule, syntax_namespace_node namespaceNode) +``` + +#### Parameters + +`namespace_modules` [List](https://learn.microsoft.com/dotnet/api/system.collections.generic.list\-1) + +`file` [string](https://learn.microsoft.com/dotnet/api/system.string) + +`unitModule` unit\_module + +`namespaceNode` syntax\_namespace\_node + +### AddDocumentationToNodes\(CompilationUnit, string\) + +```csharp +private Dictionary AddDocumentationToNodes(CompilationUnit currentUnit, string text) +``` + +#### Parameters + +`currentUnit` [CompilationUnit](PascalABCCompiler.CompilationUnit.md) + +`text` [string](https://learn.microsoft.com/dotnet/api/system.string) + +#### Returns + + [Dictionary](https://learn.microsoft.com/dotnet/api/system.collections.generic.dictionary\-2) + +### AddErrorToErrorListConsideringPosition\(Error\) + +```csharp +private void AddErrorToErrorListConsideringPosition(Error err) +``` + +#### Parameters + +`err` Error + +### AddInternalErrorToErrorList\(CompilerInternalError\) + +```csharp +private void AddInternalErrorToErrorList(CompilerInternalError internalError) +``` + +#### Parameters + +`internalError` CompilerInternalError + +### AddNamespacesToMainDefinitions\(unit\_module, program\_module, Dictionary\) + +```csharp +private void AddNamespacesToMainDefinitions(unit_module mainLibrary, program_module main_program, Dictionary namespaces) +``` + +#### Parameters + +`mainLibrary` unit\_module + +`main_program` program\_module + +`namespaces` [Dictionary](https://learn.microsoft.com/dotnet/api/system.collections.generic.dictionary\-2)<[string](https://learn.microsoft.com/dotnet/api/system.string), syntax\_namespace\_node\> + +### AddNamespacesToMainUsesList\(unit\_module, program\_module, List\) + +```csharp +private void AddNamespacesToMainUsesList(unit_module mainLibrary, program_module main_program, List namespaceModules) +``` + +#### Parameters + +`mainLibrary` unit\_module + +`main_program` program\_module + +`namespaceModules` [List](https://learn.microsoft.com/dotnet/api/system.collections.generic.list\-1) + +### AddNamespacesToUsingList\(using\_namespace\_list, List, bool, Dictionary\) + +```csharp +public void AddNamespacesToUsingList(using_namespace_list usingList, List possibleNamespaces, bool mightContainUnits, Dictionary namespaces) +``` + +#### Parameters + +`usingList` using\_namespace\_list + +`possibleNamespaces` [List](https://learn.microsoft.com/dotnet/api/system.collections.generic.list\-1) + +`mightContainUnits` [bool](https://learn.microsoft.com/dotnet/api/system.boolean) + +`namespaces` [Dictionary](https://learn.microsoft.com/dotnet/api/system.collections.generic.dictionary\-2)<[string](https://learn.microsoft.com/dotnet/api/system.string), syntax\_namespace\_node\> + +### AddNamespacesToUsingList\(using\_namespace\_list, using\_list\) + +```csharp +public void AddNamespacesToUsingList(using_namespace_list using_list, using_list ul) +``` + +#### Parameters + +`using_list` using\_namespace\_list + +`ul` using\_list + +### AddReferencesToNetSystemLibraries\(CompilationUnit, List\) + +ДобавляСт ссылки Π½Π° стандартныС систСмныС dll .NET - вСрсия с Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°ΠΌΠΈ уровня сСмантики + +```csharp +private void AddReferencesToNetSystemLibraries(CompilationUnit compilationUnit, List directives) +``` + +#### Parameters + +`compilationUnit` [CompilationUnit](PascalABCCompiler.CompilationUnit.md) + +`directives` [List](https://learn.microsoft.com/dotnet/api/system.collections.generic.list\-1) + +### AddReferencesToNetSystemLibraries\(CompilationUnit, List\) + +ДобавляСт ссылки Π½Π° стандартныС систСмныС dll .NET - вСрсия с Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°ΠΌΠΈ уровня синтаксиса + +```csharp +private void AddReferencesToNetSystemLibraries(CompilationUnit compilationUnit, List directives) +``` + +#### Parameters + +`compilationUnit` [CompilationUnit](PascalABCCompiler.CompilationUnit.md) + +`directives` [List](https://learn.microsoft.com/dotnet/api/system.collections.generic.list\-1) + +### AddStandardUnitsToInterfaceUsesSection\(CompilationUnit\) + +```csharp +public void AddStandardUnitsToInterfaceUsesSection(CompilationUnit currentUnit) +``` + +#### Parameters + +`currentUnit` [CompilationUnit](PascalABCCompiler.CompilationUnit.md) + +### AddWarnings\(List\) + +```csharp +public void AddWarnings(List WarningList) +``` + +#### Parameters + +`WarningList` [List](https://learn.microsoft.com/dotnet/api/system.collections.generic.list\-1) + +### AsyncClosePCUWriters\(\) + +```csharp +private void AsyncClosePCUWriters() +``` + +### CalculateLinesCompiled\(List, compilation\_unit\) + +```csharp +private void CalculateLinesCompiled(List errorList, compilation_unit unitSyntaxTree) +``` + +#### Parameters + +`errorList` [List](https://learn.microsoft.com/dotnet/api/system.collections.generic.list\-1) + +`unitSyntaxTree` compilation\_unit + +### CalculatePascalProgramHealth\(compilation\_unit\) + +```csharp +private void CalculatePascalProgramHealth(compilation_unit unitSyntaxTree) +``` + +#### Parameters + +`unitSyntaxTree` compilation\_unit + +### ChangeCompilerStateEvent\(ICompiler, CompilerState, string\) + +```csharp +private void ChangeCompilerStateEvent(ICompiler sender, CompilerState State, string FileName) +``` + +#### Parameters + +`sender` [ICompiler](PascalABCCompiler.ICompiler.md) + +`State` [CompilerState](PascalABCCompiler.CompilerState.md) + +`FileName` [string](https://learn.microsoft.com/dotnet/api/system.string) + +### CheckErrorsAndThrowTheFirstOne\(\) + +```csharp +private void CheckErrorsAndThrowTheFirstOne() +``` + +### CheckForDuplicatesInUsesSection\(List\) + +БросаСт ΠΎΡˆΠΈΠ±ΠΊΡƒ Ссли Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Π΄ΡƒΠΏΠ»ΠΈΠΊΠ°Ρ‚Ρ‹ Π² сСкции uses + +```csharp +private void CheckForDuplicatesInUsesSection(List usesList) +``` + +#### Parameters + +`usesList` [List](https://learn.microsoft.com/dotnet/api/system.collections.generic.list\-1) + +### CheckForRTLErrorsAndClearAllErrorsIfFound\(\) + +```csharp +private bool CheckForRTLErrorsAndClearAllErrorsIfFound() +``` + +#### Returns + + [bool](https://learn.microsoft.com/dotnet/api/system.boolean) + +### CheckPathValid\(string\) + +```csharp +public static bool CheckPathValid(string path) +``` + +#### Parameters + +`path` [string](https://learn.microsoft.com/dotnet/api/system.string) + +#### Returns + + [bool](https://learn.microsoft.com/dotnet/api/system.boolean) + +### ClearAll\(bool\) + +```csharp +public void ClearAll(bool close_pcu = true) +``` + +#### Parameters + +`close_pcu` [bool](https://learn.microsoft.com/dotnet/api/system.boolean) + +### ClosePCUReadersAndWriters\(\) + +```csharp +private void ClosePCUReadersAndWriters() +``` + +### ClosePCUWriters\(\) + +```csharp +private void ClosePCUWriters() +``` + +### CombinePathsRelatively\(string, string\) + +```csharp +public static string CombinePathsRelatively(string path1, string path2) +``` + +#### Parameters + +`path1` [string](https://learn.microsoft.com/dotnet/api/system.string) + +`path2` [string](https://learn.microsoft.com/dotnet/api/system.string) + +#### Returns + + [string](https://learn.microsoft.com/dotnet/api/system.string) + +### Compile\(CompilerOptions\) + +```csharp +public string Compile(CompilerOptions CompilerOptions) +``` + +#### Parameters + +`CompilerOptions` [CompilerOptions](PascalABCCompiler.CompilerOptions.md) + +#### Returns + + [string](https://learn.microsoft.com/dotnet/api/system.string) + +### Compile\(\) + +```csharp +public string Compile() +``` + +#### Returns + + [string](https://learn.microsoft.com/dotnet/api/system.string) + +### CompileCS\(\) + +```csharp +public string CompileCS() +``` + +#### Returns + + [string](https://learn.microsoft.com/dotnet/api/system.string) + +### CompileCurrentUnitImplementation\(string, CompilationUnit, Dictionary\) + +```csharp +private void CompileCurrentUnitImplementation(string UnitFileName, CompilationUnit currentUnit, Dictionary docs) +``` + +#### Parameters + +`UnitFileName` [string](https://learn.microsoft.com/dotnet/api/system.string) + +`currentUnit` [CompilationUnit](PascalABCCompiler.CompilationUnit.md) + +`docs` [Dictionary](https://learn.microsoft.com/dotnet/api/system.collections.generic.dictionary\-2) + +### CompileCurrentUnitInterface\(string, CompilationUnit, Dictionary\) + +```csharp +private void CompileCurrentUnitInterface(string UnitFileName, CompilationUnit currentUnit, Dictionary docs) +``` + +#### Parameters + +`UnitFileName` [string](https://learn.microsoft.com/dotnet/api/system.string) + +`currentUnit` [CompilationUnit](PascalABCCompiler.CompilationUnit.md) + +`docs` [Dictionary](https://learn.microsoft.com/dotnet/api/system.collections.generic.dictionary\-2) + +### CompileImplementationDependencies\(string, CompilationUnit, List, Dictionary, common\_unit\_node, out bool\) + +ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈΠ· сСкции uses Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ модуля Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ рСкурсивно + +```csharp +private void CompileImplementationDependencies(string currentPath, CompilationUnit currentUnit, List implementationUsesList, Dictionary namespaces, common_unit_node commonUnitNode, out bool shouldReturnCurrentUnit) +``` + +#### Parameters + +`currentPath` [string](https://learn.microsoft.com/dotnet/api/system.string) + +`currentUnit` [CompilationUnit](PascalABCCompiler.CompilationUnit.md) + +`implementationUsesList` [List](https://learn.microsoft.com/dotnet/api/system.collections.generic.list\-1) + +`namespaces` [Dictionary](https://learn.microsoft.com/dotnet/api/system.collections.generic.dictionary\-2)<[string](https://learn.microsoft.com/dotnet/api/system.string), syntax\_namespace\_node\> + +`commonUnitNode` common\_unit\_node + +`shouldReturnCurrentUnit` [bool](https://learn.microsoft.com/dotnet/api/system.boolean) + +### CompileInterfaceDependencies\(unit\_node\_list, Dictionary, unit\_or\_namespace, string, string, CompilationUnit, List, unit\_node\_list, Dictionary, out bool\) + +ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈΠ· сСкции uses интСрфСйса Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ модуля рСкурсивно + +```csharp +private void CompileInterfaceDependencies(unit_node_list unitsFromUsesSection, Dictionary directUnitsFromUsesSection, unit_or_namespace currentUnitNode, string unitFileName, string currentPath, CompilationUnit currentUnit, List interfaceUsesList, unit_node_list references, Dictionary namespaces, out bool shouldReturnCurrentUnit) +``` + +#### Parameters + +`unitsFromUsesSection` unit\_node\_list + +`directUnitsFromUsesSection` [Dictionary](https://learn.microsoft.com/dotnet/api/system.collections.generic.dictionary\-2) + +`currentUnitNode` unit\_or\_namespace + +`unitFileName` [string](https://learn.microsoft.com/dotnet/api/system.string) + +`currentPath` [string](https://learn.microsoft.com/dotnet/api/system.string) + +`currentUnit` [CompilationUnit](PascalABCCompiler.CompilationUnit.md) + +`interfaceUsesList` [List](https://learn.microsoft.com/dotnet/api/system.collections.generic.list\-1) + +`references` unit\_node\_list + +`namespaces` [Dictionary](https://learn.microsoft.com/dotnet/api/system.collections.generic.dictionary\-2)<[string](https://learn.microsoft.com/dotnet/api/system.string), syntax\_namespace\_node\> + +`shouldReturnCurrentUnit` [bool](https://learn.microsoft.com/dotnet/api/system.boolean) + +#### Exceptions + + [CycleUnitReference](PascalABCCompiler.Errors.CycleUnitReference.md) + +### CompileReference\(unit\_node\_list, compiler\_directive\) + +```csharp +private CompilationUnit CompileReference(unit_node_list dlls, compiler_directive reference) +``` + +#### Parameters + +`dlls` unit\_node\_list + +`reference` compiler\_directive + +#### Returns + + [CompilationUnit](PascalABCCompiler.CompilationUnit.md) + +### CompileUnit\(unit\_node\_list, Dictionary, unit\_or\_namespace, string\) + +ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈ всС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π΅ΠΉ ΡŽΠ½ΠΈΡ‚Ρ‹ рСкурсивно + +```csharp +public CompilationUnit CompileUnit(unit_node_list unitsFromUsesSection, Dictionary directUnitsFromUsesSection, unit_or_namespace currentUnitNode, string previousPath) +``` + +#### Parameters + +`unitsFromUsesSection` unit\_node\_list + +Π’ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ пСрСмСнная для заполнСния CompilationUnit.interfaceUsedUnits ΠΈ + CompilationUnit.implementationUsedUnits (здСсь ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒΡΡ ΡŽΠ½ΠΈΡ‚Ρ‹ ΠΈ dll) + +`directUnitsFromUsesSection` [Dictionary](https://learn.microsoft.com/dotnet/api/system.collections.generic.dictionary\-2) + +Π’ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ пСрСмСнная для заполнСния CompilationUnit.interfaceUsedDirectUnits ΠΈ + CompilationUnit.implementationUsedDirectUnits + +`currentUnitNode` unit\_or\_namespace + +БинтаксичСский ΡƒΠ·Π΅Π» Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ модуля (ΠΈΠ»ΠΈ пространства ΠΈΠΌΠ΅Π½) + +`previousPath` [string](https://learn.microsoft.com/dotnet/api/system.string) + +ДирСктория Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ модуля + +#### Returns + + [CompilationUnit](PascalABCCompiler.CompilationUnit.md) + +Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΡŽΠ½ΠΈΡ‚ + +### CompileUnitsFromDelayedList\(\) + +```csharp +private void CompileUnitsFromDelayedList() +``` + +### ConstructMainSemanticTree\(CompilerOptions\) + +```csharp +private program_node ConstructMainSemanticTree(CompilerOptions compilerOptions) +``` + +#### Parameters + +`compilerOptions` CompilerOptions + +#### Returns + + program\_node + +### ConstructSyntaxTree\(string, CompilationUnit, string\) + +```csharp +private compilation_unit ConstructSyntaxTree(string unitFileName, CompilationUnit currentUnit, string sourceText) +``` + +#### Parameters + +`unitFileName` [string](https://learn.microsoft.com/dotnet/api/system.string) + +`currentUnit` [CompilationUnit](PascalABCCompiler.CompilationUnit.md) + +`sourceText` [string](https://learn.microsoft.com/dotnet/api/system.string) + +#### Returns + + compilation\_unit + +### ConstructSyntaxTreeAndRunSugarConversions\(string, CompilationUnit, out Dictionary\) + +Π‘Ρ‚Ρ€ΠΎΠΈΡ‚ синтаксичСскоС Π΄Π΅Ρ€Π΅Π²ΠΎ, бросаСт ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΈΠ· Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Ρ… ошибок (Ссли ΠΎΠ½ΠΈ Π΅ΡΡ‚ΡŒ) ΠΈ запускаСт сахарныС прСобразования + +```csharp +private void ConstructSyntaxTreeAndRunSugarConversions(string unitFileName, CompilationUnit currentUnit, out Dictionary docs) +``` + +#### Parameters + +`unitFileName` [string](https://learn.microsoft.com/dotnet/api/system.string) + +`currentUnit` [CompilationUnit](PascalABCCompiler.CompilationUnit.md) + +`docs` [Dictionary](https://learn.microsoft.com/dotnet/api/system.collections.generic.dictionary\-2) + +### ConvertSyntaxTree\(compilation\_unit, List\) + +```csharp +private compilation_unit ConvertSyntaxTree(compilation_unit syntaxTree, List converters) +``` + +#### Parameters + +`syntaxTree` compilation\_unit + +`converters` [List](https://learn.microsoft.com/dotnet/api/system.collections.generic.list\-1) + +#### Returns + + compilation\_unit + +### CreateDependencyListsForCurrentUnit\(CompilationUnit, string, out List, out unit\_node\_list, out Dictionary\) + +```csharp +private void CreateDependencyListsForCurrentUnit(CompilationUnit currentUnit, string currentDirectory, out List interfaceUsesList, out unit_node_list references, out Dictionary namespaces) +``` + +#### Parameters + +`currentUnit` [CompilationUnit](PascalABCCompiler.CompilationUnit.md) + +`currentDirectory` [string](https://learn.microsoft.com/dotnet/api/system.string) + +`interfaceUsesList` [List](https://learn.microsoft.com/dotnet/api/system.collections.generic.list\-1) + +`references` unit\_node\_list + +`namespaces` [Dictionary](https://learn.microsoft.com/dotnet/api/system.collections.generic.dictionary\-2)<[string](https://learn.microsoft.com/dotnet/api/system.string), syntax\_namespace\_node\> + +### CurrentUnitIsNotMainProgram\(\) + +Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true, Ссли Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π½Π΅ являСтся основной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ (program_module) + +```csharp +private bool CurrentUnitIsNotMainProgram() +``` + +#### Returns + + [bool](https://learn.microsoft.com/dotnet/api/system.boolean) + +### DebugOutputFileCreationUsingPDB\(\) + +```csharp +private void DebugOutputFileCreationUsingPDB() +``` + +### DisablePABCRtlIfUsingDotnet5\(List\) + +```csharp +private void DisablePABCRtlIfUsingDotnet5(List directives) +``` + +#### Parameters + +`directives` [List](https://learn.microsoft.com/dotnet/api/system.collections.generic.list\-1) + +### FillNetCompilerOptionsFromCompilerDirectives\(CompilerOptions, Dictionary\>\) + +```csharp +private void FillNetCompilerOptionsFromCompilerDirectives(CompilerOptions netCompilerOptions, Dictionary> compilerDirectives) +``` + +#### Parameters + +`netCompilerOptions` CompilerOptions + +`compilerDirectives` [Dictionary](https://learn.microsoft.com/dotnet/api/system.collections.generic.dictionary\-2)<[string](https://learn.microsoft.com/dotnet/api/system.string), [List](https://learn.microsoft.com/dotnet/api/system.collections.generic.list\-1)\> + +### FillNetCompilerOptionsFromProject\(CompilerOptions\) + +```csharp +private void FillNetCompilerOptionsFromProject(CompilerOptions netCompilerOptions) +``` + +#### Parameters + +`netCompilerOptions` CompilerOptions + +### FindFileWithExtensionInDirs\(string, out int, params string\[\]\) + +```csharp +private string FindFileWithExtensionInDirs(string fileName, out int foundDirIndex, params string[] dirs) +``` + +#### Parameters + +`fileName` [string](https://learn.microsoft.com/dotnet/api/system.string) + +`foundDirIndex` [int](https://learn.microsoft.com/dotnet/api/system.int32) + +`dirs` [string](https://learn.microsoft.com/dotnet/api/system.string)\[\] + +#### Returns + + [string](https://learn.microsoft.com/dotnet/api/system.string) + +### FindPCUFileName\(string, string, out int\) + +```csharp +public string FindPCUFileName(string fileName, string currentPath, out int folderPriority) +``` + +#### Parameters + +`fileName` [string](https://learn.microsoft.com/dotnet/api/system.string) + +`currentPath` [string](https://learn.microsoft.com/dotnet/api/system.string) + +`folderPriority` [int](https://learn.microsoft.com/dotnet/api/system.int32) + +#### Returns + + [string](https://learn.microsoft.com/dotnet/api/system.string) + +### FindPositionForSemanticErrorInTheErrorList\(Error\) + +```csharp +private int FindPositionForSemanticErrorInTheErrorList(Error err) +``` + +#### Parameters + +`err` Error + +#### Returns + + [int](https://learn.microsoft.com/dotnet/api/system.int32) + +### FindSourceFileName\(string, string, out int\) + +```csharp +public string FindSourceFileName(string fileName, string currentPath, out int folderPriority) +``` + +#### Parameters + +`fileName` [string](https://learn.microsoft.com/dotnet/api/system.string) + +`currentPath` [string](https://learn.microsoft.com/dotnet/api/system.string) + +`folderPriority` [int](https://learn.microsoft.com/dotnet/api/system.int32) + +#### Returns + + [string](https://learn.microsoft.com/dotnet/api/system.string) + +### FindSourceFileNameInDirs\(string, out int, params string\[\]\) + +```csharp +public string FindSourceFileNameInDirs(string fileName, out int foundDirIndex, params string[] Dirs) +``` + +#### Parameters + +`fileName` [string](https://learn.microsoft.com/dotnet/api/system.string) + +`foundDirIndex` [int](https://learn.microsoft.com/dotnet/api/system.int32) + +`Dirs` [string](https://learn.microsoft.com/dotnet/api/system.string)\[\] + +#### Returns + + [string](https://learn.microsoft.com/dotnet/api/system.string) + +### Free\(\) + +```csharp +public void Free() +``` + +### GenUnitDocumentation\(CompilationUnit, string\) + +```csharp +private Dictionary GenUnitDocumentation(CompilationUnit currentUnit, string SourceText) +``` + +#### Parameters + +`currentUnit` [CompilationUnit](PascalABCCompiler.CompilationUnit.md) + +`SourceText` [string](https://learn.microsoft.com/dotnet/api/system.string) + +#### Returns + + [Dictionary](https://learn.microsoft.com/dotnet/api/system.collections.generic.dictionary\-2) + +### GenerateILCode\(program\_node, CompilerOptions, List\) + +```csharp +private void GenerateILCode(program_node programNode, CompilerOptions compilerOptions, List resourceFiles) +``` + +#### Parameters + +`programNode` program\_node + +`compilerOptions` CompilerOptions + +`resourceFiles` [List](https://learn.microsoft.com/dotnet/api/system.collections.generic.list\-1)<[string](https://learn.microsoft.com/dotnet/api/system.string)\> + +### GetCompilerDirectives\(List\) + +Π€ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² компилятора, собирая ΠΈΡ… ΠΈΠ· всСх ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ + +```csharp +private Dictionary> GetCompilerDirectives(List Units) +``` + +#### Parameters + +`Units` [List](https://learn.microsoft.com/dotnet/api/system.collections.generic.list\-1)<[CompilationUnit](PascalABCCompiler.CompilationUnit.md)\> + +#### Returns + + [Dictionary](https://learn.microsoft.com/dotnet/api/system.collections.generic.dictionary\-2)<[string](https://learn.microsoft.com/dotnet/api/system.string), [List](https://learn.microsoft.com/dotnet/api/system.collections.generic.list\-1)\> + +#### Exceptions + + [DuplicateDirective](PascalABCCompiler.Errors.DuplicateDirective.md) + +### GetDirectivesAsSemanticNodes\(List, string\) + +ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ сСмантичСского уровня | Π² syntax_tree_visitor такая ΠΆΠ΅ функция EVA + +```csharp +private List GetDirectivesAsSemanticNodes(List compilerDirectives, string unitFileName) +``` + +#### Parameters + +`compilerDirectives` [List](https://learn.microsoft.com/dotnet/api/system.collections.generic.list\-1) + +`unitFileName` [string](https://learn.microsoft.com/dotnet/api/system.string) + +#### Returns + + [List](https://learn.microsoft.com/dotnet/api/system.collections.generic.list\-1) + +### GetImplementationSyntaxUsingList\(compilation\_unit\) + +ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ списка using - legacy code !!! + +```csharp +private using_list GetImplementationSyntaxUsingList(compilation_unit cu) +``` + +#### Parameters + +`cu` compilation\_unit + +#### Returns + + using\_list + +### GetImplementationUsesSection\(compilation\_unit\) + +```csharp +private List GetImplementationUsesSection(compilation_unit unitSyntaxTree) +``` + +#### Parameters + +`unitSyntaxTree` compilation\_unit + +#### Returns + + [List](https://learn.microsoft.com/dotnet/api/system.collections.generic.list\-1) + +### GetIncludedFilesFromDirectives\(CompilationUnit, List\) + +```csharp +private static List GetIncludedFilesFromDirectives(CompilationUnit compilationUnit, List directives) +``` + +#### Parameters + +`compilationUnit` [CompilationUnit](PascalABCCompiler.CompilationUnit.md) + +`directives` [List](https://learn.microsoft.com/dotnet/api/system.collections.generic.list\-1) + +#### Returns + + [List](https://learn.microsoft.com/dotnet/api/system.collections.generic.list\-1)<[string](https://learn.microsoft.com/dotnet/api/system.string)\> + +### GetInterfaceUsesSection\(compilation\_unit\) + +Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ список зависимостСй ΠΈΠ· интСрфСйсной части модуля (ΠΈΠ»ΠΈ основной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹) + +```csharp +public List GetInterfaceUsesSection(compilation_unit unitSyntaxTree) +``` + +#### Parameters + +`unitSyntaxTree` compilation\_unit + +#### Returns + + [List](https://learn.microsoft.com/dotnet/api/system.collections.generic.list\-1) + +### GetInterfaceUsingList\(compilation\_unit\) + +ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ списка using - legacy code !!! + +```csharp +public using_list GetInterfaceUsingList(compilation_unit cu) +``` + +#### Parameters + +`cu` compilation\_unit + +#### Returns + + using\_list + +### GetLocationFromTreenode\(syntax\_tree\_node, string\) + +```csharp +private location GetLocationFromTreenode(syntax_tree_node tn, string FileName) +``` + +#### Parameters + +`tn` syntax\_tree\_node + +`FileName` [string](https://learn.microsoft.com/dotnet/api/system.string) + +#### Returns + + location + +### GetNamespace\(unit\_or\_namespace\) + +```csharp +public using_namespace GetNamespace(unit_or_namespace _name_space) +``` + +#### Parameters + +`_name_space` unit\_or\_namespace + +#### Returns + + using\_namespace + +### GetNamespace\(using\_namespace\_list, string, unit\_or\_namespace, bool, Dictionary\) + +Π€ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ ΡƒΠ·Π΅Π» сСмантичСского Π΄Π΅Ρ€Π΅Π²Π°, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ пространству ΠΈΠΌΠ΅Π½ (.NET ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΌΡƒ) + +```csharp +private using_namespace GetNamespace(using_namespace_list usingList, string fullNamespaceName, unit_or_namespace name_space, bool mightBeUnit, Dictionary namespaces) +``` + +#### Parameters + +`usingList` using\_namespace\_list + +`fullNamespaceName` [string](https://learn.microsoft.com/dotnet/api/system.string) + +`name_space` unit\_or\_namespace + +`mightBeUnit` [bool](https://learn.microsoft.com/dotnet/api/system.boolean) + +`namespaces` [Dictionary](https://learn.microsoft.com/dotnet/api/system.collections.generic.dictionary\-2)<[string](https://learn.microsoft.com/dotnet/api/system.string), syntax\_namespace\_node\> + +#### Returns + + using\_namespace + +#### Exceptions + + [UnitNotFound](PascalABCCompiler.Errors.UnitNotFound.md) + + NamespaceNotFound + +### GetNamespaceSyntaxTree\(string\) + +```csharp +private compilation_unit GetNamespaceSyntaxTree(string fileName) +``` + +#### Parameters + +`fileName` [string](https://learn.microsoft.com/dotnet/api/system.string) + +#### Returns + + compilation\_unit + +### GetReferenceFileName\(string, string\) + +```csharp +public static string GetReferenceFileName(string FileName, string curr_path = null) +``` + +#### Parameters + +`FileName` [string](https://learn.microsoft.com/dotnet/api/system.string) + +`curr_path` [string](https://learn.microsoft.com/dotnet/api/system.string) + +#### Returns + + [string](https://learn.microsoft.com/dotnet/api/system.string) + +### GetReferenceFileName\(string, SourceContext, string, bool\) + +```csharp +private string GetReferenceFileName(string FileName, SourceContext sc, string curr_path, bool overwrite) +``` + +#### Parameters + +`FileName` [string](https://learn.microsoft.com/dotnet/api/system.string) + +`sc` SourceContext + +`curr_path` [string](https://learn.microsoft.com/dotnet/api/system.string) + +`overwrite` [bool](https://learn.microsoft.com/dotnet/api/system.boolean) + +#### Returns + + [string](https://learn.microsoft.com/dotnet/api/system.string) + +### GetReferences\(CompilationUnit\) + +```csharp +public unit_node_list GetReferences(CompilationUnit compilationUnit) +``` + +#### Parameters + +`compilationUnit` [CompilationUnit](PascalABCCompiler.CompilationUnit.md) + +#### Returns + + unit\_node\_list + +### GetResourceFilesFromCompilerDirectives\(Dictionary\>\) + +```csharp +private List GetResourceFilesFromCompilerDirectives(Dictionary> compilerDirectives) +``` + +#### Parameters + +`compilerDirectives` [Dictionary](https://learn.microsoft.com/dotnet/api/system.collections.generic.dictionary\-2)<[string](https://learn.microsoft.com/dotnet/api/system.string), [List](https://learn.microsoft.com/dotnet/api/system.collections.generic.list\-1)\> + +#### Returns + + [List](https://learn.microsoft.com/dotnet/api/system.collections.generic.list\-1)<[string](https://learn.microsoft.com/dotnet/api/system.string)\> + +### GetSourceCode\(string, CompilationUnit\) + +```csharp +private string GetSourceCode(string UnitFileName, CompilationUnit currentUnit) +``` + +#### Parameters + +`UnitFileName` [string](https://learn.microsoft.com/dotnet/api/system.string) + +`currentUnit` [CompilationUnit](PascalABCCompiler.CompilationUnit.md) + +#### Returns + + [string](https://learn.microsoft.com/dotnet/api/system.string) + +### GetSourceContext\(compiler\_directive\) + +```csharp +private SourceContext GetSourceContext(compiler_directive directive) +``` + +#### Parameters + +`directive` compiler\_directive + +#### Returns + + SourceContext + +### GetSourceFileText\(string\) + +```csharp +public string GetSourceFileText(string FileName) +``` + +#### Parameters + +`FileName` [string](https://learn.microsoft.com/dotnet/api/system.string) + +#### Returns + + [string](https://learn.microsoft.com/dotnet/api/system.string) + +### GetUnitFileName\(unit\_or\_namespace, string\) + +```csharp +public string GetUnitFileName(unit_or_namespace unitNode, string currentPath) +``` + +#### Parameters + +`unitNode` unit\_or\_namespace + +`currentPath` [string](https://learn.microsoft.com/dotnet/api/system.string) + +#### Returns + + [string](https://learn.microsoft.com/dotnet/api/system.string) + +### GetUnitFileName\(string, string, string, SourceContext\) + +```csharp +public string GetUnitFileName(string unitName, string usesPath, string currentPath, SourceContext sourceContext) +``` + +#### Parameters + +`unitName` [string](https://learn.microsoft.com/dotnet/api/system.string) + +`usesPath` [string](https://learn.microsoft.com/dotnet/api/system.string) + +`currentPath` [string](https://learn.microsoft.com/dotnet/api/system.string) + +`sourceContext` SourceContext + +#### Returns + + [string](https://learn.microsoft.com/dotnet/api/system.string) + +### GetUnitPath\(CompilationUnit, CompilationUnit\) + +```csharp +public static string GetUnitPath(CompilationUnit u1, CompilationUnit u2) +``` + +#### Parameters + +`u1` [CompilationUnit](PascalABCCompiler.CompilationUnit.md) + +`u2` [CompilationUnit](PascalABCCompiler.CompilationUnit.md) + +#### Returns + + [string](https://learn.microsoft.com/dotnet/api/system.string) + +### HasIncludeNamespaceDirective\(CompilationUnit\) + +```csharp +private bool HasIncludeNamespaceDirective(CompilationUnit unit) +``` + +#### Parameters + +`unit` [CompilationUnit](PascalABCCompiler.CompilationUnit.md) + +#### Returns + + [bool](https://learn.microsoft.com/dotnet/api/system.boolean) + +### HasOnlySyntaxErrors\(List\) + +```csharp +private bool HasOnlySyntaxErrors(List errors) +``` + +#### Parameters + +`errors` [List](https://learn.microsoft.com/dotnet/api/system.collections.generic.list\-1) + +#### Returns + + [bool](https://learn.microsoft.com/dotnet/api/system.boolean) + +### InitializeCompilerOptionsRelatedToStandardUnits\(compilation\_unit\) + +УстанавливаСт значСния ΠΎΠΏΡ†ΠΈΠΉ DisableStandardUnits ΠΈ UseDllForSystemUnits + +```csharp +private void InitializeCompilerOptionsRelatedToStandardUnits(compilation_unit unitSyntaxTree) +``` + +#### Parameters + +`unitSyntaxTree` compilation\_unit + +### InitializeNewUnit\(string, string, ref CompilationUnit, out Dictionary\) + +ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ исходного ΠΊΠΎΠ΄Π° модуля, Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, +гСнСрация синтаксичСского Π΄Π΅Ρ€Π΅Π²Π°, +ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° синтаксичСских ошибок + +```csharp +private void InitializeNewUnit(string unitFileName, string UnitId, ref CompilationUnit currentUnit, out Dictionary docs) +``` + +#### Parameters + +`unitFileName` [string](https://learn.microsoft.com/dotnet/api/system.string) + +`UnitId` [string](https://learn.microsoft.com/dotnet/api/system.string) + +`currentUnit` [CompilationUnit](PascalABCCompiler.CompilationUnit.md) + +`docs` [Dictionary](https://learn.microsoft.com/dotnet/api/system.collections.generic.dictionary\-2) + +### InitializeProjectInfoAndFillCompilerOptionsFromIt\(\) + +```csharp +private void InitializeProjectInfoAndFillCompilerOptionsFromIt() +``` + +### InternalParseText\(ILanguage, string, string, List, List, List, bool\) + +```csharp +private compilation_unit InternalParseText(ILanguage language, string fileName, string text, List errorList, List warnings, List definesList = null, bool calculateHealth = true) +``` + +#### Parameters + +`language` ILanguage + +`fileName` [string](https://learn.microsoft.com/dotnet/api/system.string) + +`text` [string](https://learn.microsoft.com/dotnet/api/system.string) + +`errorList` [List](https://learn.microsoft.com/dotnet/api/system.collections.generic.list\-1) + +`warnings` [List](https://learn.microsoft.com/dotnet/api/system.collections.generic.list\-1) + +`definesList` [List](https://learn.microsoft.com/dotnet/api/system.collections.generic.list\-1)<[string](https://learn.microsoft.com/dotnet/api/system.string)\> + +`calculateHealth` [bool](https://learn.microsoft.com/dotnet/api/system.boolean) + +#### Returns + + compilation\_unit + +### IsDll\(compilation\_unit\) + +ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚, являСтся Π»ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ dll ΠΏΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π΅ + +```csharp +public static bool IsDll(compilation_unit unitSyntaxTree) +``` + +#### Parameters + +`unitSyntaxTree` compilation\_unit + +#### Returns + + [bool](https://learn.microsoft.com/dotnet/api/system.boolean) + +### IsDll\(compilation\_unit, out compiler\_directive\) + +ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚, являСтся Π»ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ dll ΠΏΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π΅ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ эту Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ + +```csharp +public static bool IsDll(compilation_unit unitSyntaxTree, out compiler_directive dllDirective) +``` + +#### Parameters + +`unitSyntaxTree` compilation\_unit + +`dllDirective` compiler\_directive + +#### Returns + + [bool](https://learn.microsoft.com/dotnet/api/system.boolean) + +### IsDocumentationNeeded\(compilation\_unit\) + +```csharp +private bool IsDocumentationNeeded(compilation_unit unitSyntaxTree) +``` + +#### Parameters + +`unitSyntaxTree` compilation\_unit + +#### Returns + + [bool](https://learn.microsoft.com/dotnet/api/system.boolean) + +### IsPossibleNetNamespaceOrStandardPasFile\(unit\_or\_namespace, bool, string\) + +```csharp +private bool IsPossibleNetNamespaceOrStandardPasFile(unit_or_namespace name_space, bool addToStandardModules, string currentPath) +``` + +#### Parameters + +`name_space` unit\_or\_namespace + +`addToStandardModules` [bool](https://learn.microsoft.com/dotnet/api/system.boolean) + +`currentPath` [string](https://learn.microsoft.com/dotnet/api/system.string) + +#### Returns + + [bool](https://learn.microsoft.com/dotnet/api/system.boolean) + +### MatchSyntaxErrorsToBadNodes\(CompilationUnit\) + +```csharp +private void MatchSyntaxErrorsToBadNodes(CompilationUnit currentUnit) +``` + +#### Parameters + +`currentUnit` [CompilationUnit](PascalABCCompiler.CompilationUnit.md) + +### NeedRecompiled\(string, string\[\], PCUReader\) + +```csharp +public bool NeedRecompiled(string pcu_name, string[] included, PCUReader pr) +``` + +#### Parameters + +`pcu_name` [string](https://learn.microsoft.com/dotnet/api/system.string) + +`included` [string](https://learn.microsoft.com/dotnet/api/system.string)\[\] + +`pr` [PCUReader](PascalABCCompiler.PCU.PCUReader.md) + +#### Returns + + [bool](https://learn.microsoft.com/dotnet/api/system.boolean) + +### ParseText\(string, string, List, List\) + +```csharp +public compilation_unit ParseText(string fileName, string text, List errorList, List warnings) +``` + +#### Parameters + +`fileName` [string](https://learn.microsoft.com/dotnet/api/system.string) + +`text` [string](https://learn.microsoft.com/dotnet/api/system.string) + +`errorList` [List](https://learn.microsoft.com/dotnet/api/system.collections.generic.list\-1) + +`warnings` [List](https://learn.microsoft.com/dotnet/api/system.collections.generic.list\-1) + +#### Returns + + compilation\_unit + +### PrebuildMainSemanticTreeActions\(out CompilerOptions, out List\) + +БохраняСт Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ для ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ; +ВыясняСт Ρ‚ΠΈΠΏ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°, Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ, ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ; +ЗаполняСт ΠΎΠΏΡ†ΠΈΠΈ .NET компиляции согласно Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°ΠΌ ΠΈ/ΠΈΠ»ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈΠ· ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°; +Находит рСсурсныС Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ· Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² + +```csharp +private void PrebuildMainSemanticTreeActions(out CompilerOptions netCompilerOptions, out List resourceFiles) +``` + +#### Parameters + +`netCompilerOptions` CompilerOptions + +`resourceFiles` [List](https://learn.microsoft.com/dotnet/api/system.collections.generic.list\-1)<[string](https://learn.microsoft.com/dotnet/api/system.string)\> + +### PreloadReference\(compiler\_directive\) + +```csharp +private Assembly PreloadReference(compiler_directive reference) +``` + +#### Parameters + +`reference` compiler\_directive + +#### Returns + + [Assembly](https://learn.microsoft.com/dotnet/api/system.reflection.assembly) + +### PrepareFinalMainFunctionForExe\(program\_node\) + +```csharp +public void PrepareFinalMainFunctionForExe(program_node mainSemanticTree) +``` + +#### Parameters + +`mainSemanticTree` program\_node + +### PrepareUserNamespacesUsedInTheCurrentUnit\(CompilationUnit\) + +```csharp +private Dictionary PrepareUserNamespacesUsedInTheCurrentUnit(CompilationUnit compilationUnit) +``` + +#### Parameters + +`compilationUnit` [CompilationUnit](PascalABCCompiler.CompilationUnit.md) + +#### Returns + + [Dictionary](https://learn.microsoft.com/dotnet/api/system.collections.generic.dictionary\-2)<[string](https://learn.microsoft.com/dotnet/api/system.string), syntax\_namespace\_node\> + +### ReadDLL\(string, SourceContext\) + +```csharp +public CompilationUnit ReadDLL(string FileName, SourceContext sc = null) +``` + +#### Parameters + +`FileName` [string](https://learn.microsoft.com/dotnet/api/system.string) + +`sc` SourceContext + +#### Returns + + [CompilationUnit](PascalABCCompiler.CompilationUnit.md) + +### ReadPCU\(string\) + +```csharp +public CompilationUnit ReadPCU(string FileName) +``` + +#### Parameters + +`FileName` [string](https://learn.microsoft.com/dotnet/api/system.string) + +#### Returns + + [CompilationUnit](PascalABCCompiler.CompilationUnit.md) + +### Reload\(\) + +```csharp +public void Reload() +``` + +### Reset\(\) + +```csharp +private void Reset() +``` + +### RunSemanticChecks\(string, CompilationUnit\) + +БСмантичСскиС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΏΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°ΠΌ ΠΈ ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ Ρ„Π°ΠΉΠ»Π° + +```csharp +private void RunSemanticChecks(string unitFileName, CompilationUnit currentUnit) +``` + +#### Parameters + +`unitFileName` [string](https://learn.microsoft.com/dotnet/api/system.string) + +`currentUnit` [CompilationUnit](PascalABCCompiler.CompilationUnit.md) + +### SaveDocumentationsForUnits\(\) + +```csharp +private void SaveDocumentationsForUnits() +``` + +### SavePCU\(CompilationUnit\) + +```csharp +public void SavePCU(CompilationUnit Unit) +``` + +#### Parameters + +`Unit` [CompilationUnit](PascalABCCompiler.CompilationUnit.md) + +### SaveUnitCheckInParsers\(\) + +ΠŸΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ парсСрам Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, компилируСтся Π»ΠΈ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ +(Π½ΡƒΠΆΠ½ΠΎ, Ссли Π½Π΅Ρ‚ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова unit ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ Π² языкС) + +```csharp +private void SaveUnitCheckInParsers() +``` + +### SemanticCheckCurrentUnitMustBeUnitModule\(string, CompilationUnit, bool\) + +```csharp +private void SemanticCheckCurrentUnitMustBeUnitModule(string UnitFileName, CompilationUnit currentUnit, bool isDll) +``` + +#### Parameters + +`UnitFileName` [string](https://learn.microsoft.com/dotnet/api/system.string) + +`currentUnit` [CompilationUnit](PascalABCCompiler.CompilationUnit.md) + +`isDll` [bool](https://learn.microsoft.com/dotnet/api/system.boolean) + +### SemanticCheckDLLDirectiveOnlyForLibraries\(compilation\_unit, bool, compiler\_directive\) + +ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°, Ρ‡Ρ‚ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° dll Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Library - Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ dll + +```csharp +private void SemanticCheckDLLDirectiveOnlyForLibraries(compilation_unit unitSyntaxTree, bool isDll, compiler_directive dllDirective) +``` + +#### Parameters + +`unitSyntaxTree` compilation\_unit + +`isDll` [bool](https://learn.microsoft.com/dotnet/api/system.boolean) + +`dllDirective` compiler\_directive + +### SemanticCheckDisableStandardUnitsDirectiveInUnit\(compilation\_unit\) + +Ошибка указания Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ DisableStandardUnits Π² ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ + +```csharp +private void SemanticCheckDisableStandardUnitsDirectiveInUnit(compilation_unit unitSyntaxTree) +``` + +#### Parameters + +`unitSyntaxTree` compilation\_unit + +### SemanticCheckIsUserNamespace\(compilation\_unit\) + +```csharp +private void SemanticCheckIsUserNamespace(compilation_unit unitSyntaxTree) +``` + +#### Parameters + +`unitSyntaxTree` compilation\_unit + +### SemanticCheckNamespacesOnlyInProjects\(CompilationUnit\) + +```csharp +private void SemanticCheckNamespacesOnlyInProjects(CompilationUnit currentUnit) +``` + +#### Parameters + +`currentUnit` [CompilationUnit](PascalABCCompiler.CompilationUnit.md) + +### SemanticCheckNoIncludeNamespaceDirectivesInUnit\(CompilationUnit\) + +```csharp +private void SemanticCheckNoIncludeNamespaceDirectivesInUnit(CompilationUnit currentUnit) +``` + +#### Parameters + +`currentUnit` [CompilationUnit](PascalABCCompiler.CompilationUnit.md) + +### SemanticCheckNoLoopDependenciesOfInterfaces\(CompilationUnit, string, unit\_or\_namespace, string\) + +```csharp +private void SemanticCheckNoLoopDependenciesOfInterfaces(CompilationUnit currentUnit, string unitFileName, unit_or_namespace usedUnitNode, string currentPath) +``` + +#### Parameters + +`currentUnit` [CompilationUnit](PascalABCCompiler.CompilationUnit.md) + +`unitFileName` [string](https://learn.microsoft.com/dotnet/api/system.string) + +`usedUnitNode` unit\_or\_namespace + +`currentPath` [string](https://learn.microsoft.com/dotnet/api/system.string) + +### SemanticCheckUsesInIsNotNamespace\(unit\_or\_namespace, CompilationUnit\) + +```csharp +private void SemanticCheckUsesInIsNotNamespace(unit_or_namespace currentUnitNode, CompilationUnit currentUnit) +``` + +#### Parameters + +`currentUnitNode` unit\_or\_namespace + +`currentUnit` [CompilationUnit](PascalABCCompiler.CompilationUnit.md) + +### SetOutputFileTypeOption\(Dictionary\>\) + +```csharp +private void SetOutputFileTypeOption(Dictionary> compilerDirectives) +``` + +#### Parameters + +`compilerDirectives` [Dictionary](https://learn.microsoft.com/dotnet/api/system.collections.generic.dictionary\-2)<[string](https://learn.microsoft.com/dotnet/api/system.string), [List](https://learn.microsoft.com/dotnet/api/system.collections.generic.list\-1)\> + +### SetOutputPlatformOption\(CompilerOptions, Dictionary\>\) + +```csharp +private void SetOutputPlatformOption(CompilerOptions netCompilerOptions, Dictionary> compilerDirectives) +``` + +#### Parameters + +`netCompilerOptions` CompilerOptions + +`compilerDirectives` [Dictionary](https://learn.microsoft.com/dotnet/api/system.collections.generic.dictionary\-2)<[string](https://learn.microsoft.com/dotnet/api/system.string), [List](https://learn.microsoft.com/dotnet/api/system.collections.generic.list\-1)\> + +### SetSupportedProjectFiles\(\) + +```csharp +private void SetSupportedProjectFiles() +``` + +### SetSupportedSourceFiles\(\) + +```csharp +private void SetSupportedSourceFiles() +``` + +### SetTargetTypeOption\(CompilerOptions\) + +```csharp +private void SetTargetTypeOption(CompilerOptions netCompilerOptions) +``` + +#### Parameters + +`netCompilerOptions` CompilerOptions + +### SetUseDLLForSystemUnits\(string, List, int\) + +Если Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π² сСкции uses Π΅ΡΡ‚ΡŒ Π½Π΅ ΠΏΡ€ΠΎ-Π²ΠΎ ΠΈΠΌΠ΅Π½ ΠΈ Π½Π΅ стандартный ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, Ρ‚ΠΎ использованиС PABCRtl.dll отмСняСтся + +```csharp +private void SetUseDLLForSystemUnits(string currentDirectory, List usesList, int lastUnitIndex) +``` + +#### Parameters + +`currentDirectory` [string](https://learn.microsoft.com/dotnet/api/system.string) + +`usesList` [List](https://learn.microsoft.com/dotnet/api/system.collections.generic.list\-1) + +`lastUnitIndex` [int](https://learn.microsoft.com/dotnet/api/system.int32) + +### SourceFileExists\(string\) + +```csharp +private bool SourceFileExists(string FileName) +``` + +#### Parameters + +`FileName` [string](https://learn.microsoft.com/dotnet/api/system.string) + +#### Returns + + [bool](https://learn.microsoft.com/dotnet/api/system.boolean) + +### SourceFileGetLastWriteTime\(string\) + +```csharp +private DateTime SourceFileGetLastWriteTime(string FileName) +``` + +#### Parameters + +`FileName` [string](https://learn.microsoft.com/dotnet/api/system.string) + +#### Returns + + [DateTime](https://learn.microsoft.com/dotnet/api/system.datetime) + +### StartCompile\(\) + +```csharp +public void StartCompile() +``` + +### ToString\(\) + +```csharp +public override string ToString() +``` + +#### Returns + + [string](https://learn.microsoft.com/dotnet/api/system.string) + +### TryThrowInvalidPath\(string, SourceContext\) + +```csharp +public static void TryThrowInvalidPath(string path, SourceContext loc) +``` + +#### Parameters + +`path` [string](https://learn.microsoft.com/dotnet/api/system.string) + +`loc` SourceContext + +### UnitHasPCU\(unit\_node\_list, Dictionary, unit\_or\_namespace, ref string, ref CompilationUnit\) + +```csharp +private bool UnitHasPCU(unit_node_list unitsFromUsesSection, Dictionary directUnitsFromUsesSection, unit_or_namespace currentUnitNode, ref string UnitFileName, ref CompilationUnit currentUnit) +``` + +#### Parameters + +`unitsFromUsesSection` unit\_node\_list + +`directUnitsFromUsesSection` [Dictionary](https://learn.microsoft.com/dotnet/api/system.collections.generic.dictionary\-2) + +`currentUnitNode` unit\_or\_namespace + +`UnitFileName` [string](https://learn.microsoft.com/dotnet/api/system.string) + +`currentUnit` [CompilationUnit](PascalABCCompiler.CompilationUnit.md) + +#### Returns + + [bool](https://learn.microsoft.com/dotnet/api/system.boolean) + +### WaitCallback\_ClosePCUWriters\(object\) + +```csharp +private void WaitCallback_ClosePCUWriters(object state) +``` + +#### Parameters + +`state` [object](https://learn.microsoft.com/dotnet/api/system.object) + +### buildImplementationUsesList\(CompilationUnit\) + +```csharp +private unit_node_list buildImplementationUsesList(CompilationUnit cu) +``` + +#### Parameters + +`cu` [CompilationUnit](PascalABCCompiler.CompilationUnit.md) + +#### Returns + + unit\_node\_list + +### get\_assembly\_path\(string, bool\) + +```csharp +public static string get_assembly_path(string name, bool search_for_intellisense) +``` + +#### Parameters + +`name` [string](https://learn.microsoft.com/dotnet/api/system.string) + +`search_for_intellisense` [bool](https://learn.microsoft.com/dotnet/api/system.boolean) + +#### Returns + + [string](https://learn.microsoft.com/dotnet/api/system.string) + +### get\_standart\_assembly\_path\(string\) + +```csharp +public static string get_standart_assembly_path(string name) +``` + +#### Parameters + +`name` [string](https://learn.microsoft.com/dotnet/api/system.string) + +#### Returns + + [string](https://learn.microsoft.com/dotnet/api/system.string) + +### pr\_ChangeState\(object, PCUReaderWriterState, object\) + +```csharp +private void pr_ChangeState(object Sender, PCUReaderWriterState State, object obj) +``` + +#### Parameters + +`Sender` [object](https://learn.microsoft.com/dotnet/api/system.object) + +`State` [PCUReaderWriterState](PascalABCCompiler.PCU.PCUReaderWriterState.md) + +`obj` [object](https://learn.microsoft.com/dotnet/api/system.object) + +### semanticTreeConvertersController\_ChangeState\(State, ISemanticTreeConverter\) + +```csharp +private void semanticTreeConvertersController_ChangeState(SemanticTreeConvertersController.State State, ISemanticTreeConverter SemanticTreeConverter) +``` + +#### Parameters + +`State` [SemanticTreeConvertersController](PascalABCCompiler.SemanticTreeConverters.SemanticTreeConvertersController.md).[State](PascalABCCompiler.SemanticTreeConverters.SemanticTreeConvertersController.State.md) + +`SemanticTreeConverter` [ISemanticTreeConverter](PascalABCCompiler.SemanticTreeConverters.ISemanticTreeConverter.md) + +### OnChangeCompilerState + +```csharp +public event ChangeCompilerStateEventDelegate OnChangeCompilerState +``` + +#### Event Type + + [ChangeCompilerStateEventDelegate](PascalABCCompiler.ChangeCompilerStateEventDelegate.md) + diff --git a/documentation/Compiler/PABCRtl/PABCRtl dll.md b/documentation/Compiler/PABCRtl/PABCRtl dll.md new file mode 100644 index 000000000..f9e935858 --- /dev/null +++ b/documentation/Compiler/PABCRtl/PABCRtl dll.md @@ -0,0 +1,22 @@ + +Owner: Alexander Zemlyak +Tags: Codebase + +Dll-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для ускорСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния β€œΠΏΡ€ΠΎΡΡ‚Ρ‹Ρ…β€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π±Π΅Π· ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… uses (допускаСтся использованиС ΠΏΡ€-Π² ΠΈΠΌΠ΅Π½ ΠΈ стандартных ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Паскаля ΠΈΠ· самой RTL). Для использования трСбуСтся Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ„Π»Π°ΠΆΠΎΠΊ *β€œΠ£ΡΠΊΠΎΡ€ΡΡ‚ΡŒ запуск ΠΈΠ· ΠΏΠΎΠ΄ оболочки”.* + +--- + +На ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ стандартныС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ: + +![Untitled](Untitled.png) + +--- + +> [!NOTE] ΠžΡΠΎΠ±Ρ‹Π΅ стандартныС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ. 1-я Π³Ρ€ΡƒΠΏΠΏΠ° +>  НСкоторыС стандартныС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π½Π΅ входят Π² PABCRtl.dll, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½Π° 64-битная, Π° ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ 32-Π±ΠΈΡ‚Π½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Π’Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ списка: PT4, CRT, Arrays, MPI, Collections, Core. ΠŸΡ€ΠΈ использовании ΠΈΡ… Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ PABCRtl.dll Π½Π΅ загруТаСтся. *2-я Π³Ρ€ΡƒΠΏΠΏΠ°* Если стандартныС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π½Π΅ входят Π² RTL ΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π½Π΅ входят Π² список ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ RTL, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ Π²Ρ‹ΡˆΠ΅, Ρ‚ΠΎ RTL загруТаСтся. Но ΠΏΡ€ΠΈ этом Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка компиляции ΠΈ компиляция запускаСтся Π·Π°Π½ΠΎΠ²ΠΎ Π±Π΅Π· использования RTL. + + +> [!NOTE] Как сдСлано Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ явном использовании стандартных ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΈΠ· RTL ΠΈΡ… pcu-Ρ„Π°ΠΉΠ»Ρ‹ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ? +> Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π² этом случаС Π²ΠΎΡΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ пространства ΠΈΠΌΠ΅Π½ ΠΈ Π΄Π°ΠΆΠ΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ списки, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ `possibleNamespaces` (см. [[Uses lists]]). ΠœΠ΅Ρ‚ΠΎΠ΄ `CompileUnit` для Π½ΠΈΡ… Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ вызываСтся. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ стандартных ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΈΠ· rtl Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π°. + + diff --git a/documentation/Compiler/PABCRtl/Untitled.png b/documentation/Compiler/PABCRtl/Untitled.png new file mode 100644 index 0000000000000000000000000000000000000000..f9ec58e4adc2d99d7363bf646c61d9122534a4f1 GIT binary patch literal 25321 zcmeFYRao2I_AW}5wm>Px-CE?sT|-K-QXEQgDDLhMpe+T8gcN9T*HVfEw}uuA9)i2O zC&4A`u+D$2?_1|?-|TZP_Vdh(Jc0b?9Al30&UcRS{vtKim53hEJi^1nBT{}PuZ@Ry zhX)Vu)}sgaao;eqHRj;qG2to8%f9iuwVPp7xmEu-oSO2Eg>-XfB!9}$#GP(VGb@!! zI;qG96&T-9mzONPL+ocPPxb5WU4OuP@ctj8p5%1D<$A_TR*S{$&Vwf#PyGOi)4Ol4 z0j4He#(1}${Aawnt66<&+xiBHK4~5YJ5IFEW%ZiD6IrIaE_o1v6L|AUw&m_h>%LiR zEfZ@p{98^3a8Q0`(?gXL&J-Afwi1W5Dj)>08r;M~uS0!2Gq3-p<`47VOEFHsi=w!$ z&$E;08<`kfx5(x(j^A0Pj=E=H$E{)p;TAXT&EurIPF&BUh=Z3GcTnQzQ4|#)0omO?5a`AiMuy`@B8=GXA}o3NS@>GG49(0x1LMMh?jtLK=aIlz}@=Cd88#(xM%Ygb4Hl z%XqkRRYzE(6YYH0S|JJQDiE2ZC}M-1Y6@@^MYP$~UXP`HOGECi-NmyE*6FE4@jL%s z1K#axid$qnSk&bUo6b z!iA?d8yzuOYR6fa(($6+kl^Ei0@h0}f6hIJJ?Z;I{rvuF@6KxaS;65c_gfgNPV}dt z!jgz6mf93V+G!0V4M%X|oxF*zfY%?M&W_JpB7N1U7~g(>NT0$3{fq7U9rP~>?{Cph zytxfOnKs}0Pk?)e=P~+bx0=Fu!0vNUT8`h8o}n4?iE< zUw51C2)!_b4#hs*hdzfv9f@~Kn^m2iS!-BWODa21!Q6Qe9@usac-)Lm6K+F9oFZQMPIM1Y&mX9G}#xA1w0*Pt^JQ5mIe0NGoAqYFsnCW97b zkxv=;R6>M1v-Ze^E8)GVN{F%rAn5MjzE;3J@b=Qdaiv1^9jWjC0l%9MAHs21aKC$z z6bCx2pKkx{G29=&XFu=&+X;=kv`Auac*6wm&v+hjcZ*^e^*Mi#u=NzdO) z@nCb5kV^#9X^8G)f{MM5L=J&ZB5v=1&Z>n+B0(7!s>Iy#yPPEQx5;|Eu>p6Lg zooMiLP=shl*Znh}m<|;Fl?H9ab_R(D6O=819xXrz_oqA9Kv77nyMN=P;K(up@4r&* z#cwd~a1i^d5NCvZDuVr$ScElIDOOyIO3cZ$koz zZld6L;Qz8=K@OMu#7bq>xpoidm2l2S3w7YoH(-@-uAH3bq~Jp5;Qs;%yt`QCf2|}cwYXIzIK3#=ynpzjWsju6g>VOgbDQ5V2)c)zDOPyCb7b+b44Dc|LZi{!$ecaNDQsO5ekgM z^5=fx8eWGiHma2dkn|X{UREcEj__kwf0?Z!xpJk6nO9fl%=Ue#C9DpqdzNP)`$D=O zk2@-eoA-n{_%906ho=t#wkwK2z14L7&1+SczAjat6B7&e_7eD>wnFd2^dxKLFcPz6 zbfZ3ngyjxM?&Yz^3awKp5fi^Mo5tAokEfTKM{Em(u}9>LnRodfMT>Yo0!d^zF^MdG6Y5p#JPtO z0hd!#Ta0zFm`dzyN|D@Fsvk--@}rZ_b64f0P(JCQ;=U51M(QC~JbuG(1J!$YS`Hf` z-OUeF&vm9(Oh>uUy8V_*G#zr?^0OtLHVR3Z9!z82S7H}ASVc?~%(SVED?Bocw;1q^!r4@t`SHYLj@vRZ2(f1~14q zwCdFrrJ21fM@LUk!#rcJV{ORX_(46djqzauDz$Mq-k|HUfoByUA!I>eP~QF#&CmVa z+S78S_d8=HJ8Y`2tst?f2V6J78Z(Vr`w4Y&8}_`7;)K55JIE~%7bmUyK)9r9SBnqu z`O9XQP)T6-2+l(r>&pu|JWY2;qFI~#ul;vE`Trzi4sglwIjS+Z(^kM4Zs5DgC46a= zsc|&8&ta3dJ^F_3!*BQvwklmu=04YuwveMnpjckI-kp4AB=bQlZAjdIZVi?e@0_hM z7slhxu$JKe;6s%acYS^o;C%40`-PYb!tSUpyI9(|RoQL19xC&M9QZ;rS^b?9wu zaUZWyx#iC*^HMlE$(->HL1f^W&$nB4C`2~rd9x%__K z`HdcI>k-V<1vuF&xy3W4^-S%&#P9Saua{c2wM`%W>y};7nR(JB@~d?yv@~A9O3CzK zIKakl3UnSVXluQqDEwz^a`wdo#+_RD4$`=`c^wOr5_6jGNPm$QBJx{R=A$EgU4&Xj z-QN@0Svy(HzO^77c-AI09ng2wB4PURPE~^EGF(;O#pV~)K#Z?Td)zXqgzvh_UU`2- z(1^-89p=qU$D(9`Q_%Qk$)k}x)7UqWpmu+lrLi#m(%lEDxSOjW*un6iDJpSK{u^6+ zjYfDMQB?Aq_2gH82DOySQ2GqD3eEYH^d@XrXNIUTpIKK}S<1aou2hN43Z;qP-Y`zn z=Z~AqkLx@6C$+LhZ7NNsL;F7M)2Cny6V6SCXB)<U&Yob# z=#DM@xojme9v`U&fxXkYBiB`RqNQ)|jwig=#VA6V+tgK4qI^JzYLZ9CEt_Z9Sa;;M zV;4V=rcQ8eD%U#J+)1n|{MczfK5M&WnvU|t0?`eDlDjI)RZuOQnUrSkP##H5KV_4s z>rF7diuV#nVAWOXc}4lXtB`Zb-D&e~T!wXvHi?#PnSMOmn;WmvYK}>M{tyLe0Yg%s zu^r{>m8cQ4Pi5rfPKsBEb3uic$s6~M;X6@+G3LSZ;NtK^T_Q_plilX3;zm89*<`1N zp~=~493{~3bKdT-TzBWRFQMlVqiq0 z7fyI|qVD06B2b{->c}TXnC4dnx|CXG0lK_$RIC7&(|XGYuMt6OsqmKG{A}4)hEnnO zHLgww!ai$2(n<$RW@<$Xy^b`SUp+LHeTR>WTB&TJRFE$6DSOgDk(7NK359Sif5*DP za310DOrjWtLK*MpIF-3UG~cJG0K1oOcZH0n7CZpnTAC!;%1sl`_Gk1Pd+s7Ay`dG) zfHk|iNjq`|BmR!uHm}jNOXMj!1Dew04-BhEHY?wc*DI@kV+=Gd>~ zrszB3ryRFd5K1W5Jv!7>jFa9Sw^)VV@0F7s$MoPQ<-VF>0|Gc7S}Gbn*R1Y)vg|8v zv(h3TE@OV4QnRX3|0hNs?+jy<^4>3lw0zq=n1>kl`Ec)RMrep9-+1)6jlA6f+YN{O zlWS*SZpgU*1;YJP_$*dswe}n`c}0Kt?jCx*&I1o6$!@B*rV5!`gQxlvc|N|R|79#; zD&>|F3B0-Ts{a4<^31Ap4mdsL!;|v4t=ppT;_A)!6j~uc+=U8ZNDDtu4v9JHg9VE+ zNfBO`0zvg{vck9m+3CZ7(e}f*+ybY)wEjQy=;rxEBP@?!z%Sr6A)?0VLQMHJ&>*W6 zuK5c?b~L`re(iFpaoHJUUNO*sIv+XD*Z=x^!q8a2)YY6d5@OnEdFH#1Rx3tWka z>2KVh?(1u`!hhWn6XQ_1zDw=@D!oI0jv-nHV{4E&k<~-=A^B2U&}z#03T%?OvbuI$ zBi-7{Df$@4%~8hRo0ZcZG$=nxyIVHJxcv$vl)-!>4Xg3@W*bxlaL%c18e={g`3N0(!Z)(b7u-FlYaRMKb+X|T*q2RGoz!Q z&U1(v53#-6a``j>Gm%X>zwBLNw1!Mg`)v?Xx#quH?BEv#`S z@!RZXhTf~QDBrWLow4$~+FJh^hx9mmBWIc6#cBhDVW>J|poLbWzc03rj3?nt$H`RU zlrk!DVJ;{6Y1XN^5<{Ms%eo_7lkgYcEkC2G6n9kZKn@jdovJsRZl7gZeGrz)$Ugp4 zEloyD=gUv0bb_{gF)~qmWIu#s!-B(A8=Lr32uQ;`)?U9*sYKVVU^p`Ajq(dK{Epw4 zduF&+=taf|q3d(Qf^)4GY41hZ`t`d909uPqL>Lq4wo`KTR@6V2L-(yat#DnkA|3w|Nvv8R|gafi0)Eh?|}g(_VASq~@TdwiY~J z)Yi?UOuxf)Wty9w*v_BcTe~4)Udk7+;#!~Sk>yT! z`&#@ayKl)f*cC_1c|BK;1(8}fO)XjVSRJm+nQOD_kG<_$gSE<=Q52b87cXT0dO76m zjE*^OM#SwR^~%OMV2YA{Axg3A7f9b{PtzV_zE^qfel8uUwe^%?jDBL6zihJrZEmfh zx+ZJl7#^0pS{WB5j`8~@8angYgG*4TL6$Z>9wECqj|O!Hs&+ip5+A98DFMQbEdP{7 zIZK_9?k6JKa&qFJBzu$X=br_h2ODIH&TBcbg;<;{?#(s=+F+Fo4gSI&+&CPk>qwss zm{?9iXh8TzU8Q0xf2*qI?F+J}_MdBNF!)*wyRJYg1IMSS!(~ybs`$a14Jp$`R9Zmh z^*ra3)nEjMC8++(t^s15l-ffHR|YWqSKZKUfX5J>uRrebi@ze0kDKW%E14VfOyyqt zU-8W^k^?p_gsNq`qf+mUY?Y%zf9g+q-H&sEI0rg#fkq*wcj=J~4XM$rJtSn@&d+XDC)MGQB{0dywx68TeQ*hQ{J7-XrLoQw4Q}h ztnz92@mw=&VM9Gx?a4W0m=O}$ujE-fqMRbVH)6-Sm+ji#SSR=*NQY zD(($Xe8yVb(VWZ9uto`A9>?b^R1>3PhL4wa!rn*nyOmkFc-gJs6SE*r$j>jqh;iis zmf!|3Z*!D^#Ui)u)#Curq{WO`7beez`NReU5mZD?RDFoDikqG~GR5|-b{^i(am=e- z|9xS~hzkp~&(1_^25jf$aL59HLCQY1XIZ^kEkkt`kq^j&6|R3ujt0dp4AMd7pXdmL zP!*PSR$D?u9=|>E>MSgP^Se(M$Mzq7c$*@{ZrQj+IV{_dcv$5A1acZ-^8DbUDcd{TKJ&Yn{e(`go@k$uSM4g2$UD;qA>$sdF=b&@PL z2?oPHfwyAzLD2Pp08uXr@40G_;iOZdt%v28z~;O%u<^!%dpV>Ox?m%p;e+jhX3%`| z^Por71ASfxTS*;B>y(K}8X#4C?~aHM9+R15z`onr56Pa;PY*X2@=3x@VmDt)hmN)- z`|KdoBLXBXb++A^C!q~z*;XutaxGNzr@wM30grmu5+*blbXrB(gh-=>s2lIze*I$M z>c)N{nQ}W4QWoE5YO$B3*&ce&qdPi&IpLwhL!G}i)Ye$)K&D7urHC83p2nl!El*fK z`N>edD_L7-qGt}{hfDCLOH<4eB?rr!k6g!Y)5B&uE4742#?^X0?PtJ-*4n0C473-s z4@>c7REP>_v$Skax;)yKp4_wy-xD)vsk~n{xkkC92#M+ zYJ2%e(7d@hQK@fo!8TX}I0?|L?mP5mX$xh3;rT>7`lcu_v`)@5t1PbJW39c4;Kq*_ z{=_MR>LYEL$**V`ep*&yk$-hKlWbLGiqso-;i3vxXSUJ6KC^I+-!Qx$T}TL9&gEi= z+;$Wwj}aecce5acFBexU28|U~_0U&JO!vxV9gfP3i?S?D{oF4|ek^lniJYd=MYQ4g zeW6F5Z55V91`yRHt1P$FR33S6a;!f~biK<*Lg@=jfb(((K_rtxz=LmHB-#mP+cgq_ zib3~kblm6pmEwRFu{yzC^8vBtIsKl5c|dDyH^$LV{>yDe%O71M$)bVe#)HNtQ~IzRl|W-2%7Zl}&=xU$4T zuT0>XERJa}%2d(AymRTJ_|9P_R;b0K-g$Ux5b!O4?Sh7v!P`>S?6kbRr|=z>Gj}uu zt>ZtH|AroPtM+2c`Na?3$%uSlK;6J(jH3;of5QHKQkz!hG}_wBq(yD^U*K2uQ|Fa? zf%ZBU-7P}j&P%Xe#w+tmsc{ddR2%N2C)Vr?+J5xMO_>Gq_}8JY6|a%{glMHB%1-&} zEL1UeM1KQHYCUnkjx7Ex>1!dzb}aK7>~op5@2nfVJp)E->>VUncs!G~CM^n7AY8u#uSl6XAzq(<5^5G zO@eL{im^JSpof((`9cd=ve=^)3iqSRc?Ql#nE0cNwhDij2X}(AYFp$ z{;M+m{^n71xW@4Rr!6wT&p7Pk_opS}M%8OAud=YMht4UZ zRmbD7IxphM6B7M?aE5zGR!vKZ|2NEjI;D-*$w{9~X2;A6)%+jm=I$z(y zV=WYPu`o}<95`YY4WT`mc6PtU@C3;D_tM40+O>IwVCiE{Yy1C9M3h~EDA25PH>j<<9^sz3e=POP({ykK6YKBNgLFPqhSrN< z6t*?=jdr9*DjAIf3#nuu;3(zzzo_rRrUJoy1k%EaPY^rs2>hn{bL(b}H2UMfF4^ue zERwbvj-Hwh)@yQ33&l0eZ7*c-L>v6+?NALnnKzTeBZYm=I{6^yC!Nys1iTqz-kA#hwqx4<1TXiy5e>h7 zXEWkJcjN77nO%bD;xEI|Rx^V{QB@pm3|W>kk%NdHgDiOu1w)Pc-jVHuy6FIEG{96$ zv}vrUaLUHqb#~&=f_b0{Zl%poe7XU1**bsw7;r|CHK;z#ayb??4Nm)#j4ZIO-$$jA zluO$r*e~morFof6)wuy;i>^Fdy=IhZt@3DtTG#HtJO}O#{<#ByACE}5Wu_5320w}o z7|18CL7#DOS^db|ikBJZtZ=+T_pjE6(M=r{elDV*a&{N&Ok>CRg+jE}JjPf46dcsR zUm8^T_7M&A1u#)he`5Kgz8D?JNj4vj^%f=(4y4sB>1dK&S;+kC)aGketw$z^c@(&^ zHNCBt2Y4(SOt_IVz`^~7#k-;8CutKSn?5ON955@FubE1;4alS1uElp<5hpmlsNkef zxTzu(Bh|6$0@8f3l~z9(mhQ^AZ@}H7I9%b_naPn5<^LMf8NMjquc!_mt*H54&&TU8 z?yPdFd7lZLU^)9{rPZHpFEK_$J;69diIs0Jf`oN<+aN|QTm0c|CO7MwjLN${%T;ha zz_co-C2V+9>DMrwhD*8F+2uW(8dLbv`)L`@DosQ2DCe)?v!@`b|vulGoPiDd`vie1@Xq;^h z*VdUnj;_(mOnZc$WKSY%sKdXOfIMIA4s$U|ZM_Cn$3s{FyjEo{P^DRC@?}Fq*?pgm z3>seoY;^+#M#qj7Z7oQwkTwLp_+X`O30`BNSWk~=t?N&Bo-ZJ(RV6JibTyf<0&K+= zQ;8*N?0w34a?{;6#Mx=cri1{&?7Gw7m4odHHXtPyUN;BmUl36NdV6TT*;nOg;|;FN zqW)4tx}&9rDLq@yJnz#P`|hkL$Cl;5Xam!c4&MB0+ z$nwYBQ%+wqrx3LkuaHt%_dA*A=Cnm1SwrAm%LY2)0KuxWglTxQLr@Z}=A5Sk zdsO1nL2k;R=NSpds%QhoqK0epneME|a^}G9EdlE~XN+5h&~Weue@Aq(knR*E%vKC7@ zCly*dUc`kid=~q|IL4jRbl5+set0dZ@#*n!_b&y4ntivzUL~`<{?1O5i=~^mtc{7G zw0-Ftw($)OA7hQmkRIrbuuw9{1>7`9RiEN&!4DlmCvZKidd+Vd0~-Pa247x<3@H}P z=yp@Cex$T&Z9O(*(DK!vL0?=}rR)~gA8UK}A6oOJ>naIo0`Sc)93f5_t6IXp;vC3V zgaCkUzJ@Q;Fdtpl27V}Y)K-*nrBUM~CXCjiR~Y(0tuUHm$aNbhz%q@V7c#Wj+2}qT zfSl{@2JC!d{Gqn@(uqUrUWg@laN3wCLGirUBZYq#A3w()ajaPC98&kI0_ozoma{SL z!Y=Rg3wqYo#AxbSzT2icb1%y!{dA@#hY!}dWARz>rb%6a>y;-uH{0X`4XfJ~USA)> z^e=fR(JwnFa`GeQCtnGkT>QGsfxgL~NeaXYzvce&BQ3xgR({0dU?cY%TtT_a6h{%V ztfMp6Om}i5&q&bLT>Q|NbflB-I}5C`i!&pJI9%X4d3Wrg81+=E_fFHUE13O=)KrRA zf|n)s%tqN*JWgX{{8-CyB#Bz+YwA$b*vVJY!$@DA`wp>GqAOs#Zz+B2=GYb3YnkzM zXNUSC0ydAn^TD9jNh(O23mIwx?e7-7AtX^d3s*7D zlC8GCO06|2OV>JMRNZF3T3W&zUCzo@lcNlcS1(y&wb|~y+>Wd?9<*1_t{9$uT4_(_ z+b^+^)6cW{1+<19L>p~!QdA|Et}8p6(}|n~_X3}1SeuCV`iGq!xE()om0^#T&~J#Z z4{OfajHX$)s9CY37kfrx>ZtnIZS4`R_`>97aD%*ZA*RSBS1I94MJB#e#W?rWhi0=R zr`3y4vAt5dfj*McZ*&(&_1BNq8-9Ku!*%1=Z;m9}8%e+>uqaL@=xbIY*3)Ir=K+Y@ zs|Ds?13I5+nD2(p$6oBaVU2lnZE^JAhH|cnJIB35R)&p@TJ}En@F%g)jv!Qqo2yq05nq`XneXg~Tpzwc-w`6b|7$h24jw^1f zJl_2;fy!?tTu1J`#{pSXVkjPx?jOP`yt_B`ru1-xKokXI?BMNxC>`)_$K5a(`TuQh zdPzXZ13Vv27m~=nz74?sj#36=+1hrQvUCC0e%x<^#EQ*Uo-GB(y$I>)5AnOAVYxD$ zCq_g_t%JvxYw1kj;SVsvV9T%5lMUuHu{#+*ISXxm9xlmViQY0y z)CJs|6>ERFZpIKAuF~0vp+#-&Y7bgj!N1_(vpJ-`D$c9<4Rc z{HEF8j~;#+zq0F3WsE`fN|Y}IhG5;z2pU;GnoLlbk?|1DQqtqpe8im%3M!dYt`5uB z0n&*{Ev|RKMr>ivF8sn3)F_{XXYLdkzq=7QeEGEhuM)9^|FDs;W_7iD%ug>mL#UiB zi!Y*C7`^i4Lm&;U=wLF)wu4`=Cg~#2C$Ky#4%i_Y>fhiq_QAZ3xE1FnE_xmg}`F zi;JAP70yn1s!$6MN!IyiThAbBcUw_)GQSM>W&*ya@2+Q)$mRly=Y4_h2m!_xJa zwTC`$J8+AQF9ZfVWpn`6C<9%=9o=-Q+dWciM3%9&JM9fRH#ZS@kSWrF`%9se)4?!Z z2HRUv`(}nMDb_}gF4BPH_r1?d+0RDGpXVLj?S7{BDAuMe?`SBzj5kUL@ftzF(|r|dL~{^xG7`fEPDNtxrEN!<;d_w7q-O1*>l4X>It{P8 zMTS`6vVFyZi1^3N!KpV`@gV(e^@g(euObb)3B0~EVgc-1QR+|fkEf&;daW|^^NDI> zM&xJ-Y|KpYR7et{Q$5C6L$r0vhg&62bKOmat1}NX&ox8|W|8fI>!g3?+HEgfP}IjY zLZ)POCgroBiYo^TL&;rKvA{5DP};+W+IRXj`&st5o@Dt^kG`Er;5@D9N^{9o5g0-h zlG8+G+aovEk|Sg~us%v9Y#HZlcWxE%BdB;k9FZu!vxbP-7ZMZ#jU}Ux8Q_XBFqysc zfzRIKtY;!UU^cygS9+L=al4B%@%wN0?fO=d0kHgXp@7P(gCNc7LDK@*R!$fFI(4v~UVIwBdlQXL(Jj*O3BS08`WlxqL>7#K8>@o*Ct; zPR1An3|VN&Oje7&nJS&jWp)|}==i9V@V%q2lE-UCqNS*OqI1hgYU5ON<+ z=;C(*JXZb$Z|kwm+4xO6N8C@jB}XRKvLijuaAI6NC{4RN+|nbSL~Aoo(LX9(O|v6K zxod!N{EI@=7PZ*=HFM_?t^%F&pew+f@LTpXLJo?htLyaE41eZy;YWJ>Ln6N(Kv zLV*Dm;Qev-&*Cpet2#XfeeO4J^d<@%eOJr$KFK5FkWkE>=q3eUb*tLHyPhemkl-1z zNN7kUt%b~jM>1h-OEnHlnbC1YHQiNL-vn0ar_fp!31(aYuYCb2r2;&UeCZCI-u;k& zT!G2xs7zDIu;`3Y(DU60iAN;*9ieSIPpGNGOA!$StM%>vojs1cP3xzW%VklC^>03X zj4megf#Z?$B%0|+jG>|-p`3t8#?#=}NDsf=z4q>OJxI}C!gSBx z=dLon$UE~_AP5@DRw~WZKg)NdQca^WdDbQCsIigzC3*6VH`{|sW^!iQa|;69Wy5m5 zKk&U0q^|nm$}UC-6y+dE)fs)4-i(#Y(bM+gxo7CKd9PBWT5#zG=j@SHz`BYYJTwya z7W2iGs{3cA`b9H!v}qQUz=-(B)U@tq_W)A$d(w&)9q0ltp%+8^7W26i$fsvP5LqSA{-zzV8G%JGwCNQ<%8$VZ{nx-^e&B0j5M%KA z8#hLUUr7nSFn}Py*_-d<0#BxjJOeaFhGQ`6BsYird3)~j;C!->6gk3rapnr54Y!Y7 zp($)@XywrbRE6}1aoDc1EO(iSQ9V&2gQZ3HRd1yA#k{?8SeQG!r;n(&mdP&N^>i>P z9zV#Ny5@dC{~e=rqqqhkhbM4JmXql#Q9Mn7W z5{f$v#S1-ZvV}l>fDmXHiV#F`kv7y;uAP+X)lGLXXQEt&mT6!7pJUxPL=9e zg(#wg#m_?|kK)9czsjcJOYi5MMNc2+Kf(7OV`ay;S4w@~+UZ}&=g`YWb;a=+y3qdC zz4a@tSL$VZQhW4%&BT*&g%FG=&!=UJraj56STFTGZA;Yta`OFeqp|0pkfCmI z4emEW0X9~RqU0@qeg5G}ESIJ+Y6=nFHr!!PaZrNf%u+I%)rdKoe!-?(xyz8E{<`Xb zc3PP5=7+}Z%Q`%>oZ{-t&WK1AN_l&v%x>j%IV-~o?Fnv(NOhvcM4SZGX zq|b|<`5ar;_lxe6q0!2+opQx-9XrKaq{T%II|X=}w83yDV*hMCR*nHWq29+M!mj`L z2Z}*F&4b%+?MP9B!4d_cA%M~k%L$a8Cj-4m%3axU{E`uMrV!mi9IhC+D14VMU`q#t z?v!n>kT*THD=dUPq%p+$lGPYEz3Gkdr}aH=A`;t%JYQ`Q4e1TBpZ+>I zMxU?u;Af{r0X=UJ;|HPjETM~YnV}YIq*PSmsQ>b9&(mTBl^HAK$7Hj8L<`tpqj|Hh z#nz>C@wvp;{_5|pbwRVEi&pY2zserbE;*bHZo5zDl`rBW60+KX%`T8X{%2L(4SYf& zvDf{nW*mlxR8tJ)4WB&w*S|@a574j|XVSZyYo84#=oV^9k1a1qD}E(ft~)FD^JS}E zX|wbvR|rVowbU8em1e311uwx&P1f9fxH~WIN)ao#Xf<~wojM@6#K?WOfcf4W zhI@6>t=iHBVK!6)SRK#$uHbPooETC1x5Q-H`?AK3=4^Gg*RMIgRhRgZv&7sKR!8b*UUmIjB+GXF)79EQ&CaCz zyFY0=e*SZ=z3ltd`7>H+1$NC0K!5Bq=H+R{0?N1tZVrg`)5Xn9HHj)3D>jIL+i2(n}#PE=l9WVvViOM6Z&JxpdyPOw9bLRIrc+L z1sSh|Dae(^vJc3S@p%)sl@c`J5Kp2O)2%9n-grv7Olmo+fj|85!@`T7{)ncZwywB^ z@FMWJG)*C^SWt&rCq+yfO!Yw)U{Y1F4E6H@~kb` zQ3f&a@Ip1ib+k&(mF8n-<_^eJb;v)~I<<&658{-W7v6*LQD>4p{xMa-wJ#MD1oO?i zlv$oHm>ejnrWV#$<5zXYX>grQGX_0JmKQHccP<)gr1}?cs^u8sdxw`*ou;7xW{TbP z?30wY3_m=P13p;JGm6X9&zw;d8F=vd5Nl-o)6iK5GTN$CouWQ>+@b%QVB`W7KvhYX@y)A0%AW898QRqlxW-9y3 z*mdK*t|cnj%MGpd-LF(w@ECV*Y-KNH{Wx;`+NBH0R6XLt)ETLe&<9r}FfU z7>x>uMe0$=^;E{Gj487Vw~VBz;|}NjL&?wgBI*6<_eplkR@zC&xGgS|^l?l0Ox*RXcj2jwEz0GPu1xX|-59vJlA>dCu6&)g^yFQkm0` zZHM}pTrwsS@UAO9>*YwL*&V46H4Vk$EXHm|p}MMlQq&TyE(?YKlS4O;?-AgPp@A;l zt%U{0D2-$*>zMi}QN1as>T+@HN%kU6{XbbplX)V^sBg(GoYKAi{oEcHp&G6cWBn9x zIJM1wo|AlRMSJIdw82-ixRkx3O+QTJn|$<{(xixE@6Q<<0zH~`8QmBf_f=w(A_S`(;2kTY_AEj{ubg+7AKwYL0NCk&d1@Fa1*IBD8G&7mWE_2w;m*B! zwRU#l=$jh7tW9z{luBYCl~1MvUK<$|t*C~YsBO?1eB;H(M@E?SXBl^){XP0ksQIKQv^&SxtaqTS)=q#X zgm&<1eK%bOZIRjlb!Yvm=U|5OUgzsRrEme$q5vQLs}n0)Bag>k8PRy>^Y+klmvc8s zk_!vZ=wmIjeeaU#qZMfcTt;bIft_Ne+$oSo4AeZ~`BLa@Jug~gn!;MKR(qMXJiMh9 zSYR~W&A0CJ9Gpko{M)+KF(8?WUKF!43&trAdU z>3yH`=aixk<;QjasDL)d!%ZcO(u7Ne0a%Y+$&&UPdr81gjpU_4WP<~h-|3tFYr!>k zc=2kHD4ZuNbm{T_llYBX|L%NVAxD*pE67-aOnOA8BJvY8&9>B z-%&J+cLIg_!)qi0s4lA4&wezvrNH$j%EaP26}4Q4a(O#{`V7PlL~-sHO_dc^IOrwi z{BiC_lx2>Lo~Kh=)zA88$j8D+L!sBs1$4g64vz-zy(9 zo&=av3T~I2Dtz=bs_2!p#JJb^d%KV!G1B33Zo{r?alMJN9g+y&%~NCK%e3b|=0YO^ z_`i%xXlch%lfJc2V_)Y47&Hv3(bJT3h4QEgdYFG+Z_j4RxO!MYc-u3(TZ$(iZ0a8( zbR2V@8;S7xAW2k?e7h;tvg1#8mD|0MgtmR|`?R&^T+6k41 z%!p4vB9kGN(O#yf@f>5Gg|NeNj(3|L_gs)-EaA9xIsYlPk`t%r!U6bTNfn)XO%u3g zD{UMZMlpK<8=zK}>m3-y%wJY^4Jicg6shPMCV|7vlbp+G=AgRqT1?Hq?t@Ys9U zgt~}m+3D29yH)383?;N76Go9y9%C$D?~4Y}yz1w$-we8#I{$+&OY_2G@L=1}Y}a*w zp{(~N_Np7*bM7Tt7=!Yu@J9oN_BymxfAE}SM`1Qx48t;ajLH#9jk9JA>6FPw zm&yX)(uC-3uVjuiF)Yn>&T)dHmA-TZ#=U1lmPO)97j^=hR2|E{99gV|e|!yTXr0Qy z6KkYzXFSUs7yyZCSwgh~U0;@XDo1SE9Q(p9&>#bW?jVfBA8kN?r$aNwcxTv43PRt>%F%4pZ_BkCRq1~FfseVHer-ZE$KwftlCm_acUr2hFB z8f0TjugX0>&Q=!4R+wXF51UuL0GISF;x8Ach1A;Rte8JcWP1jCI7Z+rWv-vr2W5C^ zu0iHi)9iz9R9l2HKkNb@tEemH%&*At7%yF@lW3LqPv+sL?{OWvYJ3iRB{{)wuEpqq zDLpK02Jcd@S3a~|*Jd>P3Y3%aM8(6_(}}V^CxViZ3D&P^A2E;X+;QVDHE;eNY?qEc zg)A$iJ$7F1p+te9q|K>4>l@gWbWP0~%M@OE3;j#|-t{3JV>(BfLH{d<_4i*><8mnW zF@U4r9wvNfS*C$rMVFmRDITR|g*WH4t1KijbuCh4>oLX$R@XzCuet5?)mAZX*u~>P zRFlONDyea_d{#t{;Biz{S*DXlRqzIA=&A;!xNYCZ^(b9i4`-Ip7T5QaZlV;|e6h<} z3Y7j1PRiPu`%*&kzGWcAu;4(C1Q)TcYDc|F?enHBd=e3tQ6I@%#~eH5-7@J2Qu3^E zVoDz2$q}%>8`r&t;P_TCiA71GSJ;QqB8)MIWS=BtOJp+N88|ps6d(VYvtt$Nshm74 zA^f>vZ#aVHYZ-jO;Zqgr2c8<3l0$20Fm&zc+2r0^)Js`fzAeIFVOee7`h$=V)|WJw za}f8*;(9(6_|3lU%XMnEd~;8Gnk9+0%DVpKZ|f9M;?izOh*)CDr(?V34RxxM*$o@< zxdec{R&nFj5=oho5dhsF$rzHIcdX}G>rrg^60-Uuyi>zjW8B6JuqM#EwqmqeueX)~ z!&mGG;qqr`Kbjd_&h4x|SBHKlJce^^85;08Fp7l8b1$VQI`?|YdCbnqzYVFB8L+nq zuHEt1P~AO?m=G)HBBY%Z0gfM9!P+Y_gm$mO*GQ?$`hWrv{>I67EKJgBYzz3bojbgz zr)JlT8l*bL%bV|$wxR!W>U&$-k^7l0P3WG+$2ezI=8AD^5(e^!jRdsqO%Ol4RxqfA z44ui@)OzY>MD+P7W_UA9a}8G&ZI$?t83DcA9FS;cM&$1Jldd!Zk<*q=X{y`@Os0>z zV(av5PNQMhx&2Z@9=@apli<=%cBoq~T^Owyyj)R~tkmxXbba|@0Zqup!vYGcW z;{gFmlA)bT=u%-m1i7|sAX$D3v}Pdd!T2GB6CV7_?yOTE*ZvVJ8+0J};89XD*Eusp zSIJKLqB-_Xi(s4C;T5H`OlARw=C^Go`Lh#}Q+&@I+vr5T*n3flL2U%3|8-6M{p_Gh zA$qglH(efyrgwi&{?FHVuOHmB3qQ#JpV2KH&Lh8H50xI_zqPTFdGRUO%=q%&0`bHL z-j>h5!;KZNAg!6;&adDQ6yQ_=$P)#uzYx+AC7R{0OWwWSOpxmA0JgT3+cogYWjw+a zb^_kbyY%v0R*AMv4H38Sr6t?AcX!LfR>m(dhzk8)7-m1w?^s0WosAXYGb4>vh2XD( zWPDPOjijy^{L$NED~l%+rxGeQp26uQ?Pt4ZLU9Nym2@uGy479LAl~ddEXBFTdkl~R%)aW8 zD>S6(^sS7m1Lp+Q>0@YP_#zm-M)7su>Tws5F@+q_=?#egnuX_6yDD-g^rgvkxxe$X zL3$j6HonrOjb_`W$WkPTalf@c=(cF5`Lf$k^Os-eCmum;Pz|>FxUZ|aR5VL~t?Ylb zcb-8_wp|{#^B^b+(xi$aC;x_1_%K{4J{CwAR=PuJyJu5 zP^1$nA@mjqg!%@aop&F1WQfAPj zVg(;@dg$EK?^4~PIToVP;xmuXW5L!}+r}H?8S1H{swmMK(nP233p;YG^5aK!P!7e> zWI_ET`HOVQoDmeABxvRLkGRdU)agnN=?NEb?C1?0XX!5sYv?JTa-|-Tn4fR@h%$63 zN+%4NNxm1PSqZ}^x3^sMR^miPK$e9*qU>`lq}zrU3h~r}Ga?)Sik|8MyY?HjK2f6P z5p>cHm%H~}4Kp2r@XCe-7xu~oFP3}_gYimTSCa112Pp)rg=x&;4RkdpKqykn&sd{= zvKR)2YCzZ9w!AhSSXZ599$uwqy8FY`;^Eh_ zbQ!-}EHhW@R?L)90OL{H_gzsIG52*zj~etkIH-19la>Y(RV2(FD)Ln_asN+$@01?j zxdqOZ>vq}-rC-+NcCwswuKSOO5SEG8&DcrZ@7N&o`S%15*W&r?8mmJu)9=;_ zfQl}~?TYkIXI%iJj=yvkm1Qfq&nc_d>{59Kh&as$`{UDHr@3uKH$OruM51`frmS$A z)r5ViWaN5q$cdC+=ZF?j6PD#FG(uvL*w6W+nE2)c1W`v`U24ws^$WyVyN;AaSiDi_ z+1JA?7B8nIhIA$2XcvU#Jqf~ooFsNEhgYW zs6&NhJF#VtcIRA4_I5xAB1B?{(Iki*p*~!c;BGSxb?{%>)8~){`MORqaMEFvG#N7* z6e;#t@5Q*H+(^;5=mT*R$Y`4!qA6s?AW_w52W@U4^-CQn zdH{P~cCov+e2dYim#zCHijlC0v4P^a~mVVXfQY6ouhcry4ge$qQxrUaujfRcmN-f|HJ z`8S_W`Y*L)lHRErJ+4cRt`IDxJ3Y`5?k=aiI7ILsETm3cMoZM|)Etlxys*Y5{pU+F z%&GGR_0qz1r8YJd2Yk|5W#}Z58QF+kZ&^)CnJ1{k&azg6C~^skX_X1kPBAj;n(bmj zTbKv^b4@>A*Pcqaz zd~GyWu=-YW2Qy#waK#>@?AOsji+B}P$VF%WUikXvbc$Pe<{H-VLR=+U9hi=OK2)`d zEJ7(vk99^Y7tJ1gT9M>Ax^Uxx2eCb97zM)nr`qLk^f%$gQ-8L!zV8)GtBq$eDe7nX zQ}YAF@$<>3&DI7r0n7B5fLjZfK(6!I&k?~c8ysEe!yUr&Zg157%T8S z{C&>W4F$AI@fzf;6IM@huBCmtaIB;QRU7~@h#r5M^6G60+E#2?CTmR|#mco?FgoHL zKD6aM8b>5W@>D+b$ayKA;Zt&l{l69?An5129wF?o!zE7dY-)&~uG|qR56;w6mfIU!{ zokgyXIgg;M3agswoVp^njQm9z1i)ELbWan_tj&9OMA!os_Lbj{xB#+LyFZkGq(yfk zN??x(8d^5~3Z?Y9OH1)Wf#Nh`3Lvuj%sHpjLZItKA)d}NAn5LM&Jl0ECi!Wdk58Ki z%y_Dwq-;)pmf;A4Ex+o_?A0rED!A6<4kBurw&rbnEFdZ0yc}(iD$lOS&V;Vkl6?oZ zuQoK5+FkQ6*k76C^qps(30-P_oyaiAbh-9)%TRd0v`yPX`39Am5cD;-H!Yic)_h3} zJ~C4jufR0BUkQ zNt5Z*yUKUHId=ruNqmmZlqVj-suA5FiOAK{qL z#8i{(URN%8Miq}pWI4&>3iTDS!qC~5Vlisv#>+yc|1)GrnXuJeq$#&RjnIUe{r_e*kB+CVzQoERMKP zK3bUec5RAz9p@Ff+?ca^{@W0Acv8#aqt`XJfuGk62^~}IWeY>!m=Rm<`>bno@4xD8 zf4RElnEb2C0ZLolidgk%p7BgxUV4_Br|MSX8=sJonNqU# zLM1dz6YwE4&jzbMvXw`#gkwDH3qU^1K9A|3zmAHYspoo7ok$JceYM*+Cu8I$bw+Uy znDU9rk8gPQd|D4e>-xUhoruntu!~LURw_|)KDR`5m(X0p2)6=|GRRq>&026`V8uAUa75tC((P#<}8C&?_DzgWphc*L`wcTciHdx(W7 zIcyWTy&<_ui=2s3Ya|A#^B;zwBw+^F0q2_YIe^4vPB(vpobiN2|GpGRpQ_dpMEt6N zqvq6`khDbizEb_7Y0td15bq&Rx{^p9houT>j8Er{+bFK=U{II56P&BJV@jw@mTODG z=c8fhC{=)C8Z?&`y|lX4ea$!UFNNZBl& zDwjhVzOiMQD`0Q+x(W>;gV)l_O3In{auf#kyl7CZ&hq{MpYiA}cZ$xUNel5xeyix9 z!-rZcV=zl}dE^B?%_#`5vP?UJQZCi$ZnayM%0Sy7n#+vH>^~n$;*38zQ#XxtQ#_d%f z@s0VOCah;oAyE9=ptsS^&2t`rR!G|Wx288{ni7OKIZ=j1^r5xZd=b$u)_0?BnD__$ zz_9n0-6@-%!?Y0f3P|oAe9PV>ayg`ZBh<6wPZ<%C5K;hKi+#J;z3LT+wqrLq=%5d3 z3W`#YKSeBHVA~2xw{D+(NxSpmjqe|>6&Gf^<9;Zz_io$M@9Gjy6i_u6C%N_Py{pSG z2pZHNNg!>n4~#wVUfWR@_X{FzIhSGHPB4cc3ZhgXEHRM&`wM1 z`**769_b7fVCB#KKKH$#fsyNd_P-5LfAk+oue#p!hOq1uGyAiq{+%Ot;!I7@kx+@+ zCI9!4pp=12`)Q&(!t-QNMxnEwvdXDguP?w4Mzp*v^w~So!=R?!`O)>0K5Q2_|6)=t zQspJq0%fr_iuy%;7$$B1g@c1VLs$2MCoZQ|Iq35JW`xCVkX9_W4tNt91r9E~b550f zPzT<*;Jm4)saE>T8dC241?yFei!;8#vT>bh;_01@0#-Cz6f(TgY_Ts~#@|16Kp~ue z^Rj8m z(nX+{oo!t}kD~GkUbe)Cgr))1FS*s6AwgNHX!|PqlGImlFFKw}R?q;@E=6-JPyHvj z>Cgkm2%gxyT;Rs~_H>Wfp0iR!??B#&w3iM=HR)$+eFX92 z6B_r=W2@8ohjF4d>9A=X&kh9)cbdjdLmaDIn6bP{V>Ty~Ft|mvl9IDE6;`l6R|Xio ztyQayucckN40HahioWFdihDd1?N04zmmPF!M#^>H*coSOnLjGSmIuS}>8EM_Iw*0b z>Z8ii03ip#>HNYC&zZPcU2E8Z%S{j1hcul9>9YSk*&s__^p>dSX|A-pYQ?nR-^6{} zdpl5KV^^2ZyqMjXoc;-&C#3`K#%0^7{vtz6?&(3htSpSLNZxDLT7P@@%oqrny?sRq zGkMn~W<;*YU1bJ>pyimWQy-(HbG!uWkB3`ECUu1;k9)2ZgWcqO?e4hi^>i}Lt%j&~ z-OS;wc`Ut?wPM1)KS32SpZLQl_9!!&51ny*3c`e>nG?5!S9f|JlwJyp4d=q!qTd`WM+j$7`hMbFuee+DF*pFD77@}2sFt$YCajH@CHC=(9Vcwm&0}%z z368JH5PqqXDtM-@3rXd4!4#M9!UlG|$#m!Rscrdf3nevpFd;p)&}$+|Iat<3B#BFA zObsF=d2=xhTL;+hiP#&AyB$@e?umI;^s(}KUl|JnG~?^$6_x4^M%y-cPEyl=w8B@4 z9;eF1TrWGK`UGn=8+8#=FQ_4V^>Q7(R2%+yYdKhgC7jG3IzPx{yK%SWOS!~C^!FkWU|1fjADU8L<@_&3}zIY zG)09@9QkpMh@nB3CC?v3rt>d{CZX7~!d~p_n;A!Z*RT>1wBRVw2ELlbirx%C+#T<0 z+TeK>`6ChR{i?*Ce1zyA= zeRmSk*eLs{l%*C*3z05a$CKfByL*A8YT>8oivv*rgCZtRe~DA&-z@`r`~QH#F&`VZ z8Z4R^Z>K97u69ArvmbF8xBqgF1sxL#YZ6ZQ7PPO>SC>EjymIL-K*p?Q^JPtMPc;)M z&!b-C`1)i2=4p>7xOIbrI44&4b2JuW(`A`4k2<56ftLGOUjr*_@!X#^_RVyXJbbvk z?)4Gk*jfdri}PfMxA~4ru^j`054n$ygn{x@IOXJ)MqMDo?;!3Um}7XuORZeKS*GXz z*?XBPAl^>8820z0X5LlbBc&4;mU{E?00Hvs5~ zQ`tuxZ#d_F`EksqLSY9i%klLYMsxW6HG_i?dH*($i4PzjLtGbh+al-(Agn2dCS6#! zE}4g{+zdjzuE&}6Z`rUqb(9A*FTU7Oe8wN6pU{PkxcPL0wLjbCC~HJkDn524d9w|y zB~x`nzq3sLLJulx7j?%GR@z9hE=hZ6_q8jc26bbI7dnK5mCw_a!i0S%uZWa@jbE_s zgS6kN%vwjaoEEit`)-jjDsK*d{V7RUw`dhx` possibleNamespaces = new List(); + +public Dictionary InterfaceUsedDirectUnits { get; } = new Dictionary(); + +public unit_node_list InterfaceUsedUnits { get; } = new unit_node_list(); + +public Dictionary ImplementationUsedDirectUnits { get; } = new Dictionary(); + +public unit_node_list ImplementationUsedUnits { get; } = new unit_node_list(); +... +} +``` + + \ No newline at end of file diff --git a/documentation/Intellisense/Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Intellisense.md b/documentation/Intellisense/Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Intellisense.md new file mode 100644 index 000000000..e81a9f53f --- /dev/null +++ b/documentation/Intellisense/Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Intellisense.md @@ -0,0 +1,41 @@ +#### Подсказка ΠΏΡ€ΠΈ Π½Π°Π²Π΅Π΄Π΅Π½ΠΈΠΈ ΠΌΡ‹ΡˆΠΈ +На Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ рСализуСтся Π² классС `TooltipServiceManager`. Основная Π»ΠΎΠ³ΠΈΠΊΠ° Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ `GetPopupHintText`. Π’Π½Π°Ρ‡Π°Π»Π΅ вызываСтся `FindExpressionFromAnyPosition` для получСния Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ `expression` Π² Π²ΠΈΠ΄Π΅ строки. +Π—Π°Ρ‚Π΅ΠΌ вызываСтся Π½ΡƒΠΆΠ½Ρ‹ΠΉ парсСр для получСния Π΄Π΅Ρ€Π΅Π²Π° выраТСния (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‡Π°ΡΡ‚ΡŒ Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΈ, связанная с Π½Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΠΎΠΌ parts). Если Π½Π΅ получаСтся Ρ€Π°ΡΠΏΠ°Ρ€ΡΠΈΡ‚ΡŒ, Ρ‚ΠΎ дСлаСтся ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° с Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ нСоднозначности, связанной с ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ (&<). +ПослС этого Π΅Ρ‰Π΅ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° с ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ разымСнования, ΠΏΠΎΠΊΠ° нСпонятно Π·Π°Ρ‡Π΅ΠΌ это. +Π•Ρ‰Π΅ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ разымСнования Π±Ρ‹Π»ΠΎ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ `GetDefinitionPosition` ΠΈΠ· `CodeCompletionActions`. +Π—Π°Ρ‚Π΅ΠΌ Π΅Ρ‰Π΅ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° с Ρ‚Π΅ΠΌ ΠΆΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π±Π΅Π· скобочСк. ΠŸΡ€ΠΈ этом, Ссли Π±Π΅Π· скобочСк Ρ€Π°ΡΠΏΠ°Ρ€ΡΠΈΡ‚ΡŒ Π½Π΅ удаСтся, Ρ‚ΠΎ Π²Π½Π΅ зависимости ΠΎΡ‚ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΡΡ‚ΠΈ парсинга ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ `expression` возвращаСтся `null`. +Π’ ΠΊΠΎΠ½Ρ†Π΅ провСряСтся Π±Ρ‹Π» Π»ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ΅Π½ ΠΎΠ±Ρ…ΠΎΠ΄ Π΄Π΅Ρ€Π΅Π²Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²ΠΈΠ·ΠΈΡ‚ΠΎΡ€ΠΎΠΌ (`DomSyntaxTreeVisitor`). Если это Ρ‚Π°ΠΊ, Ρ‚ΠΎ Π² словарС ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π΅ΠΌΡƒ `DomConverter`. +Π’ΠΎΠ³Π΄Π° ΠΌΡ‹ смоТСм Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ `GetDescription` ΠΈΠ· этого класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выдаст Π½Π°ΠΌ описаниС выраТСния. + +#### Подсказка ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ +На Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ клавиш (скобки, ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½ΠΎΠΉ скобки ΠΈΠ»ΠΈ запятой) Ρ€Π΅Π°Π³ΠΈΡ€ΡƒΠ΅Ρ‚ `TextAreaKeyEventHandler` ΠΈΠ· класса `CodeCompletionKeyHandler`. Π’Π°ΠΌ создаСтся экзСмпляр `DefaultInsightDataProvider`, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ загруТаСтся Π² стСк ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ². Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ для подсказки формируСтся Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ `SetupDataProvider` инсайт-ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π°. ПослС выяснСния ΠΊΠΎΠ΄Π° Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ подстрокС вызываСтся `FindExpressionForMethod` ΠΈΠ· `LanguageInformation`. +Π”Π°Π»Π΅Π΅ дСлаСтся ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° парсинга стандартным парсСром языка ΠΈ Π½Π°ΠΊΠΎΠ½Π΅Ρ† ΠΈΠ· `DomConverter` вызываСтся `GetNameOfMethod`, Π»ΠΈΠ±ΠΎ `GetIndex` Π² зависимости ΠΎΡ‚ Π½Π°ΠΆΠ°Ρ‚ΠΎΠΉ клавиши. + +#### Подсказка ΠΏΠΎ Π½Π°ΠΆΠ°Ρ‚ΠΈΡŽ клавиш (ΠΏΠΎ Ρ‚ΠΎΡ‡ΠΊΠ΅ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ±Π΅Π»Ρƒ) +`CodeCompletionKeyHandler` Ρ€Π΅Π°Π³ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π° Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° `ShowCompletionWindow`. Π’ Π½Π΅ΠΌ Π΅ΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ `GenerateCompletionDataWithKeyword` ΠΈΠ· класса `CodeCompletionProvider`. Π’ этом ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ выдСляСтся нуТная подстрока ΠΈ Π΅ΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ `GetCompletionData`. +**Π›ΠΎΠ³ΠΈΠΊΠ° этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ:** +1) Ссли Π±Ρ‹Π» Π½Π°ΠΆΠ°Ρ‚ `ctrl + space` (`shift + space` Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² это понятиС Ρ‚ΠΎΠΆΠ΅) +ВызываСтся `FindPattern` ΠΈΠ· `LanguageInformation` для получСния "Ρ‚ΠΎΠΊΠ΅Π½Π°" Π΄ΠΎ ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΠΈ. Если Π² процСссС встрСтится Ρ‚ΠΎΡ‡ΠΊΠ°, Ρ‚ΠΎ вызываСтся `FindExpression`. НиТС Ссли pattern пустой, Ρ‚ΠΎ Π² ΠΈΡ‚ΠΎΠ³ΠΎΠ²Ρ‹ΠΉ список `ICompletionData` Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова языка. +2) Ссли Π±Ρ‹Π» Π½Π°ΠΆΠ°Ρ‚ ΠΏΡ€ΠΎΠ±Π΅Π» послС `new` +ВызываСтся SkipNew для пропуска `new` ΠΈ поиска expression ΠΏΠ΅Ρ€Π΅Π΄ Π½ΠΈΠΌ. +3) ΠΈΠ½Π°Ρ‡Π΅, Ссли Π½Π΅ Π±Ρ‹Π»ΠΎ Π²Π²Π΅Π΄Π΅Π½ΠΎ `uses` +вызываСтся `FindExpression` (c Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ) + +Π”Π°Π»Π΅Π΅, Ссли [**Π½Π΅** `ctrl + space` ΠΈΠ»ΠΈ Π±Ρ‹Π»Π° Π½Π°ΠΉΠ΄Π΅Π½Π° Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ° ΠΈΠΌΠ΅Π½ Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ] ΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ пусто, Ρ‚ΠΎ дСлаСтся ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ `GetTypeAsExpression` стандартного парсСра. Если это Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π°Π»ΠΎ Π΄Π°Π»Π΅Π΅ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π²Ρ‹Π·ΠΎΠ²Π° `GetExpression`. Если снова Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΠΈ ΠΌΡ‹ Π½Π΅ Π² случаС ΠΏΡ€ΠΎΠ±Π΅Π»Π° послС `new`, Ρ‚ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚. + +Π”Π°Π»Π΅Π΅, Ссли Intellisense ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π½Π΅ обошла Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, Ρ‚ΠΎ для случая `uses` ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ SymInfo стандартных ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ (взятых ΠΈΠ· DomConverter). Если ΠΆΠ΅ Ρƒ нас Π½Π΅ `uses`случай ΠΈ Π½Π΅ случай ctrl + space, ΠΌΡ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ пустой массив. + +Π˜Π½Π°Ρ‡Π΅, Ссли Ρƒ нас Π΅ΡΡ‚ΡŒ `DomConverter`: + - Если ΠΏΡ€ΠΎΠ±Π΅Π» послС `new`, Ρ‚ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ `GetTypes` + - Π˜Π½Π°Ρ‡Π΅, Ссли `uses`, Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ со списком стандартных ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ + ΠΏΡ€-Π² ΠΈΠΌΠ΅Π½ Π² случаС сСмантичСского Intellisense. + - Π˜Π½Π°Ρ‡Π΅, Ссли Π½Π΅ `ctrl + space` (случай, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ поставили Ρ‚ΠΎΡ‡ΠΊΡƒ), Ρ‚ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ `GetName` для получСния всСх Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½ послС Ρ‚ΠΎΡ‡ΠΊΠΈ + - Π˜Π½Π°Ρ‡Π΅, Ссли `ctrl + space`, Ρ‚ΠΎ Π»ΠΈΠ±ΠΎ ΠΈΡ‰Π΅ΠΌ ΠΈΠΌΠ΅Π½Π° послС Ρ‚ΠΎΡ‡ΠΊΠΈ - `GetName` (Ссли Ρ‚ΠΎΡ‡ΠΊΠ° Π±Ρ‹Π»Π° Ρ€Π°Π½ΡŒΡˆΠ΅), Π»ΠΈΠ±ΠΎ ΠΈΡ‰Π΅ΠΌ имя ΠΏΠΎ Π΅Π³ΠΎ Π½Π°Ρ‡Π°Π»Ρƒ - `GetNameByPattern` + + +> [!NOTE] Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ +>Π’Π°ΠΊΠΆΠ΅ Π½Π° Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ Ρ€Π΅Π°Π³ΠΈΡ€ΡƒΠ΅Ρ‚ Execute ΠΈΠ· CodeCompletionAllNamesAction. key подмСняСтся Π½Π° Π΄ΠΎΠ»Π»Π°Ρ€ Ссли это Π±Ρ‹Π»ΠΎ Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ `ctrl + space` сразу послС Ρ‚ΠΎΡ‡ΠΊΠΈ. + +Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΏΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΌ SymInfo строится Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ список CompletionData (Π±Π΅Π· ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ). + +#### ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ символа +Π’ `CodeCompletionActoins` Π΅ΡΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ класс GotoAction, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ `GoToDefinition`. Π’ этом ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ GetDefinitionPosition, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ (Ρ‚ΠΎΠΆΠ΅ косвСнно) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ `FindExpressionFromAnyPosition` ΠΈΠ· `LanguageInformation` ΠΈ `GetDefinition` ΠΈΠ· `CodeCompletionProvider`. ПослСдний Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ являСтся ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠΎΠΉ Π½Π° `GetDefinition` ΠΈΠ· DomConverter. \ No newline at end of file