pascalabcnet/CodeCompletion/DomSyntaxTreeVisitor.cs
AlexanderZemlyak 0c4c029bef
Исправления в Intellisense SPython + падения компилятора из-за неточности в spython_syntax_tree_visitor (#3333)
* Override get_system_module in SpythonSyntaxTreeVisitor

* Fix Unit and Function Having Same Name Bug

* Add TimeMeasurements Programs

* Swap Visitors for Supporting New Imports

* Fix Function with Named Parameters Substitution

* Add Error for Using Global

* Fix yyloc Bug and Add SyntaxVisiters Errors

* Move List Desugar from Visiter to Parser (temp)

* Move List Generator Desugaring Back to Visitors

* Add Args after Kvarg Error Message

* Fix Parser and Visitors' Errors Messages

* Moved Examples Programs

* Update Name Substitution Logic

* Squashed commit of the following:

commit b68b8da970
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Dec 17 15:52:18 2024 +0300

    Примеры Coords1.pas Coords2.pas.pas

commit 8a9788e6f9
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Dec 17 15:06:57 2024 +0300

    Перенес проверку set array на уровень парсера

    Немного поправил Intellisense по наведению для NewSet

    По точке там что то другое работает

commit 874ddebad3
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Dec 14 21:00:38 2024 +0300

    Поправил грамматику []

    Теперь нельзя в режиме ## использовать атрибуты

    Зато можно [1,2,3].Print

commit 080fb487e1
Merge: a53dcd9ed a484b0e82
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Dec 14 15:25:24 2024 +0300

    Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet

commit a53dcd9ed2
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Dec 14 15:25:16 2024 +0300

    SF Prm Cmb для строк

commit a484b0e82d
Author: Sun Serega <sunserega2@gmail.com>
Date:   Thu Dec 12 13:49:17 2024 +0200

    fix (#3231)

commit 6ef11f249c
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Dec 10 11:05:45 2024 +0300

    3.10.2

commit db9679d89f
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Dec 10 10:59:20 2024 +0300

    Закончил превращение синтаксиса [] по умолчанию в массивы

commit 45fdde24b4
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Sun Dec 8 18:08:00 2024 +0100

    #3229

commit 494b47624d
Merge: 5875b9929 7906d73da
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Sun Dec 8 10:42:07 2024 +0100

    Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet

commit 5875b99296
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Sun Dec 8 10:41:53 2024 +0100

    platformtarget native - .NET 9.0

commit 7906d73da3
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Dec 3 14:25:37 2024 +0300

    Небольшие изменения в реализации операций с множествами

commit 087591c7b6
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Nov 27 11:37:07 2024 +0300

    3.10.1

    Coords - доработки

    Distance, Middle, DrawText с фоном и рамкой. Глобальные переменные настройки

commit d268d4f83b
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Thu Nov 21 22:24:07 2024 +0300

    NSToBytes переделал с исключением

commit 2bacdc8c28
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Nov 20 13:20:33 2024 +0300

    Комментарии к NewSet

commit e917ac8eca
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Nov 20 12:42:15 2024 +0300

    TypeName для set

commit 206289c6a7
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Nov 19 20:23:03 2024 +0300

    Везде заменил _hs на hs в NewSet

    Убрал вызовы методов расширений NewSet в PABCSystem.pas

    Убрал var в operator +

commit d8262078f6
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Nov 19 13:56:47 2024 +0300

    Исправление мелких ошибок NewSet

    Все тесты проходят.

    Проблема, которая остаётся - в режиме ускорения такие программы падают:

    begin
      var s: set of byte;
      Print(s = [1]);
    end.

    Причина - из dll не вызывается конструктор записи без параметров, хотя он определён. В C# вообще у записей не может быть конструктора по умолчанию - наверное потому. Но для NewSet надо бы сделать исключение

commit f8819665ba
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Nov 16 10:56:11 2024 +0300

    NS2

commit 591d9ebe60
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Wed Nov 13 21:34:10 2024 +0100

    fix

commit c6505634f4
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Wed Nov 13 21:12:33 2024 +0100

    fix

commit a6564df23c
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Wed Nov 13 20:52:29 2024 +0100

    fix in new sets

commit 03be5bd931
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Nov 13 22:13:41 2024 +0300

    Переставил operator:= в NewSet

commit 96c68f1666
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Tue Nov 12 21:38:07 2024 +0100

    #3223

commit 82776f3c77
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Nov 9 12:18:19 2024 +0300

    NewSet - много мелких исправлений.

    Все тесты проходят кроме Tests 5 - видимо с pabcrtl.dll

commit fbd63efa89
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Nov 3 16:59:48 2024 +0300

    NewSets
    Некоторые тесты надо исправить

commit 746c4ae2c2
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Thu Oct 31 21:00:42 2024 +0100

    #3221

commit 350d07326d
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Thu Oct 31 18:35:51 2024 +0100

    #3221

commit aae9ab408b
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Thu Oct 31 18:25:06 2024 +0100

    #3221

commit 1e4a811e04
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Wed Oct 30 20:42:59 2024 +0100

    test for #3219

commit d1a1247ecd
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Wed Oct 30 20:24:16 2024 +0100

    #3219

commit 13b3071d80
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Mon Oct 28 22:42:17 2024 +0300

    закомментировал extensions преобразования arr to set. Надеюсь в новой реализации всё исправить

commit 6d5c18f457
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Thu Oct 24 10:17:48 2024 +0300

    SF XLSX.pas

commit 0c773a7ecb
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Oct 16 12:04:33 2024 +0300

    tree.xml с парой новых узлов для Питона

commit 53b3fd0881
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Oct 9 14:09:01 2024 +0300

    Добавил временное преобразование от array of T в set of T

commit 271d5792ce
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Tue Oct 8 10:00:14 2024 +0300

    Documentation (#3211)

    * Add Compiler documentation

    * Add Intellisense documentation

    * Move documentation folder to root directory

commit 79f9ab73a0
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Oct 5 15:33:20 2024 +0300

    PT4_32

commit 0a20c8d32c
Author: Sun Serega <sunserega2@gmail.com>
Date:   Thu Sep 26 09:02:31 2024 +0200

    Add `.DistinctBy` (#3122)

commit 11981dbf47
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Sep 25 11:53:02 2024 +0300

    IndexMinBy, IndexMaxBy
    MinBy, MaxBy - более эффективная реализация
    GraphWPF - SaveToClipboard

commit 3eb1d2bd85
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Sun Sep 22 17:42:09 2024 +0200

    #3197

commit 20edd487e3
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Sun Sep 22 12:39:03 2024 +0200

    #3204

commit 7261231c9c
Merge: 7debbe702 9ab932977
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Sun Sep 22 09:49:58 2024 +0200

    Merge pull request #3207 from AlexanderZemlyak/fix_linux_version

    Fix linux version

commit 9ab9329771
Author: AlexanderZemlyak <zemlyaksanya@mail.ru>
Date:   Sun Sep 22 10:23:18 2024 +0300

    Add new projects in PascalACBNETLinux.sln

commit 7debbe702a
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Sep 21 14:29:38 2024 +0300

    Критическое обновление LightPT

commit 40335b873e
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Fri Sep 20 22:58:46 2024 +0300

    LightPT - OutputListIsClearedFromSpaces := False;
    Coords - DrawLine

commit 078281db17
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Thu Sep 19 22:42:44 2024 +0300

    coords suite

commit 8d51f999a5
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Thu Sep 19 20:28:28 2024 +0300

    Автоклассы - разрешение наследования от классов без полей

    Модуль Coords

commit 8f7e92d418
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Mon Sep 16 08:25:43 2024 +0300

    Turtle переделал на паттерн Команда

commit a6f6d8a90b
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Sep 7 23:11:54 2024 +0300

    Правки рейтинга в TeacherPlugin

commit 2365eb3633
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Sep 7 15:54:15 2024 +0300

    LinkLabel в TeacherControlPlugin

commit 1835b811ef
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Sep 3 23:51:44 2024 +0300

    MathNet Signed

commit b23d6df9e9
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Sep 3 23:16:15 2024 +0300

    MathNet.Numerics.dll

commit 790fba67b8
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Aug 27 17:56:09 2024 +0300

    3.10.0

commit 1ec4204fd2
Author: Sun Serega <sunserega2@gmail.com>
Date:   Mon Aug 26 09:20:27 2024 +0300

    `.Batch` cleanup (#3108)

commit b5e674c311
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Mon Aug 26 09:12:14 2024 +0300

    3_10_0

commit 7face043cf
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Mon Aug 26 09:11:08 2024 +0300

    ToSet

commit e456ad528e
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Aug 24 23:13:57 2024 +0300

    3.9.0.3530

commit 3247469e6d
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Aug 24 22:55:27 2024 +0300

    Добавлен DrawPoints в Turtle

    Исправлена ошибка с отображением подписей в Y-координате

commit 7548142623
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Aug 24 14:27:53 2024 +0300

    1. Глобально.
    SetDecimalSeparator(',')
    SetNumberFormat(DecimalSeparator := ','  и куча других параметров)

    s.ToReal(nfi)
    s.ToReals(nfi)
    StrToReal(nfi)
    StrToFloat(nfi)
    FloatToStr(nfi)

    var nfi := NumberFormat(DecimalSeparator := ',')

    s.ToReal(DecimalSeparator := ',')
    s.ToReals(DecimalSeparator := ',')
    StrToReal(DecimalSeparator := ',')

commit d94885b950
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Aug 24 12:13:09 2024 +0300

    randomElement для строк

    .ToReals - разделителями могут быть пробел табуляция и переход на новую строку

    NumberFormat - функция, возвращающая nfi

commit ae2e26acf8
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Fri Aug 23 19:33:55 2024 +0300

    PT4 - новые dll файлы старых заданий серий A

commit 0f8aa6fa3c
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Aug 18 17:28:05 2024 +0300

    SetOf как основной синоним HSet

commit db4b53be20
Merge: 86852e0a5 b9fd59a84
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Aug 18 16:05:42 2024 +0300

    Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet

commit 86852e0a59
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Aug 18 16:05:14 2024 +0300

    School - ToBase(number: int64

commit b9fd59a840
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Tue Aug 13 15:08:44 2024 +0200

    #2830

commit 4f0b0f8ba0
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Tue Aug 13 14:43:49 2024 +0200

    #3194

commit e3ee0fed4c
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Tue Aug 13 13:49:30 2024 +0200

    #3097

commit d396c4a9fe
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Tue Aug 13 10:40:23 2024 +0200

    #3178

commit 0d846d2335
Merge: e91e35398 a65a86921
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Mon Aug 12 15:24:11 2024 +0200

    Merge pull request #3170 from samuraiGH/ForeachResolver-rework

    Foreach resolver rework

commit a65a869211
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Mon Aug 12 15:50:42 2024 +0300

    increasing pcu file version

commit e91e353984
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Aug 11 15:21:29 2024 +0300

    Обновленный модуль Turtle.pas

commit c18238df39
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Aug 6 20:18:57 2024 +0300

    3.9.0.3523

commit 1da2b524a6
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Aug 6 19:34:10 2024 +0300

    School PrimeDivisors

commit 47c61d8b14
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Fri Aug 2 10:48:07 2024 +0300

    New directive to disable linking pascal standard modules (#3186)

    * Add new 'disable standard units' directive and it's processing

    * Refactor InitializeNewUnit function

    * Improve disable standard units directive checks

    * Add null check in programs.cs to avoid error

    * Rename error related to disable standard units directive

    * Add referencing standard net libraries

    * Add checks for duplicates when injecting references

commit fc3ab96cae
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Fri Aug 2 10:46:40 2024 +0300

    Delete DocumentedUnits option and Exclude HelpBuilder project (#3192)

    * Delete CodeGeneration and PCUGenerate options from CompilerInternalDebug

    Достаточно их аналогов из CompilerOptions.

    * Add recreating CompilerOptions when reloading Compiler

    * Change Rebuild checkbox logic

    * Delete documented units fiels from CompilerInternalDebug

    * Revert "Delete CodeGeneration and PCUGenerate options from CompilerInternalDebug"

    This reverts commit 25e92b22722b7e251ab0156148fdf28ee3175c27.

    * Exclude HelpBuilder

commit 64acde6460
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Jul 31 18:21:04 2024 +0300

    Сделал возможным неявное приведение некоторого типа к array of T (при описании оператора в виде статической функции класса)

    School - IsPrime(n)

commit 3db5709101
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Jul 31 10:56:18 2024 +0300

    ZipCartesianFuncs.pas

commit c4fd47128b
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Jul 30 22:56:03 2024 +0300

    Zip, Cartesian - сделаны внешние функции до 5 параметров, в т.ч. с проекцией
    Zip, Cartesian - методы расширения дополнены чтобы было как во внешних
    Перегенерирована справка

commit 7d66f26d4f
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Mon Jul 1 00:16:43 2024 +0300

    cleanup and more tests

commit 464dc794a8
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Sun Jun 30 23:31:28 2024 +0300

    cleanup and more comments

commit 32f126370c
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Sun Jun 30 21:35:06 2024 +0300

    attempt to fix GetEnumerator resolving for Pascal types

commit fb3eeeb28b
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Sat Jun 29 16:26:35 2024 +0300

    fix tests

commit 84b0dfe537
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Sat Jun 29 15:49:13 2024 +0300

    fix getting MethodInfo

commit 5fa4d9fce7
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 22:45:07 2024 +0300

    cold fix set of T resolving

commit 460ce636ab
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 22:21:06 2024 +0300

    hot fix set of T resolving

commit 83c2f29ac6
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 21:53:11 2024 +0300

    fix method filtering again

commit c840a1a47a
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 21:32:41 2024 +0300

    fix type recovery

commit 2436627fdd
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 19:18:32 2024 +0300

    fixing method filtering

commit 15a05360a4
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 17:25:39 2024 +0300

    attempt to fix GetEnumerator resolving for compiled types

commit 4fd020d084
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 17:21:00 2024 +0300

    adding tests

* feat(bin/LanguageKits/SPython): add more things to installer

* Change get_system_module method visibility (and some more)

* Update SPython language names

* Add CaseSensitive boolean saving in pcu

* Implement case sensitive symbol table

* Fix Create function not found error

* Delete try/catch block in CollectNamesFromUsedUnits to make code cleaner

* Create languageCaseSensitive field in pcu

* Create CompilationArtifacts struct for passing data to ConvertAfterUsedModulesCompilation

* Fix GraphWPF importing problem by dirty workaround !!!

* Squashed commit of the following:

commit 57ff5ef37d04ce8fcac8705c5a693bddf2ecf10e
Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
Date:   Thu Feb 27 12:56:53 2025 +0300

    Fix Global Variables Type Definition

    Основная программа выносится в функцию, определяемой самой первой и first_assignment_defines_type выводит тип глобальных переменных корректно

commit 6f93ae8d6afc1c685d602b85ba6d455d862b35af
Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
Date:   Wed Feb 26 17:33:10 2025 +0300

    Replace same_type_node, Fix Procedure Assignment

commit 52a096394cfdd4d8e4b27ddd36570b45b053c380
Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
Date:   Thu Feb 20 13:59:16 2025 +0300

    Fix Local Scope in If Node

commit a0be5bed7f110314c0e512d28a76e3bd87328f01
Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
Date:   Sat Feb 15 16:40:50 2025 +0300

    Fix Bug with same_type_node

commit 04fd2b2a6667bf06af02614a2fd30d0b50172a0c
Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
Date:   Sat Feb 15 16:09:27 2025 +0300

    Fix Assignment for New Variables

commit ea591e243a5a458d6d94e665cec50d9ef60e1a08
Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
Date:   Sat Feb 15 15:58:45 2025 +0300

    Fix Assignment for Imported Variables in Functions

commit e5d71be7693c527e6f4cd88671503dafa0ac9777
Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
Date:   Sat Feb 15 15:13:21 2025 +0300

    Fix SPython's Syntax Node Erasion

commit c78649ac7e7883860ce459cb31f9d9e46194f203
Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
Date:   Sat Feb 15 14:35:53 2025 +0300

    Fix Variables from Module Assignment

commit 4890f7f163a2557bc58d6e9c48cb432c6436a3aa
Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
Date:   Sat Feb 15 13:36:53 2025 +0300

    Return RetainUsedGlobalVariablesVisitor

commit e5460edf2fae002ccc64d261bbb8fadb27deec12
Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
Date:   Sat Feb 15 13:05:38 2025 +0300

    Add Errors for Wrong Global Usage

commit e32387e1356cc1e330518c57ab895f89b9de1784
Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
Date:   Sat Feb 15 12:33:55 2025 +0300

    Update Comments about Syntax Visitors

commit 1f6c7ac2d8c891d582cbe957ed2ad6886de27de1
Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
Date:   Sat Feb 15 12:27:59 2025 +0300

    Fix Global Variables

    read access for global variables in fuctions by default

commit e840610a25718ba12df144948bdda175cbc8d7c5
Merge: e70cb9914 6c81b45c0
Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
Date:   Fri Feb 14 19:51:38 2025 +0300

    Merge branch 'SPython' into SPython-Context-Change

commit e70cb99145120df29d1ae172d1b00afa8ea5b18f
Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
Date:   Fri Feb 14 19:49:18 2025 +0300

    Return Back Global Keyword

commit 7cf7a24b8f927cad72645e028f0e0ebc47cae328
Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
Date:   Wed Feb 12 13:15:35 2025 +0300

    Fix Merge

commit 89cc4551a0bcdb55eb64d244e35035134e5f6e75
Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
Date:   Wed Feb 12 13:02:06 2025 +0300

    Squashed commit of the following:

    commit 41dfb6f187
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Fri Feb 7 21:41:01 2025 +0300

        [] - преобразование во все контейнеры

        GraphABCHelper - теперь ABCObjects работает под Линукс

        School исправлен согласно последним веяниям []

    commit 79bbbd10ff
    Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
    Date:   Wed Jan 29 20:18:37 2025 +0300

        removing files for support fx4.0 (#3240)

    commit 88d5c409eb
    Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
    Date:   Tue Jan 28 20:41:55 2025 +0300

        Рефакторинг PascalABCNET.xshd (#3237)

        * refactoring PascalABCNET.xshd

        * removing extra characters

    commit 8fbd7fdfc3
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sun Jan 26 23:42:48 2025 +0300

        3.10.3
        faststrings
        EmptyCollection и преобразование ее в List, Dictionary
        t: (real,real) := (1,2)

    commit bba132bd5d
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Jan 22 09:14:44 2025 +0300

        Поправил справку по функции

    commit 1bd21857cc
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Jan 8 18:46:51 2025 +0300

        Teacher Control Plugin - возможность задать server.dat

    commit 0848a1b796
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Jan 4 22:54:38 2025 +0300

        Исправление автоформатирования []

    commit d45b782a7b
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Jan 4 18:45:07 2025 +0300

        Rename PABCSistem in test suite

    commit c2347e604b
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Jan 4 14:44:51 2025 +0300

        Примеры - устранил неточности

        LightPT - имя сервера вынес в публичную секцию

    commit b68b8da970
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Dec 17 15:52:18 2024 +0300

        Примеры Coords1.pas Coords2.pas.pas

    commit 8a9788e6f9
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Dec 17 15:06:57 2024 +0300

        Перенес проверку set array на уровень парсера

        Немного поправил Intellisense по наведению для NewSet

        По точке там что то другое работает

    commit 874ddebad3
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Dec 14 21:00:38 2024 +0300

        Поправил грамматику []

        Теперь нельзя в режиме ## использовать атрибуты

        Зато можно [1,2,3].Print

    commit 080fb487e1
    Merge: a53dcd9ed a484b0e82
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Dec 14 15:25:24 2024 +0300

        Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet

    commit a53dcd9ed2
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Dec 14 15:25:16 2024 +0300

        SF Prm Cmb для строк

    commit a484b0e82d
    Author: Sun Serega <sunserega2@gmail.com>
    Date:   Thu Dec 12 13:49:17 2024 +0200

        fix (#3231)

    commit 6ef11f249c
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Dec 10 11:05:45 2024 +0300

        3.10.2

    commit db9679d89f
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Dec 10 10:59:20 2024 +0300

        Закончил превращение синтаксиса [] по умолчанию в массивы

    commit 45fdde24b4
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Sun Dec 8 18:08:00 2024 +0100

        #3229

    commit 494b47624d
    Merge: 5875b9929 7906d73da
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Sun Dec 8 10:42:07 2024 +0100

        Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet

    commit 5875b99296
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Sun Dec 8 10:41:53 2024 +0100

        platformtarget native - .NET 9.0

    commit 7906d73da3
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Dec 3 14:25:37 2024 +0300

        Небольшие изменения в реализации операций с множествами

    commit 087591c7b6
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Nov 27 11:37:07 2024 +0300

        3.10.1

        Coords - доработки

        Distance, Middle, DrawText с фоном и рамкой. Глобальные переменные настройки

    commit d268d4f83b
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Thu Nov 21 22:24:07 2024 +0300

        NSToBytes переделал с исключением

    commit 2bacdc8c28
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Nov 20 13:20:33 2024 +0300

        Комментарии к NewSet

    commit e917ac8eca
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Nov 20 12:42:15 2024 +0300

        TypeName для set

    commit 206289c6a7
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Nov 19 20:23:03 2024 +0300

        Везде заменил _hs на hs в NewSet

        Убрал вызовы методов расширений NewSet в PABCSystem.pas

        Убрал var в operator +

    commit d8262078f6
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Nov 19 13:56:47 2024 +0300

        Исправление мелких ошибок NewSet

        Все тесты проходят.

        Проблема, которая остаётся - в режиме ускорения такие программы падают:

        begin
          var s: set of byte;
          Print(s = [1]);
        end.

        Причина - из dll не вызывается конструктор записи без параметров, хотя он определён. В C# вообще у записей не может быть конструктора по умолчанию - наверное потому. Но для NewSet надо бы сделать исключение

    commit f8819665ba
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Nov 16 10:56:11 2024 +0300

        NS2

    commit 591d9ebe60
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Wed Nov 13 21:34:10 2024 +0100

        fix

    commit c6505634f4
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Wed Nov 13 21:12:33 2024 +0100

        fix

    commit a6564df23c
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Wed Nov 13 20:52:29 2024 +0100

        fix in new sets

    commit 03be5bd931
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Nov 13 22:13:41 2024 +0300

        Переставил operator:= в NewSet

    commit 96c68f1666
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Tue Nov 12 21:38:07 2024 +0100

        #3223

    commit 82776f3c77
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Nov 9 12:18:19 2024 +0300

        NewSet - много мелких исправлений.

        Все тесты проходят кроме Tests 5 - видимо с pabcrtl.dll

    commit fbd63efa89
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sun Nov 3 16:59:48 2024 +0300

        NewSets
        Некоторые тесты надо исправить

    commit 746c4ae2c2
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Thu Oct 31 21:00:42 2024 +0100

        #3221

    commit 350d07326d
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Thu Oct 31 18:35:51 2024 +0100

        #3221

    commit aae9ab408b
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Thu Oct 31 18:25:06 2024 +0100

        #3221

    commit 1e4a811e04
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Wed Oct 30 20:42:59 2024 +0100

        test for #3219

    commit d1a1247ecd
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Wed Oct 30 20:24:16 2024 +0100

        #3219

    commit 13b3071d80
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Mon Oct 28 22:42:17 2024 +0300

        закомментировал extensions преобразования arr to set. Надеюсь в новой реализации всё исправить

    commit 6d5c18f457
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Thu Oct 24 10:17:48 2024 +0300

        SF XLSX.pas

    commit 0c773a7ecb
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Oct 16 12:04:33 2024 +0300

        tree.xml с парой новых узлов для Питона

    commit 53b3fd0881
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Oct 9 14:09:01 2024 +0300

        Добавил временное преобразование от array of T в set of T

    commit 271d5792ce
    Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
    Date:   Tue Oct 8 10:00:14 2024 +0300

        Documentation (#3211)

        * Add Compiler documentation

        * Add Intellisense documentation

        * Move documentation folder to root directory

    commit 79f9ab73a0
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Oct 5 15:33:20 2024 +0300

        PT4_32

    commit 0a20c8d32c
    Author: Sun Serega <sunserega2@gmail.com>
    Date:   Thu Sep 26 09:02:31 2024 +0200

        Add `.DistinctBy` (#3122)

    commit 11981dbf47
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Sep 25 11:53:02 2024 +0300

        IndexMinBy, IndexMaxBy
        MinBy, MaxBy - более эффективная реализация
        GraphWPF - SaveToClipboard

    commit 3eb1d2bd85
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Sun Sep 22 17:42:09 2024 +0200

        #3197

    commit 20edd487e3
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Sun Sep 22 12:39:03 2024 +0200

        #3204

    commit 7261231c9c
    Merge: 7debbe702 9ab932977
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Sun Sep 22 09:49:58 2024 +0200

        Merge pull request #3207 from AlexanderZemlyak/fix_linux_version

        Fix linux version

    commit 9ab9329771
    Author: AlexanderZemlyak <zemlyaksanya@mail.ru>
    Date:   Sun Sep 22 10:23:18 2024 +0300

        Add new projects in PascalACBNETLinux.sln

    commit 7debbe702a
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Sep 21 14:29:38 2024 +0300

        Критическое обновление LightPT

    commit 40335b873e
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Fri Sep 20 22:58:46 2024 +0300

        LightPT - OutputListIsClearedFromSpaces := False;
        Coords - DrawLine

    commit 078281db17
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Thu Sep 19 22:42:44 2024 +0300

        coords suite

    commit 8d51f999a5
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Thu Sep 19 20:28:28 2024 +0300

        Автоклассы - разрешение наследования от классов без полей

        Модуль Coords

    commit 8f7e92d418
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Mon Sep 16 08:25:43 2024 +0300

        Turtle переделал на паттерн Команда

    commit a6f6d8a90b
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Sep 7 23:11:54 2024 +0300

        Правки рейтинга в TeacherPlugin

    commit 2365eb3633
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Sep 7 15:54:15 2024 +0300

        LinkLabel в TeacherControlPlugin

    commit 1835b811ef
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Sep 3 23:51:44 2024 +0300

        MathNet Signed

    commit b23d6df9e9
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Sep 3 23:16:15 2024 +0300

        MathNet.Numerics.dll

    commit 790fba67b8
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Aug 27 17:56:09 2024 +0300

        3.10.0

    commit 1ec4204fd2
    Author: Sun Serega <sunserega2@gmail.com>
    Date:   Mon Aug 26 09:20:27 2024 +0300

        `.Batch` cleanup (#3108)

    commit b5e674c311
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Mon Aug 26 09:12:14 2024 +0300

        3_10_0

    commit 7face043cf
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Mon Aug 26 09:11:08 2024 +0300

        ToSet

    commit e456ad528e
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Aug 24 23:13:57 2024 +0300

        3.9.0.3530

    commit 3247469e6d
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Aug 24 22:55:27 2024 +0300

        Добавлен DrawPoints в Turtle

        Исправлена ошибка с отображением подписей в Y-координате

    commit 7548142623
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Aug 24 14:27:53 2024 +0300

        1. Глобально.
        SetDecimalSeparator(',')
        SetNumberFormat(DecimalSeparator := ','  и куча других параметров)

        s.ToReal(nfi)
        s.ToReals(nfi)
        StrToReal(nfi)
        StrToFloat(nfi)
        FloatToStr(nfi)

        var nfi := NumberFormat(DecimalSeparator := ',')

        s.ToReal(DecimalSeparator := ',')
        s.ToReals(DecimalSeparator := ',')
        StrToReal(DecimalSeparator := ',')

    commit d94885b950
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Aug 24 12:13:09 2024 +0300

        randomElement для строк

        .ToReals - разделителями могут быть пробел табуляция и переход на новую строку

        NumberFormat - функция, возвращающая nfi

    commit ae2e26acf8
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Fri Aug 23 19:33:55 2024 +0300

        PT4 - новые dll файлы старых заданий серий A

    commit 0f8aa6fa3c
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sun Aug 18 17:28:05 2024 +0300

        SetOf как основной синоним HSet

    commit db4b53be20
    Merge: 86852e0a5 b9fd59a84
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sun Aug 18 16:05:42 2024 +0300

        Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet

    commit 86852e0a59
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sun Aug 18 16:05:14 2024 +0300

        School - ToBase(number: int64

    commit b9fd59a840
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Tue Aug 13 15:08:44 2024 +0200

        #2830

    commit 4f0b0f8ba0
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Tue Aug 13 14:43:49 2024 +0200

        #3194

    commit e3ee0fed4c
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Tue Aug 13 13:49:30 2024 +0200

        #3097

    commit d396c4a9fe
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Tue Aug 13 10:40:23 2024 +0200

        #3178

    commit 0d846d2335
    Merge: e91e35398 a65a86921
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Mon Aug 12 15:24:11 2024 +0200

        Merge pull request #3170 from samuraiGH/ForeachResolver-rework

        Foreach resolver rework

    commit a65a869211
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Mon Aug 12 15:50:42 2024 +0300

        increasing pcu file version

    commit e91e353984
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sun Aug 11 15:21:29 2024 +0300

        Обновленный модуль Turtle.pas

    commit c18238df39
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Aug 6 20:18:57 2024 +0300

        3.9.0.3523

    commit 1da2b524a6
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Aug 6 19:34:10 2024 +0300

        School PrimeDivisors

    commit 47c61d8b14
    Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
    Date:   Fri Aug 2 10:48:07 2024 +0300

        New directive to disable linking pascal standard modules (#3186)

        * Add new 'disable standard units' directive and it's processing

        * Refactor InitializeNewUnit function

        * Improve disable standard units directive checks

        * Add null check in programs.cs to avoid error

        * Rename error related to disable standard units directive

        * Add referencing standard net libraries

        * Add checks for duplicates when injecting references

    commit fc3ab96cae
    Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
    Date:   Fri Aug 2 10:46:40 2024 +0300

        Delete DocumentedUnits option and Exclude HelpBuilder project (#3192)

        * Delete CodeGeneration and PCUGenerate options from CompilerInternalDebug

        Достаточно их аналогов из CompilerOptions.

        * Add recreating CompilerOptions when reloading Compiler

        * Change Rebuild checkbox logic

        * Delete documented units fiels from CompilerInternalDebug

        * Revert "Delete CodeGeneration and PCUGenerate options from CompilerInternalDebug"

        This reverts commit 25e92b22722b7e251ab0156148fdf28ee3175c27.

        * Exclude HelpBuilder

    commit 64acde6460
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Jul 31 18:21:04 2024 +0300

        Сделал возможным неявное приведение некоторого типа к array of T (при описании оператора в виде статической функции класса)

        School - IsPrime(n)

    commit 3db5709101
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Jul 31 10:56:18 2024 +0300

        ZipCartesianFuncs.pas

    commit c4fd47128b
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Jul 30 22:56:03 2024 +0300

        Zip, Cartesian - сделаны внешние функции до 5 параметров, в т.ч. с проекцией
        Zip, Cartesian - методы расширения дополнены чтобы было как во внешних
        Перегенерирована справка

    commit 7d66f26d4f
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Mon Jul 1 00:16:43 2024 +0300

        cleanup and more tests

    commit 464dc794a8
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Sun Jun 30 23:31:28 2024 +0300

        cleanup and more comments

    commit 32f126370c
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Sun Jun 30 21:35:06 2024 +0300

        attempt to fix GetEnumerator resolving for Pascal types

    commit fb3eeeb28b
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Sat Jun 29 16:26:35 2024 +0300

        fix tests

    commit 84b0dfe537
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Sat Jun 29 15:49:13 2024 +0300

        fix getting MethodInfo

    commit 5fa4d9fce7
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Fri Jun 28 22:45:07 2024 +0300

        cold fix set of T resolving

    commit 460ce636ab
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Fri Jun 28 22:21:06 2024 +0300

        hot fix set of T resolving

    commit 83c2f29ac6
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Fri Jun 28 21:53:11 2024 +0300

        fix method filtering again

    commit c840a1a47a
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Fri Jun 28 21:32:41 2024 +0300

        fix type recovery

    commit 2436627fdd
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Fri Jun 28 19:18:32 2024 +0300

        fixing method filtering

    commit 15a05360a4
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Fri Jun 28 17:25:39 2024 +0300

        attempt to fix GetEnumerator resolving for compiled types

    commit 4fd020d084
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Fri Jun 28 17:21:00 2024 +0300

        adding tests

* Squashed commit of the following:

commit 1fd348ec3c
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Feb 23 20:49:26 2025 +0300

    NSIS New 3.10

    Ярлык в меню Пуск у всех пользователей

commit 80b7182dc1
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Feb 19 11:50:00 2025 +0300

    _ in names

commit a2b078960b
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Feb 19 10:52:25 2025 +0300

    cnfc2

commit 58f26d469d
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Feb 18 22:28:13 2025 +0300

    перекомпиляция 3.10.3.3611

commit b78a72977f
Author: nevermind322 <81963698+nevermind322@users.noreply.github.com>
Date:   Tue Feb 18 22:02:19 2025 +0300

    fix build on mono (#3249)

    * fix build on mono

    * remove local func

    * fix again

commit c3557e388c
Author: Nikolay Kuznetsov <adasoft@gmail.com>
Date:   Sat Feb 15 20:32:46 2025 +0300

    Update GraphABC.pas (#3244)

    1. Быстрая реализация функции FloodFill
    Для этого добавлена процедура BitmapFloodFill, которая вызывается из метода Picture.FloodFill и процедуры FloodFill

    2.Добавлена поддержка LockDrawing/UnlockDrawing в процедуру FloodFill

commit 9dbac389e1
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Wed Feb 12 13:57:14 2025 +0300

    Add missing projects to pabcnetc.sln (#3247)

commit 41dfb6f187
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Fri Feb 7 21:41:01 2025 +0300

    [] - преобразование во все контейнеры

    GraphABCHelper - теперь ABCObjects работает под Линукс

    School исправлен согласно последним веяниям []

commit 79bbbd10ff
Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
Date:   Wed Jan 29 20:18:37 2025 +0300

    removing files for support fx4.0 (#3240)

commit 88d5c409eb
Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
Date:   Tue Jan 28 20:41:55 2025 +0300

    Рефакторинг PascalABCNET.xshd (#3237)

    * refactoring PascalABCNET.xshd

    * removing extra characters

commit 8fbd7fdfc3
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Jan 26 23:42:48 2025 +0300

    3.10.3
    faststrings
    EmptyCollection и преобразование ее в List, Dictionary
    t: (real,real) := (1,2)

commit bba132bd5d
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Jan 22 09:14:44 2025 +0300

    Поправил справку по функции

commit 1bd21857cc
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Jan 8 18:46:51 2025 +0300

    Teacher Control Plugin - возможность задать server.dat

commit 0848a1b796
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Jan 4 22:54:38 2025 +0300

    Исправление автоформатирования []

commit d45b782a7b
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Jan 4 18:45:07 2025 +0300

    Rename PABCSistem in test suite

commit c2347e604b
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Jan 4 14:44:51 2025 +0300

    Примеры - устранил неточности

    LightPT - имя сервера вынес в публичную секцию

commit b68b8da970
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Dec 17 15:52:18 2024 +0300

    Примеры Coords1.pas Coords2.pas.pas

commit 8a9788e6f9
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Dec 17 15:06:57 2024 +0300

    Перенес проверку set array на уровень парсера

    Немного поправил Intellisense по наведению для NewSet

    По точке там что то другое работает

commit 874ddebad3
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Dec 14 21:00:38 2024 +0300

    Поправил грамматику []

    Теперь нельзя в режиме ## использовать атрибуты

    Зато можно [1,2,3].Print

commit 080fb487e1
Merge: a53dcd9ed a484b0e82
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Dec 14 15:25:24 2024 +0300

    Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet

commit a53dcd9ed2
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Dec 14 15:25:16 2024 +0300

    SF Prm Cmb для строк

commit a484b0e82d
Author: Sun Serega <sunserega2@gmail.com>
Date:   Thu Dec 12 13:49:17 2024 +0200

    fix (#3231)

commit 6ef11f249c
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Dec 10 11:05:45 2024 +0300

    3.10.2

commit db9679d89f
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Dec 10 10:59:20 2024 +0300

    Закончил превращение синтаксиса [] по умолчанию в массивы

commit 45fdde24b4
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Sun Dec 8 18:08:00 2024 +0100

    #3229

commit 494b47624d
Merge: 5875b9929 7906d73da
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Sun Dec 8 10:42:07 2024 +0100

    Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet

commit 5875b99296
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Sun Dec 8 10:41:53 2024 +0100

    platformtarget native - .NET 9.0

commit 7906d73da3
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Dec 3 14:25:37 2024 +0300

    Небольшие изменения в реализации операций с множествами

commit 087591c7b6
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Nov 27 11:37:07 2024 +0300

    3.10.1

    Coords - доработки

    Distance, Middle, DrawText с фоном и рамкой. Глобальные переменные настройки

commit d268d4f83b
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Thu Nov 21 22:24:07 2024 +0300

    NSToBytes переделал с исключением

commit 2bacdc8c28
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Nov 20 13:20:33 2024 +0300

    Комментарии к NewSet

commit e917ac8eca
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Nov 20 12:42:15 2024 +0300

    TypeName для set

commit 206289c6a7
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Nov 19 20:23:03 2024 +0300

    Везде заменил _hs на hs в NewSet

    Убрал вызовы методов расширений NewSet в PABCSystem.pas

    Убрал var в operator +

commit d8262078f6
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Nov 19 13:56:47 2024 +0300

    Исправление мелких ошибок NewSet

    Все тесты проходят.

    Проблема, которая остаётся - в режиме ускорения такие программы падают:

    begin
      var s: set of byte;
      Print(s = [1]);
    end.

    Причина - из dll не вызывается конструктор записи без параметров, хотя он определён. В C# вообще у записей не может быть конструктора по умолчанию - наверное потому. Но для NewSet надо бы сделать исключение

commit f8819665ba
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Nov 16 10:56:11 2024 +0300

    NS2

commit 591d9ebe60
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Wed Nov 13 21:34:10 2024 +0100

    fix

commit c6505634f4
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Wed Nov 13 21:12:33 2024 +0100

    fix

commit a6564df23c
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Wed Nov 13 20:52:29 2024 +0100

    fix in new sets

commit 03be5bd931
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Nov 13 22:13:41 2024 +0300

    Переставил operator:= в NewSet

commit 96c68f1666
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Tue Nov 12 21:38:07 2024 +0100

    #3223

commit 82776f3c77
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Nov 9 12:18:19 2024 +0300

    NewSet - много мелких исправлений.

    Все тесты проходят кроме Tests 5 - видимо с pabcrtl.dll

commit fbd63efa89
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Nov 3 16:59:48 2024 +0300

    NewSets
    Некоторые тесты надо исправить

commit 746c4ae2c2
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Thu Oct 31 21:00:42 2024 +0100

    #3221

commit 350d07326d
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Thu Oct 31 18:35:51 2024 +0100

    #3221

commit aae9ab408b
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Thu Oct 31 18:25:06 2024 +0100

    #3221

commit 1e4a811e04
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Wed Oct 30 20:42:59 2024 +0100

    test for #3219

commit d1a1247ecd
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Wed Oct 30 20:24:16 2024 +0100

    #3219

commit 13b3071d80
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Mon Oct 28 22:42:17 2024 +0300

    закомментировал extensions преобразования arr to set. Надеюсь в новой реализации всё исправить

commit 6d5c18f457
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Thu Oct 24 10:17:48 2024 +0300

    SF XLSX.pas

commit 0c773a7ecb
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Oct 16 12:04:33 2024 +0300

    tree.xml с парой новых узлов для Питона

commit 53b3fd0881
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Oct 9 14:09:01 2024 +0300

    Добавил временное преобразование от array of T в set of T

commit 271d5792ce
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Tue Oct 8 10:00:14 2024 +0300

    Documentation (#3211)

    * Add Compiler documentation

    * Add Intellisense documentation

    * Move documentation folder to root directory

commit 79f9ab73a0
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Oct 5 15:33:20 2024 +0300

    PT4_32

commit 0a20c8d32c
Author: Sun Serega <sunserega2@gmail.com>
Date:   Thu Sep 26 09:02:31 2024 +0200

    Add `.DistinctBy` (#3122)

commit 11981dbf47
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Sep 25 11:53:02 2024 +0300

    IndexMinBy, IndexMaxBy
    MinBy, MaxBy - более эффективная реализация
    GraphWPF - SaveToClipboard

commit 3eb1d2bd85
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Sun Sep 22 17:42:09 2024 +0200

    #3197

commit 20edd487e3
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Sun Sep 22 12:39:03 2024 +0200

    #3204

commit 7261231c9c
Merge: 7debbe702 9ab932977
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Sun Sep 22 09:49:58 2024 +0200

    Merge pull request #3207 from AlexanderZemlyak/fix_linux_version

    Fix linux version

commit 9ab9329771
Author: AlexanderZemlyak <zemlyaksanya@mail.ru>
Date:   Sun Sep 22 10:23:18 2024 +0300

    Add new projects in PascalACBNETLinux.sln

commit 7debbe702a
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Sep 21 14:29:38 2024 +0300

    Критическое обновление LightPT

commit 40335b873e
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Fri Sep 20 22:58:46 2024 +0300

    LightPT - OutputListIsClearedFromSpaces := False;
    Coords - DrawLine

commit 078281db17
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Thu Sep 19 22:42:44 2024 +0300

    coords suite

commit 8d51f999a5
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Thu Sep 19 20:28:28 2024 +0300

    Автоклассы - разрешение наследования от классов без полей

    Модуль Coords

commit 8f7e92d418
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Mon Sep 16 08:25:43 2024 +0300

    Turtle переделал на паттерн Команда

commit a6f6d8a90b
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Sep 7 23:11:54 2024 +0300

    Правки рейтинга в TeacherPlugin

commit 2365eb3633
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Sep 7 15:54:15 2024 +0300

    LinkLabel в TeacherControlPlugin

commit 1835b811ef
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Sep 3 23:51:44 2024 +0300

    MathNet Signed

commit b23d6df9e9
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Sep 3 23:16:15 2024 +0300

    MathNet.Numerics.dll

commit 790fba67b8
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Aug 27 17:56:09 2024 +0300

    3.10.0

commit 1ec4204fd2
Author: Sun Serega <sunserega2@gmail.com>
Date:   Mon Aug 26 09:20:27 2024 +0300

    `.Batch` cleanup (#3108)

commit b5e674c311
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Mon Aug 26 09:12:14 2024 +0300

    3_10_0

commit 7face043cf
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Mon Aug 26 09:11:08 2024 +0300

    ToSet

commit e456ad528e
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Aug 24 23:13:57 2024 +0300

    3.9.0.3530

commit 3247469e6d
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Aug 24 22:55:27 2024 +0300

    Добавлен DrawPoints в Turtle

    Исправлена ошибка с отображением подписей в Y-координате

commit 7548142623
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Aug 24 14:27:53 2024 +0300

    1. Глобально.
    SetDecimalSeparator(',')
    SetNumberFormat(DecimalSeparator := ','  и куча других параметров)

    s.ToReal(nfi)
    s.ToReals(nfi)
    StrToReal(nfi)
    StrToFloat(nfi)
    FloatToStr(nfi)

    var nfi := NumberFormat(DecimalSeparator := ',')

    s.ToReal(DecimalSeparator := ',')
    s.ToReals(DecimalSeparator := ',')
    StrToReal(DecimalSeparator := ',')

commit d94885b950
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Aug 24 12:13:09 2024 +0300

    randomElement для строк

    .ToReals - разделителями могут быть пробел табуляция и переход на новую строку

    NumberFormat - функция, возвращающая nfi

commit ae2e26acf8
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Fri Aug 23 19:33:55 2024 +0300

    PT4 - новые dll файлы старых заданий серий A

commit 0f8aa6fa3c
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Aug 18 17:28:05 2024 +0300

    SetOf как основной синоним HSet

commit db4b53be20
Merge: 86852e0a5 b9fd59a84
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Aug 18 16:05:42 2024 +0300

    Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet

commit 86852e0a59
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Aug 18 16:05:14 2024 +0300

    School - ToBase(number: int64

commit b9fd59a840
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Tue Aug 13 15:08:44 2024 +0200

    #2830

commit 4f0b0f8ba0
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Tue Aug 13 14:43:49 2024 +0200

    #3194

commit e3ee0fed4c
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Tue Aug 13 13:49:30 2024 +0200

    #3097

commit d396c4a9fe
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Tue Aug 13 10:40:23 2024 +0200

    #3178

commit 0d846d2335
Merge: e91e35398 a65a86921
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Mon Aug 12 15:24:11 2024 +0200

    Merge pull request #3170 from samuraiGH/ForeachResolver-rework

    Foreach resolver rework

commit a65a869211
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Mon Aug 12 15:50:42 2024 +0300

    increasing pcu file version

commit e91e353984
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Aug 11 15:21:29 2024 +0300

    Обновленный модуль Turtle.pas

commit c18238df39
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Aug 6 20:18:57 2024 +0300

    3.9.0.3523

commit 1da2b524a6
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Aug 6 19:34:10 2024 +0300

    School PrimeDivisors

commit 47c61d8b14
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Fri Aug 2 10:48:07 2024 +0300

    New directive to disable linking pascal standard modules (#3186)

    * Add new 'disable standard units' directive and it's processing

    * Refactor InitializeNewUnit function

    * Improve disable standard units directive checks

    * Add null check in programs.cs to avoid error

    * Rename error related to disable standard units directive

    * Add referencing standard net libraries

    * Add checks for duplicates when injecting references

commit fc3ab96cae
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Fri Aug 2 10:46:40 2024 +0300

    Delete DocumentedUnits option and Exclude HelpBuilder project (#3192)

    * Delete CodeGeneration and PCUGenerate options from CompilerInternalDebug

    Достаточно их аналогов из CompilerOptions.

    * Add recreating CompilerOptions when reloading Compiler

    * Change Rebuild checkbox logic

    * Delete documented units fiels from CompilerInternalDebug

    * Revert "Delete CodeGeneration and PCUGenerate options from CompilerInternalDebug"

    This reverts commit 25e92b22722b7e251ab0156148fdf28ee3175c27.

    * Exclude HelpBuilder

commit 64acde6460
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Jul 31 18:21:04 2024 +0300

    Сделал возможным неявное приведение некоторого типа к array of T (при описании оператора в виде статической функции класса)

    School - IsPrime(n)

commit 3db5709101
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Jul 31 10:56:18 2024 +0300

    ZipCartesianFuncs.pas

commit c4fd47128b
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Jul 30 22:56:03 2024 +0300

    Zip, Cartesian - сделаны внешние функции до 5 параметров, в т.ч. с проекцией
    Zip, Cartesian - методы расширения дополнены чтобы было как во внешних
    Перегенерирована справка

commit 7d66f26d4f
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Mon Jul 1 00:16:43 2024 +0300

    cleanup and more tests

commit 464dc794a8
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Sun Jun 30 23:31:28 2024 +0300

    cleanup and more comments

commit 32f126370c
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Sun Jun 30 21:35:06 2024 +0300

    attempt to fix GetEnumerator resolving for Pascal types

commit fb3eeeb28b
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Sat Jun 29 16:26:35 2024 +0300

    fix tests

commit 84b0dfe537
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Sat Jun 29 15:49:13 2024 +0300

    fix getting MethodInfo

commit 5fa4d9fce7
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 22:45:07 2024 +0300

    cold fix set of T resolving

commit 460ce636ab
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 22:21:06 2024 +0300

    hot fix set of T resolving

commit 83c2f29ac6
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 21:53:11 2024 +0300

    fix method filtering again

commit c840a1a47a
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 21:32:41 2024 +0300

    fix type recovery

commit 2436627fdd
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 19:18:32 2024 +0300

    fixing method filtering

commit 15a05360a4
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 17:25:39 2024 +0300

    attempt to fix GetEnumerator resolving for compiled types

commit 4fd020d084
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 17:21:00 2024 +0300

    adding tests

* Fix Merge Commit

* Fix Assignment to Imported Variable

* Add Compound Comparison (alpha)

* Fix Compound Comparison False Positive

конструкция '(a == b) == c' теперь не считается CompoundComparison

* Reconstruct NameInterpreterVisiter

* Parser and Visitors Refactoring 1

* Fix Modules

* Parser and Visitors Refactoring 2

* Update RetainUsedGlobalVariablesVisitor

* Update RetainUsedGlobalVariablesVisitor 2

* Add Variable Declaration without InitValue

a: float
a = 1.23

* Add Global Variables in Units

In units all variables defined in outermost scope are global

* Add Template Types (list[int])

* Add Errors for Using PascalABCnet Types

* Add Power Binary Operation

* Fix SourceContext in Parser and ImportToUsesVisitor

* Add pass Statement

* Fix Nested List Generators

* Fix NameCorrectVisitors in Complex Cases

fix in nested dot_nodes and lambda's inside list generator

* Fix IdentArranger for Complex Cases

now it handles correctly cases such as follows:
print(a, b,
    c, d,
       e, f)

* Add Ternary Conditional Operator

* Fix Lexer and New Line Error

* Add End File Token to Fix Errors Positioning

* Fix Errors Positioning

* Move AddForwardDeclarationsVisitor Lower

* Update Comments in StandardSyntaxTreeConverter

* Update Examples

* Fix CompoundComparisonDesugarVisitor

* Update Comments

* Create compound_conditions_example.pys

* Separate ';' and End_Of_Line Token

* Fix Error Line Positioning

* Fix Lexer Error Message with COLON

* Fix Error Positioning

* Fix Colon Error Positionning

* Fix Error Next Token Hints

* Fix Errors with 'in' and 'import'

* Add UnsupportedConstructsVisitor

* Add Error for Using class and lambda

* Refactor IndentArranger

* Add programBeginWithIndentToken

* Squashed commit of the following:

commit 7751fe7e75
Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
Date:   Sun Mar 16 13:28:03 2025 +0300

    generating language res file at build time (#3252)

commit d1fce63d69
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Mar 4 08:38:09 2025 +0300

    Сборка после pr SDK

commit d491e88aa7
Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
Date:   Mon Mar 3 20:34:51 2025 +0300

    migration to new build system (#3241)

    * converting project files into sdk style
    * new build commands
    * adding new dll into nsis
    * removing unused .cs files

commit 1fd348ec3c
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Feb 23 20:49:26 2025 +0300

    NSIS New 3.10

    Ярлык в меню Пуск у всех пользователей

commit 80b7182dc1
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Feb 19 11:50:00 2025 +0300

    _ in names

commit a2b078960b
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Feb 19 10:52:25 2025 +0300

    cnfc2

commit 58f26d469d
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Feb 18 22:28:13 2025 +0300

    перекомпиляция 3.10.3.3611

commit b78a72977f
Author: nevermind322 <81963698+nevermind322@users.noreply.github.com>
Date:   Tue Feb 18 22:02:19 2025 +0300

    fix build on mono (#3249)

    * fix build on mono

    * remove local func

    * fix again

commit c3557e388c
Author: Nikolay Kuznetsov <adasoft@gmail.com>
Date:   Sat Feb 15 20:32:46 2025 +0300

    Update GraphABC.pas (#3244)

    1. Быстрая реализация функции FloodFill
    Для этого добавлена процедура BitmapFloodFill, которая вызывается из метода Picture.FloodFill и процедуры FloodFill

    2.Добавлена поддержка LockDrawing/UnlockDrawing в процедуру FloodFill

commit 9dbac389e1
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Wed Feb 12 13:57:14 2025 +0300

    Add missing projects to pabcnetc.sln (#3247)

commit 41dfb6f187
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Fri Feb 7 21:41:01 2025 +0300

    [] - преобразование во все контейнеры

    GraphABCHelper - теперь ABCObjects работает под Линукс

    School исправлен согласно последним веяниям []

commit 79bbbd10ff
Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
Date:   Wed Jan 29 20:18:37 2025 +0300

    removing files for support fx4.0 (#3240)

commit 88d5c409eb
Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
Date:   Tue Jan 28 20:41:55 2025 +0300

    Рефакторинг PascalABCNET.xshd (#3237)

    * refactoring PascalABCNET.xshd

    * removing extra characters

commit 8fbd7fdfc3
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Jan 26 23:42:48 2025 +0300

    3.10.3
    faststrings
    EmptyCollection и преобразование ее в List, Dictionary
    t: (real,real) := (1,2)

commit bba132bd5d
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Jan 22 09:14:44 2025 +0300

    Поправил справку по функции

commit 1bd21857cc
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Jan 8 18:46:51 2025 +0300

    Teacher Control Plugin - возможность задать server.dat

commit 0848a1b796
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Jan 4 22:54:38 2025 +0300

    Исправление автоформатирования []

commit d45b782a7b
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Jan 4 18:45:07 2025 +0300

    Rename PABCSistem in test suite

commit c2347e604b
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Jan 4 14:44:51 2025 +0300

    Примеры - устранил неточности

    LightPT - имя сервера вынес в публичную секцию

commit b68b8da970
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Dec 17 15:52:18 2024 +0300

    Примеры Coords1.pas Coords2.pas.pas

commit 8a9788e6f9
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Dec 17 15:06:57 2024 +0300

    Перенес проверку set array на уровень парсера

    Немного поправил Intellisense по наведению для NewSet

    По точке там что то другое работает

commit 874ddebad3
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Dec 14 21:00:38 2024 +0300

    Поправил грамматику []

    Теперь нельзя в режиме ## использовать атрибуты

    Зато можно [1,2,3].Print

commit 080fb487e1
Merge: a53dcd9ed a484b0e82
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Dec 14 15:25:24 2024 +0300

    Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet

commit a53dcd9ed2
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Dec 14 15:25:16 2024 +0300

    SF Prm Cmb для строк

commit a484b0e82d
Author: Sun Serega <sunserega2@gmail.com>
Date:   Thu Dec 12 13:49:17 2024 +0200

    fix (#3231)

commit 6ef11f249c
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Dec 10 11:05:45 2024 +0300

    3.10.2

commit db9679d89f
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Dec 10 10:59:20 2024 +0300

    Закончил превращение синтаксиса [] по умолчанию в массивы

commit 45fdde24b4
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Sun Dec 8 18:08:00 2024 +0100

    #3229

commit 494b47624d
Merge: 5875b9929 7906d73da
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Sun Dec 8 10:42:07 2024 +0100

    Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet

commit 5875b99296
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Sun Dec 8 10:41:53 2024 +0100

    platformtarget native - .NET 9.0

commit 7906d73da3
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Dec 3 14:25:37 2024 +0300

    Небольшие изменения в реализации операций с множествами

commit 087591c7b6
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Nov 27 11:37:07 2024 +0300

    3.10.1

    Coords - доработки

    Distance, Middle, DrawText с фоном и рамкой. Глобальные переменные настройки

commit d268d4f83b
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Thu Nov 21 22:24:07 2024 +0300

    NSToBytes переделал с исключением

commit 2bacdc8c28
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Nov 20 13:20:33 2024 +0300

    Комментарии к NewSet

commit e917ac8eca
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Nov 20 12:42:15 2024 +0300

    TypeName для set

commit 206289c6a7
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Nov 19 20:23:03 2024 +0300

    Везде заменил _hs на hs в NewSet

    Убрал вызовы методов расширений NewSet в PABCSystem.pas

    Убрал var в operator +

commit d8262078f6
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Nov 19 13:56:47 2024 +0300

    Исправление мелких ошибок NewSet

    Все тесты проходят.

    Проблема, которая остаётся - в режиме ускорения такие программы падают:

    begin
      var s: set of byte;
      Print(s = [1]);
    end.

    Причина - из dll не вызывается конструктор записи без параметров, хотя он определён. В C# вообще у записей не может быть конструктора по умолчанию - наверное потому. Но для NewSet надо бы сделать исключение

commit f8819665ba
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Nov 16 10:56:11 2024 +0300

    NS2

commit 591d9ebe60
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Wed Nov 13 21:34:10 2024 +0100

    fix

commit c6505634f4
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Wed Nov 13 21:12:33 2024 +0100

    fix

commit a6564df23c
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Wed Nov 13 20:52:29 2024 +0100

    fix in new sets

commit 03be5bd931
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Nov 13 22:13:41 2024 +0300

    Переставил operator:= в NewSet

commit 96c68f1666
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Tue Nov 12 21:38:07 2024 +0100

    #3223

commit 82776f3c77
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Nov 9 12:18:19 2024 +0300

    NewSet - много мелких исправлений.

    Все тесты проходят кроме Tests 5 - видимо с pabcrtl.dll

commit fbd63efa89
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Nov 3 16:59:48 2024 +0300

    NewSets
    Некоторые тесты надо исправить

commit 746c4ae2c2
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Thu Oct 31 21:00:42 2024 +0100

    #3221

commit 350d07326d
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Thu Oct 31 18:35:51 2024 +0100

    #3221

commit aae9ab408b
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Thu Oct 31 18:25:06 2024 +0100

    #3221

commit 1e4a811e04
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Wed Oct 30 20:42:59 2024 +0100

    test for #3219

commit d1a1247ecd
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Wed Oct 30 20:24:16 2024 +0100

    #3219

commit 13b3071d80
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Mon Oct 28 22:42:17 2024 +0300

    закомментировал extensions преобразования arr to set. Надеюсь в новой реализации всё исправить

commit 6d5c18f457
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Thu Oct 24 10:17:48 2024 +0300

    SF XLSX.pas

commit 0c773a7ecb
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Oct 16 12:04:33 2024 +0300

    tree.xml с парой новых узлов для Питона

commit 53b3fd0881
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Oct 9 14:09:01 2024 +0300

    Добавил временное преобразование от array of T в set of T

commit 271d5792ce
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Tue Oct 8 10:00:14 2024 +0300

    Documentation (#3211)

    * Add Compiler documentation

    * Add Intellisense documentation

    * Move documentation folder to root directory

commit 79f9ab73a0
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Oct 5 15:33:20 2024 +0300

    PT4_32

commit 0a20c8d32c
Author: Sun Serega <sunserega2@gmail.com>
Date:   Thu Sep 26 09:02:31 2024 +0200

    Add `.DistinctBy` (#3122)

commit 11981dbf47
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Sep 25 11:53:02 2024 +0300

    IndexMinBy, IndexMaxBy
    MinBy, MaxBy - более эффективная реализация
    GraphWPF - SaveToClipboard

commit 3eb1d2bd85
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Sun Sep 22 17:42:09 2024 +0200

    #3197

commit 20edd487e3
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Sun Sep 22 12:39:03 2024 +0200

    #3204

commit 7261231c9c
Merge: 7debbe702 9ab932977
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Sun Sep 22 09:49:58 2024 +0200

    Merge pull request #3207 from AlexanderZemlyak/fix_linux_version

    Fix linux version

commit 9ab9329771
Author: AlexanderZemlyak <zemlyaksanya@mail.ru>
Date:   Sun Sep 22 10:23:18 2024 +0300

    Add new projects in PascalACBNETLinux.sln

commit 7debbe702a
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Sep 21 14:29:38 2024 +0300

    Критическое обновление LightPT

commit 40335b873e
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Fri Sep 20 22:58:46 2024 +0300

    LightPT - OutputListIsClearedFromSpaces := False;
    Coords - DrawLine

commit 078281db17
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Thu Sep 19 22:42:44 2024 +0300

    coords suite

commit 8d51f999a5
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Thu Sep 19 20:28:28 2024 +0300

    Автоклассы - разрешение наследования от классов без полей

    Модуль Coords

commit 8f7e92d418
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Mon Sep 16 08:25:43 2024 +0300

    Turtle переделал на паттерн Команда

commit a6f6d8a90b
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Sep 7 23:11:54 2024 +0300

    Правки рейтинга в TeacherPlugin

commit 2365eb3633
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Sep 7 15:54:15 2024 +0300

    LinkLabel в TeacherControlPlugin

commit 1835b811ef
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Sep 3 23:51:44 2024 +0300

    MathNet Signed

commit b23d6df9e9
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Sep 3 23:16:15 2024 +0300

    MathNet.Numerics.dll

commit 790fba67b8
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Aug 27 17:56:09 2024 +0300

    3.10.0

commit 1ec4204fd2
Author: Sun Serega <sunserega2@gmail.com>
Date:   Mon Aug 26 09:20:27 2024 +0300

    `.Batch` cleanup (#3108)

commit b5e674c311
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Mon Aug 26 09:12:14 2024 +0300

    3_10_0

commit 7face043cf
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Mon Aug 26 09:11:08 2024 +0300

    ToSet

commit e456ad528e
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Aug 24 23:13:57 2024 +0300

    3.9.0.3530

commit 3247469e6d
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Aug 24 22:55:27 2024 +0300

    Добавлен DrawPoints в Turtle

    Исправлена ошибка с отображением подписей в Y-координате

commit 7548142623
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Aug 24 14:27:53 2024 +0300

    1. Глобально.
    SetDecimalSeparator(',')
    SetNumberFormat(DecimalSeparator := ','  и куча других параметров)

    s.ToReal(nfi)
    s.ToReals(nfi)
    StrToReal(nfi)
    StrToFloat(nfi)
    FloatToStr(nfi)

    var nfi := NumberFormat(DecimalSeparator := ',')

    s.ToReal(DecimalSeparator := ',')
    s.ToReals(DecimalSeparator := ',')
    StrToReal(DecimalSeparator := ',')

commit d94885b950
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Aug 24 12:13:09 2024 +0300

    randomElement для строк

    .ToReals - разделителями могут быть пробел табуляция и переход на новую строку

    NumberFormat - функция, возвращающая nfi

commit ae2e26acf8
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Fri Aug 23 19:33:55 2024 +0300

    PT4 - новые dll файлы старых заданий серий A

commit 0f8aa6fa3c
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Aug 18 17:28:05 2024 +0300

    SetOf как основной синоним HSet

commit db4b53be20
Merge: 86852e0a5 b9fd59a84
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Aug 18 16:05:42 2024 +0300

    Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet

commit 86852e0a59
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Aug 18 16:05:14 2024 +0300

    School - ToBase(number: int64

commit b9fd59a840
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Tue Aug 13 15:08:44 2024 +0200

    #2830

commit 4f0b0f8ba0
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Tue Aug 13 14:43:49 2024 +0200

    #3194

commit e3ee0fed4c
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Tue Aug 13 13:49:30 2024 +0200

    #3097

commit d396c4a9fe
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Tue Aug 13 10:40:23 2024 +0200

    #3178

commit 0d846d2335
Merge: e91e35398 a65a86921
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Mon Aug 12 15:24:11 2024 +0200

    Merge pull request #3170 from samuraiGH/ForeachResolver-rework

    Foreach resolver rework

commit a65a869211
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Mon Aug 12 15:50:42 2024 +0300

    increasing pcu file version

commit e91e353984
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Aug 11 15:21:29 2024 +0300

    Обновленный модуль Turtle.pas

commit c18238df39
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Aug 6 20:18:57 2024 +0300

    3.9.0.3523

commit 1da2b524a6
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Aug 6 19:34:10 2024 +0300

    School PrimeDivisors

commit 47c61d8b14
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Fri Aug 2 10:48:07 2024 +0300

    New directive to disable linking pascal standard modules (#3186)

    * Add new 'disable standard units' directive and it's processing

    * Refactor InitializeNewUnit function

    * Improve disable standard units directive checks

    * Add null check in programs.cs to avoid error

    * Rename error related to disable standard units directive

    * Add referencing standard net libraries

    * Add checks for duplicates when injecting references

commit fc3ab96cae
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Fri Aug 2 10:46:40 2024 +0300

    Delete DocumentedUnits option and Exclude HelpBuilder project (#3192)

    * Delete CodeGeneration and PCUGenerate options from CompilerInternalDebug

    Достаточно их аналогов из CompilerOptions.

    * Add recreating CompilerOptions when reloading Compiler

    * Change Rebuild checkbox logic

    * Delete documented units fiels from CompilerInternalDebug

    * Revert "Delete CodeGeneration and PCUGenerate options from CompilerInternalDebug"

    This reverts commit 25e92b22722b7e251ab0156148fdf28ee3175c27.

    * Exclude HelpBuilder

commit 64acde6460
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Jul 31 18:21:04 2024 +0300

    Сделал возможным неявное приведение некоторого типа к array of T (при описании оператора в виде статической функции класса)

    School - IsPrime(n)

commit 3db5709101
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Jul 31 10:56:18 2024 +0300

    ZipCartesianFuncs.pas

commit c4fd47128b
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Jul 30 22:56:03 2024 +0300

    Zip, Cartesian - сделаны внешние функции до 5 параметров, в т.ч. с проекцией
    Zip, Cartesian - методы расширения дополнены чтобы было как во внешних
    Перегенерирована справка

commit 7d66f26d4f
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Mon Jul 1 00:16:43 2024 +0300

    cleanup and more tests

commit 464dc794a8
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Sun Jun 30 23:31:28 2024 +0300

    cleanup and more comments

commit 32f126370c
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Sun Jun 30 21:35:06 2024 +0300

    attempt to fix GetEnumerator resolving for Pascal types

commit fb3eeeb28b
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Sat Jun 29 16:26:35 2024 +0300

    fix tests

commit 84b0dfe537
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Sat Jun 29 15:49:13 2024 +0300

    fix getting MethodInfo

commit 5fa4d9fce7
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 22:45:07 2024 +0300

    cold fix set of T resolving

commit 460ce636ab
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 22:21:06 2024 +0300

    hot fix set of T resolving

commit 83c2f29ac6
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 21:53:11 2024 +0300

    fix method filtering again

commit c840a1a47a
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 21:32:41 2024 +0300

    fix type recovery

commit 2436627fdd
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 19:18:32 2024 +0300

    fixing method filtering

commit 15a05360a4
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 17:25:39 2024 +0300

    attempt to fix GetEnumerator resolving for compiled types

commit 4fd020d084
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 17:21:00 2024 +0300

    adding tests

* Add units case sensitive search (Not implemented in Intellisense)

* Fix Functions Forward Declarations

* Update Wrong Module Name Error Positionning

* Fix Errors with Global Statements

* Fix Function Before Declaration Usage Error

* Add return_statement

* Add Return Wrong Usage Error

* Errors Hot Fix

* Add Bigint Type

* Squashed commit of the following:

commit 7751fe7e75
Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
Date:   Sun Mar 16 13:28:03 2025 +0300

    generating language res file at build time (#3252)

commit d1fce63d69
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Mar 4 08:38:09 2025 +0300

    Сборка после pr SDK

commit d491e88aa7
Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
Date:   Mon Mar 3 20:34:51 2025 +0300

    migration to new build system (#3241)

    * converting project files into sdk style
    * new build commands
    * adding new dll into nsis
    * removing unused .cs files

commit 1fd348ec3c
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Feb 23 20:49:26 2025 +0300

    NSIS New 3.10

    Ярлык в меню Пуск у всех пользователей

commit 80b7182dc1
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Feb 19 11:50:00 2025 +0300

    _ in names

commit a2b078960b
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Feb 19 10:52:25 2025 +0300

    cnfc2

commit 58f26d469d
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Feb 18 22:28:13 2025 +0300

    перекомпиляция 3.10.3.3611

commit b78a72977f
Author: nevermind322 <81963698+nevermind322@users.noreply.github.com>
Date:   Tue Feb 18 22:02:19 2025 +0300

    fix build on mono (#3249)

    * fix build on mono

    * remove local func

    * fix again

commit c3557e388c
Author: Nikolay Kuznetsov <adasoft@gmail.com>
Date:   Sat Feb 15 20:32:46 2025 +0300

    Update GraphABC.pas (#3244)

    1. Быстрая реализация функции FloodFill
    Для этого добавлена процедура BitmapFloodFill, которая вызывается из метода Picture.FloodFill и процедуры FloodFill

    2.Добавлена поддержка LockDrawing/UnlockDrawing в процедуру FloodFill

commit 9dbac389e1
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Wed Feb 12 13:57:14 2025 +0300

    Add missing projects to pabcnetc.sln (#3247)

commit 41dfb6f187
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Fri Feb 7 21:41:01 2025 +0300

    [] - преобразование во все контейнеры

    GraphABCHelper - теперь ABCObjects работает под Линукс

    School исправлен согласно последним веяниям []

commit 79bbbd10ff
Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
Date:   Wed Jan 29 20:18:37 2025 +0300

    removing files for support fx4.0 (#3240)

commit 88d5c409eb
Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
Date:   Tue Jan 28 20:41:55 2025 +0300

    Рефакторинг PascalABCNET.xshd (#3237)

    * refactoring PascalABCNET.xshd

    * removing extra characters

commit 8fbd7fdfc3
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Jan 26 23:42:48 2025 +0300

    3.10.3
    faststrings
    EmptyCollection и преобразование ее в List, Dictionary
    t: (real,real) := (1,2)

commit bba132bd5d
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Jan 22 09:14:44 2025 +0300

    Поправил справку по функции

commit 1bd21857cc
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Jan 8 18:46:51 2025 +0300

    Teacher Control Plugin - возможность задать server.dat

commit 0848a1b796
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Jan 4 22:54:38 2025 +0300

    Исправление автоформатирования []

commit d45b782a7b
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Jan 4 18:45:07 2025 +0300

    Rename PABCSistem in test suite

commit c2347e604b
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Jan 4 14:44:51 2025 +0300

    Примеры - устранил неточности

    LightPT - имя сервера вынес в публичную секцию

commit b68b8da970
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Dec 17 15:52:18 2024 +0300

    Примеры Coords1.pas Coords2.pas.pas

commit 8a9788e6f9
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Dec 17 15:06:57 2024 +0300

    Перенес проверку set array на уровень парсера

    Немного поправил Intellisense по наведению для NewSet

    По точке там что то другое работает

commit 874ddebad3
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Dec 14 21:00:38 2024 +0300

    Поправил грамматику []

    Теперь нельзя в режиме ## использовать атрибуты

    Зато можно [1,2,3].Print

commit 080fb487e1
Merge: a53dcd9ed a484b0e82
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Dec 14 15:25:24 2024 +0300

    Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet

commit a53dcd9ed2
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Dec 14 15:25:16 2024 +0300

    SF Prm Cmb для строк

commit a484b0e82d
Author: Sun Serega <sunserega2@gmail.com>
Date:   Thu Dec 12 13:49:17 2024 +0200

    fix (#3231)

commit 6ef11f249c
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Dec 10 11:05:45 2024 +0300

    3.10.2

commit db9679d89f
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Dec 10 10:59:20 2024 +0300

    Закончил превращение синтаксиса [] по умолчанию в массивы

commit 45fdde24b4
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Sun Dec 8 18:08:00 2024 +0100

    #3229

commit 494b47624d
Merge: 5875b9929 7906d73da
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Sun Dec 8 10:42:07 2024 +0100

    Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet

commit 5875b99296
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Sun Dec 8 10:41:53 2024 +0100

    platformtarget native - .NET 9.0

commit 7906d73da3
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Dec 3 14:25:37 2024 +0300

    Небольшие изменения в реализации операций с множествами

commit 087591c7b6
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Nov 27 11:37:07 2024 +0300

    3.10.1

    Coords - доработки

    Distance, Middle, DrawText с фоном и рамкой. Глобальные переменные настройки

commit d268d4f83b
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Thu Nov 21 22:24:07 2024 +0300

    NSToBytes переделал с исключением

commit 2bacdc8c28
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Nov 20 13:20:33 2024 +0300

    Комментарии к NewSet

commit e917ac8eca
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Nov 20 12:42:15 2024 +0300

    TypeName для set

commit 206289c6a7
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Nov 19 20:23:03 2024 +0300

    Везде заменил _hs на hs в NewSet

    Убрал вызовы методов расширений NewSet в PABCSystem.pas

    Убрал var в operator +

commit d8262078f6
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Nov 19 13:56:47 2024 +0300

    Исправление мелких ошибок NewSet

    Все тесты проходят.

    Проблема, которая остаётся - в режиме ускорения такие программы падают:

    begin
      var s: set of byte;
      Print(s = [1]);
    end.

    Причина - из dll не вызывается конструктор записи без параметров, хотя он определён. В C# вообще у записей не может быть конструктора по умолчанию - наверное потому. Но для NewSet надо бы сделать исключение

commit f8819665ba
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Nov 16 10:56:11 2024 +0300

    NS2

commit 591d9ebe60
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Wed Nov 13 21:34:10 2024 +0100

    fix

commit c6505634f4
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Wed Nov 13 21:12:33 2024 +0100

    fix

commit a6564df23c
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Wed Nov 13 20:52:29 2024 +0100

    fix in new sets

commit 03be5bd931
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Nov 13 22:13:41 2024 +0300

    Переставил operator:= в NewSet

commit 96c68f1666
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Tue Nov 12 21:38:07 2024 +0100

    #3223

commit 82776f3c77
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Nov 9 12:18:19 2024 +0300

    NewSet - много мелких исправлений.

    Все тесты проходят кроме Tests 5 - видимо с pabcrtl.dll

commit fbd63efa89
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Nov 3 16:59:48 2024 +0300

    NewSets
    Некоторые тесты надо исправить

commit 746c4ae2c2
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Thu Oct 31 21:00:42 2024 +0100

    #3221

commit 350d07326d
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Thu Oct 31 18:35:51 2024 +0100

    #3221

commit aae9ab408b
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Thu Oct 31 18:25:06 2024 +0100

    #3221

commit 1e4a811e04
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Wed Oct 30 20:42:59 2024 +0100

    test for #3219

commit d1a1247ecd
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Wed Oct 30 20:24:16 2024 +0100

    #3219

commit 13b3071d80
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Mon Oct 28 22:42:17 2024 +0300

    закомментировал extensions преобразования arr to set. Надеюсь в новой реализации всё исправить

commit 6d5c18f457
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Thu Oct 24 10:17:48 2024 +0300

    SF XLSX.pas

commit 0c773a7ecb
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Oct 16 12:04:33 2024 +0300

    tree.xml с парой новых узлов для Питона

commit 53b3fd0881
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Oct 9 14:09:01 2024 +0300

    Добавил временное преобразование от array of T в set of T

commit 271d5792ce
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Tue Oct 8 10:00:14 2024 +0300

    Documentation (#3211)

    * Add Compiler documentation

    * Add Intellisense documentation

    * Move documentation folder to root directory

commit 79f9ab73a0
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Oct 5 15:33:20 2024 +0300

    PT4_32

commit 0a20c8d32c
Author: Sun Serega <sunserega2@gmail.com>
Date:   Thu Sep 26 09:02:31 2024 +0200

    Add `.DistinctBy` (#3122)

commit 11981dbf47
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Sep 25 11:53:02 2024 +0300

    IndexMinBy, IndexMaxBy
    MinBy, MaxBy - более эффективная реализация
    GraphWPF - SaveToClipboard

commit 3eb1d2bd85
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Sun Sep 22 17:42:09 2024 +0200

    #3197

commit 20edd487e3
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Sun Sep 22 12:39:03 2024 +0200

    #3204

commit 7261231c9c
Merge: 7debbe702 9ab932977
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Sun Sep 22 09:49:58 2024 +0200

    Merge pull request #3207 from AlexanderZemlyak/fix_linux_version

    Fix linux version

commit 9ab9329771
Author: AlexanderZemlyak <zemlyaksanya@mail.ru>
Date:   Sun Sep 22 10:23:18 2024 +0300

    Add new projects in PascalACBNETLinux.sln

commit 7debbe702a
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Sep 21 14:29:38 2024 +0300

    Критическое обновление LightPT

commit 40335b873e
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Fri Sep 20 22:58:46 2024 +0300

    LightPT - OutputListIsClearedFromSpaces := False;
    Coords - DrawLine

commit 078281db17
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Thu Sep 19 22:42:44 2024 +0300

    coords suite

commit 8d51f999a5
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Thu Sep 19 20:28:28 2024 +0300

    Автоклассы - разрешение наследования от классов без полей

    Модуль Coords

commit 8f7e92d418
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Mon Sep 16 08:25:43 2024 +0300

    Turtle переделал на паттерн Команда

commit a6f6d8a90b
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Sep 7 23:11:54 2024 +0300

    Правки рейтинга в TeacherPlugin

commit 2365eb3633
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Sep 7 15:54:15 2024 +0300

    LinkLabel в TeacherControlPlugin

commit 1835b811ef
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Sep 3 23:51:44 2024 +0300

    MathNet Signed

commit b23d6df9e9
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Sep 3 23:16:15 2024 +0300

    MathNet.Numerics.dll

commit 790fba67b8
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Aug 27 17:56:09 2024 +0300

    3.10.0

commit 1ec4204fd2
Author: Sun Serega <sunserega2@gmail.com>
Date:   Mon Aug 26 09:20:27 2024 +0300

    `.Batch` cleanup (#3108)

commit b5e674c311
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Mon Aug 26 09:12:14 2024 +0300

    3_10_0

commit 7face043cf
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Mon Aug 26 09:11:08 2024 +0300

    ToSet

commit e456ad528e
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Aug 24 23:13:57 2024 +0300

    3.9.0.3530

commit 3247469e6d
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Aug 24 22:55:27 2024 +0300

    Добавлен DrawPoints в Turtle

    Исправлена ошибка с отображением подписей в Y-координате

commit 7548142623
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Aug 24 14:27:53 2024 +0300

    1. Глобально.
    SetDecimalSeparator(',')
    SetNumberFormat(DecimalSeparator := ','  и куча других параметров)

    s.ToReal(nfi)
    s.ToReals(nfi)
    StrToReal(nfi)
    StrToFloat(nfi)
    FloatToStr(nfi)

    var nfi := NumberFormat(DecimalSeparator := ',')

    s.ToReal(DecimalSeparator := ',')
    s.ToReals(DecimalSeparator := ',')
    StrToReal(DecimalSeparator := ',')

commit d94885b950
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Aug 24 12:13:09 2024 +0300

    randomElement для строк

    .ToReals - разделителями могут быть пробел табуляция и переход на новую строку

    NumberFormat - функция, возвращающая nfi

commit ae2e26acf8
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Fri Aug 23 19:33:55 2024 +0300

    PT4 - новые dll файлы старых заданий серий A

commit 0f8aa6fa3c
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Aug 18 17:28:05 2024 +0300

    SetOf как основной синоним HSet

commit db4b53be20
Merge: 86852e0a5 b9fd59a84
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Aug 18 16:05:42 2024 +0300

    Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet

commit 86852e0a59
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Aug 18 16:05:14 2024 +0300

    School - ToBase(number: int64

commit b9fd59a840
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Tue Aug 13 15:08:44 2024 +0200

    #2830

commit 4f0b0f8ba0
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Tue Aug 13 14:43:49 2024 +0200

    #3194

commit e3ee0fed4c
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Tue Aug 13 13:49:30 2024 +0200

    #3097

commit d396c4a9fe
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Tue Aug 13 10:40:23 2024 +0200

    #3178

commit 0d846d2335
Merge: e91e35398 a65a86921
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Mon Aug 12 15:24:11 2024 +0200

    Merge pull request #3170 from samuraiGH/ForeachResolver-rework

    Foreach resolver rework

commit a65a869211
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Mon Aug 12 15:50:42 2024 +0300

    increasing pcu file version

commit e91e353984
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Aug 11 15:21:29 2024 +0300

    Обновленный модуль Turtle.pas

commit c18238df39
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Aug 6 20:18:57 2024 +0300

    3.9.0.3523

commit 1da2b524a6
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Aug 6 19:34:10 2024 +0300

    School PrimeDivisors

commit 47c61d8b14
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Fri Aug 2 10:48:07 2024 +0300

    New directive to disable linking pascal standard modules (#3186)

    * Add new 'disable standard units' directive and it's processing

    * Refactor InitializeNewUnit function

    * Improve disable standard units directive checks

    * Add null check in programs.cs to avoid error

    * Rename error related to disable standard units directive

    * Add referencing standard net libraries

    * Add checks for duplicates when injecting references

commit fc3ab96cae
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Fri Aug 2 10:46:40 2024 +0300

    Delete DocumentedUnits option and Exclude HelpBuilder project (#3192)

    * Delete CodeGeneration and PCUGenerate options from CompilerInternalDebug

    Достаточно их аналогов из CompilerOptions.

    * Add recreating CompilerOptions when reloading Compiler

    * Change Rebuild checkbox logic

    * Delete documented units fiels from CompilerInternalDebug

    * Revert "Delete CodeGeneration and PCUGenerate options from CompilerInternalDebug"

    This reverts commit 25e92b22722b7e251ab0156148fdf28ee3175c27.

    * Exclude HelpBuilder

commit 64acde6460
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Jul 31 18:21:04 2024 +0300

    Сделал возможным неявное приведение некоторого типа к array of T (при описании оператора в виде статической функции класса)

    School - IsPrime(n)

commit 3db5709101
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Jul 31 10:56:18 2024 +0300

    ZipCartesianFuncs.pas

commit c4fd47128b
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Jul 30 22:56:03 2024 +0300

    Zip, Cartesian - сделаны внешние функции до 5 параметров, в т.ч. с проекцией
    Zip, Cartesian - методы расширения дополнены чтобы было как во внешних
    Перегенерирована справка

commit 7d66f26d4f
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Mon Jul 1 00:16:43 2024 +0300

    cleanup and more tests

commit 464dc794a8
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Sun Jun 30 23:31:28 2024 +0300

    cleanup and more comments

commit 32f126370c
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Sun Jun 30 21:35:06 2024 +0300

    attempt to fix GetEnumerator resolving for Pascal types

commit fb3eeeb28b
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Sat Jun 29 16:26:35 2024 +0300

    fix tests

commit 84b0dfe537
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Sat Jun 29 15:49:13 2024 +0300

    fix getting MethodInfo

commit 5fa4d9fce7
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 22:45:07 2024 +0300

    cold fix set of T resolving

commit 460ce636ab
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 22:21:06 2024 +0300

    hot fix set of T resolving

commit 83c2f29ac6
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 21:53:11 2024 +0300

    fix method filtering again

commit c840a1a47a
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 21:32:41 2024 +0300

    fix type recovery

commit 2436627fdd
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 19:18:32 2024 +0300

    fixing method filtering

commit 15a05360a4
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 17:25:39 2024 +0300

    attempt to fix GetEnumerator resolving for compiled types

commit 4fd020d084
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 17:21:00 2024 +0300

    adding tests

* Fix Types Names in Errors

* Update Examples

* Try To Add Python's list[T]

* Add BackSlash Support

* Add ANIM examples

* Fix compilation context instance assigning

* Squashed commit of the following:

commit 771ea7b445
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Sun Apr 6 14:32:17 2025 +0200

    #3230

commit 28a1a03e8d
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Sun Apr 6 11:35:09 2025 +0200

    #3251

commit af7abc770b
Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
Date:   Sun Apr 6 08:33:34 2025 +0300

    synchronization of namespaces and folders for TeacherControlPlugin (#3262)

commit aae723b982
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Thu Apr 3 12:00:04 2025 +0300

    Create default syntax tree converter class (#3216)

    Для удобства разработчиков простых языков, которым не требуются дополнительные обходы синтаксического дерева.

commit f9cc90e50f
Author: Sun Serega <sunserega2@gmail.com>
Date:   Thu Apr 3 11:59:46 2025 +0300

    fix errors (#3260)

commit f85bfad60f
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Thu Apr 3 11:58:19 2025 +0300

    Intellisense memory leaks fix (#3257)

    * Fix memory leaks found for PABCSystem.pas

    Memory leaks of Interface and Implementation Unit Scopes fixed

    * Change open_files and recomp_files variables type to be Dictionary (not HashTable)

    * open_files Check simplification

    * Move TypeTable.Clear call to CodeCompletion Compile method

commit 7751fe7e75
Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
Date:   Sun Mar 16 13:28:03 2025 +0300

    generating language res file at build time (#3252)

commit d1fce63d69
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Mar 4 08:38:09 2025 +0300

    Сборка после pr SDK

commit d491e88aa7
Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
Date:   Mon Mar 3 20:34:51 2025 +0300

    migration to new build system (#3241)

    * converting project files into sdk style
    * new build commands
    * adding new dll into nsis
    * removing unused .cs files

commit 1fd348ec3c
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Feb 23 20:49:26 2025 +0300

    NSIS New 3.10

    Ярлык в меню Пуск у всех пользователей

commit 80b7182dc1
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Feb 19 11:50:00 2025 +0300

    _ in names

commit a2b078960b
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Feb 19 10:52:25 2025 +0300

    cnfc2

commit 58f26d469d
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Feb 18 22:28:13 2025 +0300

    перекомпиляция 3.10.3.3611

commit b78a72977f
Author: nevermind322 <81963698+nevermind322@users.noreply.github.com>
Date:   Tue Feb 18 22:02:19 2025 +0300

    fix build on mono (#3249)

    * fix build on mono

    * remove local func

    * fix again

commit c3557e388c
Author: Nikolay Kuznetsov <adasoft@gmail.com>
Date:   Sat Feb 15 20:32:46 2025 +0300

    Update GraphABC.pas (#3244)

    1. Быстрая реализация функции FloodFill
    Для этого добавлена процедура BitmapFloodFill, которая вызывается из метода Picture.FloodFill и процедуры FloodFill

    2.Добавлена поддержка LockDrawing/UnlockDrawing в процедуру FloodFill

commit 9dbac389e1
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Wed Feb 12 13:57:14 2025 +0300

    Add missing projects to pabcnetc.sln (#3247)

commit 41dfb6f187
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Fri Feb 7 21:41:01 2025 +0300

    [] - преобразование во все контейнеры

    GraphABCHelper - теперь ABCObjects работает под Линукс

    School исправлен согласно последним веяниям []

commit 79bbbd10ff
Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
Date:   Wed Jan 29 20:18:37 2025 +0300

    removing files for support fx4.0 (#3240)

commit 88d5c409eb
Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
Date:   Tue Jan 28 20:41:55 2025 +0300

    Рефакторинг PascalABCNET.xshd (#3237)

    * refactoring PascalABCNET.xshd

    * removing extra characters

commit 8fbd7fdfc3
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Jan 26 23:42:48 2025 +0300

    3.10.3
    faststrings
    EmptyCollection и преобразование ее в List, Dictionary
    t: (real,real) := (1,2)

commit bba132bd5d
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Jan 22 09:14:44 2025 +0300

    Поправил справку по функции

commit 1bd21857cc
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Jan 8 18:46:51 2025 +0300

    Teacher Control Plugin - возможность задать server.dat

commit 0848a1b796
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Jan 4 22:54:38 2025 +0300

    Исправление автоформатирования []

commit d45b782a7b
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Jan 4 18:45:07 2025 +0300

    Rename PABCSistem in test suite

commit c2347e604b
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Jan 4 14:44:51 2025 +0300

    Примеры - устранил неточности

    LightPT - имя сервера вынес в публичную секцию

commit b68b8da970
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Dec 17 15:52:18 2024 +0300

    Примеры Coords1.pas Coords2.pas.pas

commit 8a9788e6f9
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Dec 17 15:06:57 2024 +0300

    Перенес проверку set array на уровень парсера

    Немного поправил Intellisense по наведению для NewSet

    По точке там что то другое работает

commit 874ddebad3
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Dec 14 21:00:38 2024 +0300

    Поправил грамматику []

    Теперь нельзя в режиме ## использовать атрибуты

    Зато можно [1,2,3].Print

commit 080fb487e1
Merge: a53dcd9ed a484b0e82
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Dec 14 15:25:24 2024 +0300

    Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet

commit a53dcd9ed2
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Dec 14 15:25:16 2024 +0300

    SF Prm Cmb для строк

commit a484b0e82d
Author: Sun Serega <sunserega2@gmail.com>
Date:   Thu Dec 12 13:49:17 2024 +0200

    fix (#3231)

commit 6ef11f249c
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Dec 10 11:05:45 2024 +0300

    3.10.2

commit db9679d89f
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Dec 10 10:59:20 2024 +0300

    Закончил превращение синтаксиса [] по умолчанию в массивы

commit 45fdde24b4
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Sun Dec 8 18:08:00 2024 +0100

    #3229

commit 494b47624d
Merge: 5875b9929 7906d73da
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Sun Dec 8 10:42:07 2024 +0100

    Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet

commit 5875b99296
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Sun Dec 8 10:41:53 2024 +0100

    platformtarget native - .NET 9.0

commit 7906d73da3
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Dec 3 14:25:37 2024 +0300

    Небольшие изменения в реализации операций с множествами

commit 087591c7b6
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Nov 27 11:37:07 2024 +0300

    3.10.1

    Coords - доработки

    Distance, Middle, DrawText с фоном и рамкой. Глобальные переменные настройки

commit d268d4f83b
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Thu Nov 21 22:24:07 2024 +0300

    NSToBytes переделал с исключением

commit 2bacdc8c28
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Nov 20 13:20:33 2024 +0300

    Комментарии к NewSet

commit e917ac8eca
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Nov 20 12:42:15 2024 +0300

    TypeName для set

commit 206289c6a7
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Nov 19 20:23:03 2024 +0300

    Везде заменил _hs на hs в NewSet

    Убрал вызовы методов расширений NewSet в PABCSystem.pas

    Убрал var в operator +

commit d8262078f6
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Nov 19 13:56:47 2024 +0300

    Исправление мелких ошибок NewSet

    Все тесты проходят.

    Проблема, которая остаётся - в режиме ускорения такие программы падают:

    begin
      var s: set of byte;
      Print(s = [1]);
    end.

    Причина - из dll не вызывается конструктор записи без параметров, хотя он определён. В C# вообще у записей не может быть конструктора по умолчанию - наверное потому. Но для NewSet надо бы сделать исключение

commit f8819665ba
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Nov 16 10:56:11 2024 +0300

    NS2

commit 591d9ebe60
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Wed Nov 13 21:34:10 2024 +0100

    fix

commit c6505634f4
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Wed Nov 13 21:12:33 2024 +0100

    fix

commit a6564df23c
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Wed Nov 13 20:52:29 2024 +0100

    fix in new sets

commit 03be5bd931
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Nov 13 22:13:41 2024 +0300

    Переставил operator:= в NewSet

commit 96c68f1666
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Tue Nov 12 21:38:07 2024 +0100

    #3223

commit 82776f3c77
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Nov 9 12:18:19 2024 +0300

    NewSet - много мелких исправлений.

    Все тесты проходят кроме Tests 5 - видимо с pabcrtl.dll

commit fbd63efa89
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Nov 3 16:59:48 2024 +0300

    NewSets
    Некоторые тесты надо исправить

commit 746c4ae2c2
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Thu Oct 31 21:00:42 2024 +0100

    #3221

commit 350d07326d
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Thu Oct 31 18:35:51 2024 +0100

    #3221

commit aae9ab408b
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Thu Oct 31 18:25:06 2024 +0100

    #3221

commit 1e4a811e04
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Wed Oct 30 20:42:59 2024 +0100

    test for #3219

commit d1a1247ecd
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Wed Oct 30 20:24:16 2024 +0100

    #3219

commit 13b3071d80
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Mon Oct 28 22:42:17 2024 +0300

    закомментировал extensions преобразования arr to set. Надеюсь в новой реализации всё исправить

commit 6d5c18f457
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Thu Oct 24 10:17:48 2024 +0300

    SF XLSX.pas

commit 0c773a7ecb
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Oct 16 12:04:33 2024 +0300

    tree.xml с парой новых узлов для Питона

commit 53b3fd0881
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Oct 9 14:09:01 2024 +0300

    Добавил временное преобразование от array of T в set of T

commit 271d5792ce
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Tue Oct 8 10:00:14 2024 +0300

    Documentation (#3211)

    * Add Compiler documentation

    * Add Intellisense documentation

    * Move documentation folder to root directory

commit 79f9ab73a0
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Oct 5 15:33:20 2024 +0300

    PT4_32

commit 0a20c8d32c
Author: Sun Serega <sunserega2@gmail.com>
Date:   Thu Sep 26 09:02:31 2024 +0200

    Add `.DistinctBy` (#3122)

commit 11981dbf47
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Sep 25 11:53:02 2024 +0300

    IndexMinBy, IndexMaxBy
    MinBy, MaxBy - более эффективная реализация
    GraphWPF - SaveToClipboard

commit 3eb1d2bd85
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Sun Sep 22 17:42:09 2024 +0200

    #3197

commit 20edd487e3
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Sun Sep 22 12:39:03 2024 +0200

    #3204

commit 7261231c9c
Merge: 7debbe702 9ab932977
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Sun Sep 22 09:49:58 2024 +0200

    Merge pull request #3207 from AlexanderZemlyak/fix_linux_version

    Fix linux version

commit 9ab9329771
Author: AlexanderZemlyak <zemlyaksanya@mail.ru>
Date:   Sun Sep 22 10:23:18 2024 +0300

    Add new projects in PascalACBNETLinux.sln

commit 7debbe702a
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Sep 21 14:29:38 2024 +0300

    Критическое обновление LightPT

commit 40335b873e
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Fri Sep 20 22:58:46 2024 +0300

    LightPT - OutputListIsClearedFromSpaces := False;
    Coords - DrawLine

commit 078281db17
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Thu Sep 19 22:42:44 2024 +0300

    coords suite

commit 8d51f999a5
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Thu Sep 19 20:28:28 2024 +0300

    Автоклассы - разрешение наследования от классов без полей

    Модуль Coords

commit 8f7e92d418
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Mon Sep 16 08:25:43 2024 +0300

    Turtle переделал на паттерн Команда

commit a6f6d8a90b
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Sep 7 23:11:54 2024 +0300

    Правки рейтинга в TeacherPlugin

commit 2365eb3633
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Sep 7 15:54:15 2024 +0300

    LinkLabel в TeacherControlPlugin

commit 1835b811ef
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Sep 3 23:51:44 2024 +0300

    MathNet Signed

commit b23d6df9e9
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Sep 3 23:16:15 2024 +0300

    MathNet.Numerics.dll

commit 790fba67b8
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Aug 27 17:56:09 2024 +0300

    3.10.0

commit 1ec4204fd2
Author: Sun Serega <sunserega2@gmail.com>
Date:   Mon Aug 26 09:20:27 2024 +0300

    `.Batch` cleanup (#3108)

commit b5e674c311
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Mon Aug 26 09:12:14 2024 +0300

    3_10_0

commit 7face043cf
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Mon Aug 26 09:11:08 2024 +0300

    ToSet

commit e456ad528e
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Aug 24 23:13:57 2024 +0300

    3.9.0.3530

commit 3247469e6d
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Aug 24 22:55:27 2024 +0300

    Добавлен DrawPoints в Turtle

    Исправлена ошибка с отображением подписей в Y-координате

commit 7548142623
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Aug 24 14:27:53 2024 +0300

    1. Глобально.
    SetDecimalSeparator(',')
    SetNumberFormat(DecimalSeparator := ','  и куча других параметров)

    s.ToReal(nfi)
    s.ToReals(nfi)
    StrToReal(nfi)
    StrToFloat(nfi)
    FloatToStr(nfi)

    var nfi := NumberFormat(DecimalSeparator := ',')

    s.ToReal(DecimalSeparator := ',')
    s.ToReals(DecimalSeparator := ',')
    StrToReal(DecimalSeparator := ',')

commit d94885b950
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Aug 24 12:13:09 2024 +0300

    randomElement для строк

    .ToReals - разделителями могут быть пробел табуляция и переход на новую строку

    NumberFormat - функция, возвращающая nfi

commit ae2e26acf8
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Fri Aug 23 19:33:55 2024 +0300

    PT4 - новые dll файлы старых заданий серий A

commit 0f8aa6fa3c
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Aug 18 17:28:05 2024 +0300

    SetOf как основной синоним HSet

commit db4b53be20
Merge: 86852e0a5 b9fd59a84
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Aug 18 16:05:42 2024 +0300

    Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet

commit 86852e0a59
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Aug 18 16:05:14 2024 +0300

    School - ToBase(number: int64

commit b9fd59a840
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Tue Aug 13 15:08:44 2024 +0200

    #2830

commit 4f0b0f8ba0
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Tue Aug 13 14:43:49 2024 +0200

    #3194

commit e3ee0fed4c
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Tue Aug 13 13:49:30 2024 +0200

    #3097

commit d396c4a9fe
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Tue Aug 13 10:40:23 2024 +0200

    #3178

commit 0d846d2335
Merge: e91e35398 a65a86921
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Mon Aug 12 15:24:11 2024 +0200

    Merge pull request #3170 from samuraiGH/ForeachResolver-rework

    Foreach resolver rework

commit a65a869211
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Mon Aug 12 15:50:42 2024 +0300

    increasing pcu file version

commit e91e353984
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Aug 11 15:21:29 2024 +0300

    Обновленный модуль Turtle.pas

commit c18238df39
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Aug 6 20:18:57 2024 +0300

    3.9.0.3523

commit 1da2b524a6
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Aug 6 19:34:10 2024 +0300

    School PrimeDivisors

commit 47c61d8b14
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Fri Aug 2 10:48:07 2024 +0300

    New directive to disable linking pascal standard modules (#3186)

    * Add new 'disable standard units' directive and it's processing

    * Refactor InitializeNewUnit function

    * Improve disable standard units directive checks

    * Add null check in programs.cs to avoid error

    * Rename error related to disable standard units directive

    * Add referencing standard net libraries

    * Add checks for duplicates when injecting references

commit fc3ab96cae
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Fri Aug 2 10:46:40 2024 +0300

    Delete DocumentedUnits option and Exclude HelpBuilder project (#3192)

    * Delete CodeGeneration and PCUGenerate options from CompilerInternalDebug

    Достаточно их аналогов из CompilerOptions.

    * Add recreating CompilerOptions when reloading Compiler

    * Change Rebuild checkbox logic

    * Delete documented units fiels from CompilerInternalDebug

    * Revert "Delete CodeGeneration and PCUGenerate options from CompilerInternalDebug"

    This reverts commit 25e92b22722b7e251ab0156148fdf28ee3175c27.

    * Exclude HelpBuilder

commit 64acde6460
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Jul 31 18:21:04 2024 +0300

    Сделал возможным неявное приведение некоторого типа к array of T (при описании оператора в виде статической функции класса)

    School - IsPrime(n)

commit 3db5709101
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Jul 31 10:56:18 2024 +0300

    ZipCartesianFuncs.pas

commit c4fd47128b
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Jul 30 22:56:03 2024 +0300

    Zip, Cartesian - сделаны внешние функции до 5 параметров, в т.ч. с проекцией
    Zip, Cartesian - методы расширения дополнены чтобы было как во внешних
    Перегенерирована справка

commit 7d66f26d4f
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Mon Jul 1 00:16:43 2024 +0300

    cleanup and more tests

commit 464dc794a8
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Sun Jun 30 23:31:28 2024 +0300

    cleanup and more comments

commit 32f126370c
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Sun Jun 30 21:35:06 2024 +0300

    attempt to fix GetEnumerator resolving for Pascal types

commit fb3eeeb28b
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Sat Jun 29 16:26:35 2024 +0300

    fix tests

commit 84b0dfe537
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Sat Jun 29 15:49:13 2024 +0300

    fix getting MethodInfo

commit 5fa4d9fce7
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 22:45:07 2024 +0300

    cold fix set of T resolving

commit 460ce636ab
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 22:21:06 2024 +0300

    hot fix set of T resolving

commit 83c2f29ac6
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 21:53:11 2024 +0300

    fix method filtering again

commit c840a1a47a
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 21:32:41 2024 +0300

    fix type recovery

commit 2436627fdd
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 19:18:32 2024 +0300

    fixing method filtering

commit 15a05360a4
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 17:25:39 2024 +0300

    attempt to fix GetEnumerator resolving for compiled types

commit 4fd020d084
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 17:21:00 2024 +0300

    adding tests

* Fix DefaultSyntaxTreeConverter

* Update some comments in spython_syntax_tree_visitor

* Configure Intellisense - first step

* DomSyntaxTreeVisitor fixes

* Add implementation for parser methods used by Intellisense

* Add declarations_as_statement visit in DomSyntaxTreeVisitor implementation

* Refactor CodeCompletion.cs

* Fix Intellisense case sensitive units search

* Squashed commit of the following:

commit bb7962ff859946a71ded0df465d024c14559cb04
Merge: 71261ded1 aae723b98
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Thu Apr 3 12:23:21 2025 +0300

    Merge branch 'master' into intellisense_refactoring

commit 71261ded190a40dcf2301f37b4ac70356cfb35af
Author: AlexanderZemlyak <zemlyaksanya@mail.ru>
Date:   Thu Apr 3 12:16:52 2025 +0300

    Update comments in PascalABCLanguageInformation

commit aae723b982
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Thu Apr 3 12:00:04 2025 +0300

    Create default syntax tree converter class (#3216)

    Для удобства разработчиков простых языков, которым не требуются дополнительные обходы синтаксического дерева.

commit f9cc90e50f
Author: Sun Serega <sunserega2@gmail.com>
Date:   Thu Apr 3 11:59:46 2025 +0300

    fix errors (#3260)

commit f85bfad60f
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Thu Apr 3 11:58:19 2025 +0300

    Intellisense memory leaks fix (#3257)

    * Fix memory leaks found for PABCSystem.pas

    Memory leaks of Interface and Implementation Unit Scopes fixed

    * Change open_files and recomp_files variables type to be Dictionary (not HashTable)

    * open_files Check simplification

    * Move TypeTable.Clear call to CodeCompletion Compile method

commit d52ce0d4c86ec1fb6962db33a8dc774b69fddd69
Author: AlexanderZemlyak <zemlyaksanya@mail.ru>
Date:   Thu Apr 3 11:15:02 2025 +0300

    Squashed commit of the following:

    commit 7751fe7e75
    Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
    Date:   Sun Mar 16 13:28:03 2025 +0300

        generating language res file at build time (#3252)

    commit d1fce63d69
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Mar 4 08:38:09 2025 +0300

        Сборка после pr SDK

    commit d491e88aa7
    Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
    Date:   Mon Mar 3 20:34:51 2025 +0300

        migration to new build system (#3241)

        * converting project files into sdk style
        * new build commands
        * adding new dll into nsis
        * removing unused .cs files

    commit 1fd348ec3c
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sun Feb 23 20:49:26 2025 +0300

        NSIS New 3.10

        Ярлык в меню Пуск у всех пользователей

    commit 80b7182dc1
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Feb 19 11:50:00 2025 +0300

        _ in names

    commit a2b078960b
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Feb 19 10:52:25 2025 +0300

        cnfc2

    commit 58f26d469d
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Feb 18 22:28:13 2025 +0300

        перекомпиляция 3.10.3.3611

    commit b78a72977f
    Author: nevermind322 <81963698+nevermind322@users.noreply.github.com>
    Date:   Tue Feb 18 22:02:19 2025 +0300

        fix build on mono (#3249)

        * fix build on mono

        * remove local func

        * fix again

    commit c3557e388c
    Author: Nikolay Kuznetsov <adasoft@gmail.com>
    Date:   Sat Feb 15 20:32:46 2025 +0300

        Update GraphABC.pas (#3244)

        1. Быстрая реализация функции FloodFill
        Для этого добавлена процедура BitmapFloodFill, которая вызывается из метода Picture.FloodFill и процедуры FloodFill

        2.Добавлена поддержка LockDrawing/UnlockDrawing в процедуру FloodFill

    commit 9dbac389e1
    Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
    Date:   Wed Feb 12 13:57:14 2025 +0300

        Add missing projects to pabcnetc.sln (#3247)

    commit 41dfb6f187
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Fri Feb 7 21:41:01 2025 +0300

        [] - преобразование во все контейнеры

        GraphABCHelper - теперь ABCObjects работает под Линукс

        School исправлен согласно последним веяниям []

    commit 79bbbd10ff
    Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
    Date:   Wed Jan 29 20:18:37 2025 +0300

        removing files for support fx4.0 (#3240)

    commit 88d5c409eb
    Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
    Date:   Tue Jan 28 20:41:55 2025 +0300

        Рефакторинг PascalABCNET.xshd (#3237)

        * refactoring PascalABCNET.xshd

        * removing extra characters

    commit 8fbd7fdfc3
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sun Jan 26 23:42:48 2025 +0300

        3.10.3
        faststrings
        EmptyCollection и преобразование ее в List, Dictionary
        t: (real,real) := (1,2)

    commit bba132bd5d
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Jan 22 09:14:44 2025 +0300

        Поправил справку по функции

    commit 1bd21857cc
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Jan 8 18:46:51 2025 +0300

        Teacher Control Plugin - возможность задать server.dat

    commit 0848a1b796
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Jan 4 22:54:38 2025 +0300

        Исправление автоформатирования []

    commit d45b782a7b
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Jan 4 18:45:07 2025 +0300

        Rename PABCSistem in test suite

    commit c2347e604b
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Jan 4 14:44:51 2025 +0300

        Примеры - устранил неточности

        LightPT - имя сервера вынес в публичную секцию

    commit b68b8da970
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Dec 17 15:52:18 2024 +0300

        Примеры Coords1.pas Coords2.pas.pas

    commit 8a9788e6f9
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Dec 17 15:06:57 2024 +0300

        Перенес проверку set array на уровень парсера

        Немного поправил Intellisense по наведению для NewSet

        По точке там что то другое работает

    commit 874ddebad3
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Dec 14 21:00:38 2024 +0300

        Поправил грамматику []

        Теперь нельзя в режиме ## использовать атрибуты

        Зато можно [1,2,3].Print

    commit 080fb487e1
    Merge: a53dcd9ed a484b0e82
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Dec 14 15:25:24 2024 +0300

        Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet

    commit a53dcd9ed2
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Dec 14 15:25:16 2024 +0300

        SF Prm Cmb для строк

    commit a484b0e82d
    Author: Sun Serega <sunserega2@gmail.com>
    Date:   Thu Dec 12 13:49:17 2024 +0200

        fix (#3231)

    commit 6ef11f249c
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Dec 10 11:05:45 2024 +0300

        3.10.2

    commit db9679d89f
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Dec 10 10:59:20 2024 +0300

        Закончил превращение синтаксиса [] по умолчанию в массивы

    commit 45fdde24b4
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Sun Dec 8 18:08:00 2024 +0100

        #3229

    commit 494b47624d
    Merge: 5875b9929 7906d73da
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Sun Dec 8 10:42:07 2024 +0100

        Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet

    commit 5875b99296
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Sun Dec 8 10:41:53 2024 +0100

        platformtarget native - .NET 9.0

    commit 7906d73da3
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Dec 3 14:25:37 2024 +0300

        Небольшие изменения в реализации операций с множествами

    commit 087591c7b6
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Nov 27 11:37:07 2024 +0300

        3.10.1

        Coords - доработки

        Distance, Middle, DrawText с фоном и рамкой. Глобальные переменные настройки

    commit d268d4f83b
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Thu Nov 21 22:24:07 2024 +0300

        NSToBytes переделал с исключением

    commit 2bacdc8c28
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Nov 20 13:20:33 2024 +0300

        Комментарии к NewSet

    commit e917ac8eca
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Nov 20 12:42:15 2024 +0300

        TypeName для set

    commit 206289c6a7
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Nov 19 20:23:03 2024 +0300

        Везде заменил _hs на hs в NewSet

        Убрал вызовы методов расширений NewSet в PABCSystem.pas

        Убрал var в operator +

    commit d8262078f6
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Nov 19 13:56:47 2024 +0300

        Исправление мелких ошибок NewSet

        Все тесты проходят.

        Проблема, которая остаётся - в режиме ускорения такие программы падают:

        begin
          var s: set of byte;
          Print(s = [1]);
        end.

        Причина - из dll не вызывается конструктор записи без параметров, хотя он определён. В C# вообще у записей не может быть конструктора по умолчанию - наверное потому. Но для NewSet надо бы сделать исключение

    commit f8819665ba
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Nov 16 10:56:11 2024 +0300

        NS2

    commit 591d9ebe60
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Wed Nov 13 21:34:10 2024 +0100

        fix

    commit c6505634f4
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Wed Nov 13 21:12:33 2024 +0100

        fix

    commit a6564df23c
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Wed Nov 13 20:52:29 2024 +0100

        fix in new sets

    commit 03be5bd931
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Nov 13 22:13:41 2024 +0300

        Переставил operator:= в NewSet

    commit 96c68f1666
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Tue Nov 12 21:38:07 2024 +0100

        #3223

    commit 82776f3c77
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Nov 9 12:18:19 2024 +0300

        NewSet - много мелких исправлений.

        Все тесты проходят кроме Tests 5 - видимо с pabcrtl.dll

commit 7751fe7e75
Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
Date:   Sun Mar 16 13:28:03 2025 +0300

    generating language res file at build time (#3252)

commit d1fce63d69
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Mar 4 08:38:09 2025 +0300

    Сборка после pr SDK

commit d491e88aa7
Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
Date:   Mon Mar 3 20:34:51 2025 +0300

    migration to new build system (#3241)

    * converting project files into sdk style
    * new build commands
    * adding new dll into nsis
    * removing unused .cs files

commit 1fd348ec3c
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Feb 23 20:49:26 2025 +0300

    NSIS New 3.10

    Ярлык в меню Пуск у всех пользователей

commit 80b7182dc1
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Feb 19 11:50:00 2025 +0300

    _ in names

commit a2b078960b
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Feb 19 10:52:25 2025 +0300

    cnfc2

commit 58f26d469d
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Feb 18 22:28:13 2025 +0300

    перекомпиляция 3.10.3.3611

commit b78a72977f
Author: nevermind322 <81963698+nevermind322@users.noreply.github.com>
Date:   Tue Feb 18 22:02:19 2025 +0300

    fix build on mono (#3249)

    * fix build on mono

    * remove local func

    * fix again

commit c3557e388c
Author: Nikolay Kuznetsov <adasoft@gmail.com>
Date:   Sat Feb 15 20:32:46 2025 +0300

    Update GraphABC.pas (#3244)

    1. Быстрая реализация функции FloodFill
    Для этого добавлена процедура BitmapFloodFill, которая вызывается из метода Picture.FloodFill и процедуры FloodFill

    2.Добавлена поддержка LockDrawing/UnlockDrawing в процедуру FloodFill

commit 9dbac389e1
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Wed Feb 12 13:57:14 2025 +0300

    Add missing projects to pabcnetc.sln (#3247)

commit 41dfb6f187
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Fri Feb 7 21:41:01 2025 +0300

    [] - преобразование во все контейнеры

    GraphABCHelper - теперь ABCObjects работает под Линукс

    School исправлен согласно последним веяниям []

commit 79bbbd10ff
Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
Date:   Wed Jan 29 20:18:37 2025 +0300

    removing files for support fx4.0 (#3240)

commit 88d5c409eb
Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
Date:   Tue Jan 28 20:41:55 2025 +0300

    Рефакторинг PascalABCNET.xshd (#3237)

    * refactoring PascalABCNET.xshd

    * removing extra characters

commit 8fbd7fdfc3
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Jan 26 23:42:48 2025 +0300

    3.10.3
    faststrings
    EmptyCollection и преобразование ее в List, Dictionary
    t: (real,real) := (1,2)

commit bba132bd5d
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Jan 22 09:14:44 2025 +0300

    Поправил справку по функции

commit 1bd21857cc
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Jan 8 18:46:51 2025 +0300

    Teacher Control Plugin - возможность задать server.dat

commit 0848a1b796
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Jan 4 22:54:38 2025 +0300

    Исправление автоформатирования []

commit d45b782a7b
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Jan 4 18:45:07 2025 +0300

    Rename PABCSistem in test suite

commit c2347e604b
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Jan 4 14:44:51 2025 +0300

    Примеры - устранил неточности

    LightPT - имя сервера вынес в публичную секцию

commit b68b8da970
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Dec 17 15:52:18 2024 +0300

    Примеры Coords1.pas Coords2.pas.pas

commit 8a9788e6f9
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Dec 17 15:06:57 2024 +0300

    Перенес проверку set array на уровень парсера

    Немного поправил Intellisense по наведению для NewSet

    По точке там что то другое работает

commit 874ddebad3
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Dec 14 21:00:38 2024 +0300

    Поправил грамматику []

    Теперь нельзя в режиме ## использовать атрибуты

    Зато можно [1,2,3].Print

commit 080fb487e1
Merge: a53dcd9ed a484b0e82
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Dec 14 15:25:24 2024 +0300

    Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet

commit a53dcd9ed2
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Dec 14 15:25:16 2024 +0300

    SF Prm Cmb для строк

commit a484b0e82d
Author: Sun Serega <sunserega2@gmail.com>
Date:   Thu Dec 12 13:49:17 2024 +0200

    fix (#3231)

commit 6ef11f249c
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Dec 10 11:05:45 2024 +0300

    3.10.2

commit db9679d89f
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Dec 10 10:59:20 2024 +0300

    Закончил превращение синтаксиса [] по умолчанию в массивы

commit 45fdde24b4
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Sun Dec 8 18:08:00 2024 +0100

    #3229

commit 494b47624d
Merge: 5875b9929 7906d73da
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Sun Dec 8 10:42:07 2024 +0100

    Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet

commit 5875b99296
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Sun Dec 8 10:41:53 2024 +0100

    platformtarget native - .NET 9.0

commit 7906d73da3
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Dec 3 14:25:37 2024 +0300

    Небольшие изменения в реализации операций с множествами

commit 087591c7b6
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Nov 27 11:37:07 2024 +0300

    3.10.1

    Coords - доработки

    Distance, Middle, DrawText с фоном и рамкой. Глобальные переменные настройки

commit d268d4f83b
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Thu Nov 21 22:24:07 2024 +0300

    NSToBytes переделал с исключением

commit 2bacdc8c28
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Nov 20 13:20:33 2024 +0300

    Комментарии к NewSet

commit e917ac8eca
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Nov 20 12:42:15 2024 +0300

    TypeName для set

commit 206289c6a7
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Nov 19 20:23:03 2024 +0300

    Везде заменил _hs на hs в NewSet

    Убрал вызовы методов расширений NewSet в PABCSystem.pas

    Убрал var в operator +

commit d8262078f6
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Nov 19 13:56:47 2024 +0300

    Исправление мелких ошибок NewSet

    Все тесты проходят.

    Проблема, которая остаётся - в режиме ускорения такие программы падают:

    begin
      var s: set of byte;
      Print(s = [1]);
    end.

    Причина - из dll не вызывается конструктор записи без параметров, хотя он определён. В C# вообще у записей не может быть конструктора по умолчанию - наверное потому. Но для NewSet надо бы сделать исключение

commit f8819665ba
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Nov 16 10:56:11 2024 +0300

    NS2

commit 591d9ebe60
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Wed Nov 13 21:34:10 2024 +0100

    fix

commit c6505634f4
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Wed Nov 13 21:12:33 2024 +0100

    fix

commit a6564df23c
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Wed Nov 13 20:52:29 2024 +0100

    fix in new sets

commit 03be5bd931
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Nov 13 22:13:41 2024 +0300

    Переставил operator:= в NewSet

commit 96c68f1666
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Tue Nov 12 21:38:07 2024 +0100

    #3223

commit a11bb9e9c6271e359fde6050e95d98950e946fbd
Author: AlexanderZemlyak <zemlyaksanya@mail.ru>
Date:   Sun Nov 10 19:43:45 2024 +0300

    Fix encoding

commit 2c0fba643e45914b8f5350356e1c24b3c3cf3685
Author: AlexanderZemlyak <zemlyaksanya@mail.ru>
Date:   Sun Nov 10 19:21:54 2024 +0300

    Fix build error

commit f813a4ff99936dabdcfda40ce5beea2ba41aed53
Author: AlexanderZemlyak <zemlyaksanya@mail.ru>
Date:   Sun Nov 10 19:08:44 2024 +0300

    Update intellisense documentation

commit 8414c7ae1d6ed296a86e56975d84949a6e471a25
Author: AlexanderZemlyak <zemlyaksanya@mail.ru>
Date:   Sun Nov 10 19:08:03 2024 +0300

    Another iteration of refactoring in CodeCompletionProvider + comments

commit 340ef9a0e9bc40f7bda0cde8dccb86c94dc6c8cb
Author: AlexanderZemlyak <zemlyaksanya@mail.ru>
Date:   Sun Nov 10 14:51:56 2024 +0300

    Fix GetCompletionDataByFirst behaviour when getting symInfos after uses keyword

commit 82776f3c77
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Nov 9 12:18:19 2024 +0300

    NewSet - много мелких исправлений.

    Все тесты проходят кроме Tests 5 - видимо с pabcrtl.dll

commit 8e9e7f94d094e528aeb9bd0db322005b08e31ee3
Merge: ea3c878eb fbd63efa8
Author: AlexanderZemlyak <zemlyaksanya@mail.ru>
Date:   Fri Nov 8 14:47:33 2024 +0300

    Merge branch 'master' into intellisense_refactoring

commit fbd63efa89
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Nov 3 16:59:48 2024 +0300

    NewSets
    Некоторые тесты надо исправить

commit 746c4ae2c2
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Thu Oct 31 21:00:42 2024 +0100

    #3221

commit 350d07326d
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Thu Oct 31 18:35:51 2024 +0100

    #3221

commit aae9ab408b
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Thu Oct 31 18:25:06 2024 +0100

    #3221

commit 1e4a811e04
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Wed Oct 30 20:42:59 2024 +0100

    test for #3219

commit d1a1247ecd
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Wed Oct 30 20:24:16 2024 +0100

    #3219

commit 13b3071d80
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Mon Oct 28 22:42:17 2024 +0300

    закомментировал extensions преобразования arr to set. Надеюсь в новой реализации всё исправить

commit ea3c878eb27a268d50272838a36508511f1096ee
Author: AlexanderZemlyak <zemlyaksanya@mail.ru>
Date:   Sun Oct 27 22:40:40 2024 +0300

    Refactor GetCompletionDataByFirst method

commit 6d5c18f457
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Thu Oct 24 10:17:48 2024 +0300

    SF XLSX.pas

commit 0ae57063a798ec7dc4979a1cea32371034794907
Author: AlexanderZemlyak <zemlyaksanya@mail.ru>
Date:   Tue Oct 22 12:54:05 2024 +0300

    Replace dollar service character in CodeCompletion by separate boolean (ctrlSpaceAfterDot))

commit 89a02c2867b41cb12020a31867667c89f9fbb848
Author: AlexanderZemlyak <zemlyaksanya@mail.ru>
Date:   Tue Oct 22 10:48:21 2024 +0300

    Extract shift space actions in separate class

commit cb24d274969f67255c7cb253fbc36d25d6aaa2be
Author: AlexanderZemlyak <zemlyaksanya@mail.ru>
Date:   Sun Oct 20 22:54:32 2024 +0300

    Refactor CodeCompletionProvider (first iteration)

commit 10b16014b8e19fac339752466b1733359675a052
Author: AlexanderZemlyak <zemlyaksanya@mail.ru>
Date:   Sun Oct 20 18:14:06 2024 +0300

    Add check that we parsing PascalABC.NET in GetPopupHintText

    Временное решение, нужно будет вынести вторую попытку в интерфейс парсера.

commit 4057884d749788726bc095581d1519ff8fec7037
Merge: d95eab790 0c773a7ec
Author: AlexanderZemlyak <zemlyaksanya@mail.ru>
Date:   Sun Oct 20 17:33:07 2024 +0300

    Merge branch 'master' into intellisense_refactoring

commit 0c773a7ecb
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Oct 16 12:04:33 2024 +0300

    tree.xml с парой новых узлов для Питона

commit d95eab790c41cb2f8ac38be997ca81af30ee22be
Author: AlexanderZemlyak <zemlyaksanya@mail.ru>
Date:   Thu Oct 10 14:14:43 2024 +0300

    Delete other cases of ampersend inserting

commit b2aaa157c1ae1965ae2a20eb3e5454f4df37b1a8
Author: AlexanderZemlyak <zemlyaksanya@mail.ru>
Date:   Wed Oct 9 22:48:37 2024 +0300

    Basic refactoring of GetPopupHintText + delete ampersend inserting

commit 4554bd5581bdf61601e454650a34422c8bf93c0c
Author: AlexanderZemlyak <zemlyaksanya@mail.ru>
Date:   Wed Oct 9 18:56:23 2024 +0300

    Move ValidDirectives field to ILanguageInformation

commit 53b3fd0881
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Oct 9 14:09:01 2024 +0300

    Добавил временное преобразование от array of T в set of T

commit d8b05d3d80500fc10cb964a5ec62c7244e4993f8
Author: AlexanderZemlyak <zemlyaksanya@mail.ru>
Date:   Wed Oct 9 09:53:35 2024 +0300

    Fix inaccuracy in BaseKeywords.cs

commit c45f66baf5a159d07ddc7ded63bad56387799fc1
Author: AlexanderZemlyak <zemlyaksanya@mail.ru>
Date:   Wed Oct 9 09:47:43 2024 +0300

    Manage references in PascalABCLanguageInfo project

commit 342cb23f2eb33948cc7d058e04a10fd4b5c1e2a4
Author: AlexanderZemlyak <zemlyaksanya@mail.ru>
Date:   Wed Oct 9 00:06:25 2024 +0300

    Fix string comparisons and null reference exception

commit 386f59d5fd5b29f010f59194ef1324d23a5651ca
Author: AlexanderZemlyak <zemlyaksanya@mail.ru>
Date:   Tue Oct 8 23:18:53 2024 +0300

    Fix build error

commit 851936f02544879644b3284cf472c8c9c2ea8fa9
Author: AlexanderZemlyak <zemlyaksanya@mail.ru>
Date:   Tue Oct 8 23:12:16 2024 +0300

    Refactor keywords managing to avoid repeating them twice

commit 271d5792ce
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Tue Oct 8 10:00:14 2024 +0300

    Documentation (#3211)

    * Add Compiler documentation

    * Add Intellisense documentation

    * Move documentation folder to root directory

commit 79f9ab73a0
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Oct 5 15:33:20 2024 +0300

    PT4_32

commit 0a20c8d32c
Author: Sun Serega <sunserega2@gmail.com>
Date:   Thu Sep 26 09:02:31 2024 +0200

    Add `.DistinctBy` (#3122)

commit 11981dbf47
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Sep 25 11:53:02 2024 +0300

    IndexMinBy, IndexMaxBy
    MinBy, MaxBy - более эффективная реализация
    GraphWPF - SaveToClipboard

commit 3eb1d2bd85
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Sun Sep 22 17:42:09 2024 +0200

    #3197

commit 20edd487e3
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Sun Sep 22 12:39:03 2024 +0200

    #3204

commit 7261231c9c
Merge: 7debbe702 9ab932977
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Sun Sep 22 09:49:58 2024 +0200

    Merge pull request #3207 from AlexanderZemlyak/fix_linux_version

    Fix linux version

commit 9ab9329771
Author: AlexanderZemlyak <zemlyaksanya@mail.ru>
Date:   Sun Sep 22 10:23:18 2024 +0300

    Add new projects in PascalACBNETLinux.sln

commit 7debbe702a
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Sep 21 14:29:38 2024 +0300

    Критическое обновление LightPT

commit 40335b873e
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Fri Sep 20 22:58:46 2024 +0300

    LightPT - OutputListIsClearedFromSpaces := False;
    Coords - DrawLine

commit 078281db17
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Thu Sep 19 22:42:44 2024 +0300

    coords suite

commit 8d51f999a5
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Thu Sep 19 20:28:28 2024 +0300

    Автоклассы - разрешение наследования от классов без полей

    Модуль Coords

commit 8f7e92d418
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Mon Sep 16 08:25:43 2024 +0300

    Turtle переделал на паттерн Команда

commit a6f6d8a90b
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Sep 7 23:11:54 2024 +0300

    Правки рейтинга в TeacherPlugin

commit 2365eb3633
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Sep 7 15:54:15 2024 +0300

    LinkLabel в TeacherControlPlugin

commit 1835b811ef
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Sep 3 23:51:44 2024 +0300

    MathNet Signed

commit b23d6df9e9
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Sep 3 23:16:15 2024 +0300

    MathNet.Numerics.dll

commit 790fba67b8
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Aug 27 17:56:09 2024 +0300

    3.10.0

commit 1ec4204fd2
Author: Sun Serega <sunserega2@gmail.com>
Date:   Mon Aug 26 09:20:27 2024 +0300

    `.Batch` cleanup (#3108)

commit b5e674c311
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Mon Aug 26 09:12:14 2024 +0300

    3_10_0

commit 7face043cf
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Mon Aug 26 09:11:08 2024 +0300

    ToSet

commit e456ad528e
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Aug 24 23:13:57 2024 +0300

    3.9.0.3530

commit 3247469e6d
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Aug 24 22:55:27 2024 +0300

    Добавлен DrawPoints в Turtle

    Исправлена ошибка с отображением подписей в Y-координате

commit 7548142623
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Aug 24 14:27:53 2024 +0300

    1. Глобально.
    SetDecimalSeparator(',')
    SetNumberFormat(DecimalSeparator := ','  и куча других параметров)

    s.ToReal(nfi)
    s.ToReals(nfi)
    StrToReal(nfi)
    StrToFloat(nfi)
    FloatToStr(nfi)

    var nfi := NumberFormat(DecimalSeparator := ',')

    s.ToReal(DecimalSeparator := ',')
    s.ToReals(DecimalSeparator := ',')
    StrToReal(DecimalSeparator := ',')

commit d94885b950
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Aug 24 12:13:09 2024 +0300

    randomElement для строк

    .ToReals - разделителями могут быть пробел табуляция и переход на новую строку

    NumberFormat - функция, возвращающая nfi

commit ae2e26acf8
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Fri Aug 23 19:33:55 2024 +0300

    PT4 - новые dll файлы старых заданий серий A

commit 0f8aa6fa3c
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Aug 18 17:28:05 2024 +0300

    SetOf как основной синоним HSet

commit db4b53be20
Merge: 86852e0a5 b9fd59a84
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Aug 18 16:05:42 2024 +0300

    Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet

commit 86852e0a59
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Aug 18 16:05:14 2024 +0300

    School - ToBase(number: int64

commit b9fd59a840
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Tue Aug 13 15:08:44 2024 +0200

    #2830

commit 4f0b0f8ba0
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Tue Aug 13 14:43:49 2024 +0200

    #3194

commit e3ee0fed4c
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Tue Aug 13 13:49:30 2024 +0200

    #3097

commit d396c4a9fe
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Tue Aug 13 10:40:23 2024 +0200

    #3178

commit 0d846d2335
Merge: e91e35398 a65a86921
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Mon Aug 12 15:24:11 2024 +0200

    Merge pull request #3170 from samuraiGH/ForeachResolver-rework

    Foreach resolver rework

commit a65a869211
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Mon Aug 12 15:50:42 2024 +0300

    increasing pcu file version

commit e91e353984
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Aug 11 15:21:29 2024 +0300

    Обновленный модуль Turtle.pas

commit c18238df39
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Aug 6 20:18:57 2024 +0300

    3.9.0.3523

commit 1da2b524a6
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Aug 6 19:34:10 2024 +0300

    School PrimeDivisors

commit 47c61d8b14
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Fri Aug 2 10:48:07 2024 +0300

    New directive to disable linking pascal standard modules (#3186)

    * Add new 'disable standard units' directive and it's processing

    * Refactor InitializeNewUnit function

    * Improve disable standard units directive checks

    * Add null check in programs.cs to avoid error

    * Rename error related to disable standard units directive

    * Add referencing standard net libraries

    * Add checks for duplicates when injecting references

commit fc3ab96cae
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Fri Aug 2 10:46:40 2024 +0300

    Delete DocumentedUnits option and Exclude HelpBuilder project (#3192)

    * Delete CodeGeneration and PCUGenerate options from CompilerInternalDebug

    Достаточно их аналогов из CompilerOptions.

    * Add recreating CompilerOptions when reloading Compiler

    * Change Rebuild checkbox logic

    * Delete documented units fiels from CompilerInternalDebug

    * Revert "Delete CodeGeneration and PCUGenerate options from CompilerInternalDebug"

    This reverts commit 25e92b22722b7e251ab0156148fdf28ee3175c27.

    * Exclude HelpBuilder

commit 64acde6460
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Jul 31 18:21:04 2024 +0300

    Сделал возможным неявное приведение некоторого типа к array of T (при описании оператора в виде статической функции класса)

    School - IsPrime(n)

commit 3db5709101
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Jul 31 10:56:18 2024 +0300

    ZipCartesianFuncs.pas

commit c4fd47128b
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Jul 30 22:56:03 2024 +0300

    Zip, Cartesian - сделаны внешние функции до 5 параметров, в т.ч. с проекцией
    Zip, Cartesian - методы расширения дополнены чтобы было как во внешних
    Перегенерирована справка

commit 7d66f26d4f
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Mon Jul 1 00:16:43 2024 +0300

    cleanup and more tests

commit 464dc794a8
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Sun Jun 30 23:31:28 2024 +0300

    cleanup and more comments

commit 32f126370c
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Sun Jun 30 21:35:06 2024 +0300

    attempt to fix GetEnumerator resolving for Pascal types

commit fb3eeeb28b
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Sat Jun 29 16:26:35 2024 +0300

    fix tests

commit 84b0dfe537
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Sat Jun 29 15:49:13 2024 +0300

    fix getting MethodInfo

commit 5fa4d9fce7
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 22:45:07 2024 +0300

    cold fix set of T resolving

commit 460ce636ab
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 22:21:06 2024 +0300

    hot fix set of T resolving

commit 83c2f29ac6
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 21:53:11 2024 +0300

    fix method filtering again

commit c840a1a47a
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 21:32:41 2024 +0300

    fix type recovery

commit 2436627fdd
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 19:18:32 2024 +0300

    fixing method filtering

commit 15a05360a4
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 17:25:39 2024 +0300

    attempt to fix GetEnumerator resolving for compiled types

commit 4fd020d084
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 17:21:00 2024 +0300

    adding tests

* Add BaseLanguageInformation and SPythonLanguageInformation

* Delete unnecessary TestSuite files

* Remove syntax_tree_visitor inner objects duplicates creation in spython_syntax_tree_visitor

* Move CompilationUnit.UnitFileName initialization to InitializeNewUnit function

* Override internal_reset method in spython_syntax_tree_visitor to fix pas test error

* Delete dll files from git

* Add standard SPython modules to compilation samples

* Add List Methods Names Mapping

* Add Grammar Rules for Intellisense

* Configure Intellisense - step 2

* Fix languages loading call position

* Change comments check in expression finding for SPython

* Add SPython standard types to SPythonSystem (implicitly)

* Add syntax tree converters calls for SPython in Intellisense

* Squash merge master branch

* Adapt SPython project files to new build system

* Update FunctionsWithNamedParametersDesugarVisitor.cs

* Fix output paths in SPython projects

* Update _ReBuild.bat

* Fix Main Function source_context

* Extract converters for Intellisense only usage

* Implement import statements in Intellisense

Алиасы пока не поддерживаются

* Remove Result varible for SPython in Intellisense

* Remove standard modules and net namespaces from user scope

* Adjust standard units to achieve not adding PABCSystem and Extenstions names to their scope

* Add Set, Operator in/not in

* Add Dict

* Add len Function and dict/set types

* Add list and set Functions

* Comment out TypeCorrectVisitor for Intellisense

* Fix New Types Names in Error Messages

* Add Set Methods

* Add special names renaming and excluding function in ILanguageInformation

Используется для убирания подсказки PABCSystem, корректирования типа biginteger в SPython.

* Add aliases support for import and from import in Intellisense

* Fix list_generator Desugaring in Intellisence

* Add dict Methods

* Fix List Generator

* Fix Assignment Declaration

* Move math And time Libs to bin\Lib

* Rename list_generator to generator_object

* Fix Parser to Use generator_object

* Add set generator

* Add any and all Functions

* Add Function Calls for generator objects

* Add dict generator

* Add empty containers initializations

* Fix empty_list/set/dict error message

* Fix type(obj) Function in Standard Library

* Add Error if Initialize with No Type Specification and Empty Collection

* Fix Initialization with Empty Collection for Global Variables

* Add round Function

* Add map Function

* Revert "Add map Function"

This reverts commit 4fb787a0122a6f404a4061fb6647561f0117739a.

* Fix map Function

* Update Visitor Name

* Add Bitwise Operators

* Add Bitwise Assignment Operations

* Fix Set Binary Operations

* Fix Global Assignments

* Add f-string for Strings without Format

* Update SPythonParser.dat

* Add Expression-Support in f-string

* Fix f-string Inner-Parser Call

* Add int and float Formats for f-string ('x', 'X', 'b', 'd', '.[num]f')

* Fix f-string regex

* Fix result Local Variable

* Add cont_int with Underscore

* Add Empty itertools.pas Unit

* Add args Parameters

* Add kvargs Function Declaration (pre-alpha)

* Update StandardSyntaxTreeConverter.cs

* Fix kvargs-functions Forward Declarations

* Add kvargs-functions Call (pre-alpha)

* Add kvargs-parameters Usage

* Add kvargs-function Call with no kvargs-arguments

* Move Standard print Function to Unit Written in SPython

* Update .dll's

* Hot Fix

* Update spython_syntax_tree_visitor.cs

* Add Multi-Variables foreach

* Fix create Name

* Big Kwarg-Update

* Change Create name in StringConstants and fix check in syntax_tree_visitor

* Update buildandruntests.yml

* Squashed commit of the following:

commit f7834348258fd70cb34949908f157a37c4e013db
Author: AlexanderZemlyak <zemlyaksanya@mail.ru>
Date:   Thu Jun 12 15:55:53 2025 +0300

    Delete language kits directory creation while installing PascalABC.NET

commit 78f40b7377fa6c62fbdd9a19754d8c14ae68cf7f
Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
Date:   Thu Jun 12 15:35:30 2025 +0300

    Create time1.pas

commit ba6cc457366a96efa650eeb2ffb90c5735de13f3
Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
Date:   Thu Jun 12 14:54:36 2025 +0300

    Move TypeCorrectVisitor

commit f9ae902f0df63aa2916683869ac0cff4dd71bd91
Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
Date:   Thu Jun 12 13:39:42 2025 +0300

    Fix Mutual Functions Calls

commit da3b502df1b889c0b02a00815aa8a9df1bcbe31e
Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
Date:   Thu Jun 12 13:10:49 2025 +0300

    Add Itertools Examples and fix Kwargs

commit a6d2f593a0e54b50d8b4b27fb56026b9ede740d0
Author: AlexanderZemlyak <zemlyaksanya@mail.ru>
Date:   Wed Jun 11 23:23:28 2025 +0300

    Add special modules aliases support in Intellisense and switch off unit hints for import statements

commit 0d5122eef93cb2dbd9728b1877b0bfb0544ef9b8
Author: AlexanderZemlyak <zemlyaksanya@mail.ru>
Date:   Wed Jun 11 19:23:36 2025 +0300

    Create FindScopeByLocation modification for SPython

    Для нахождения вложенных в MAIN функций

commit af7235ce8bee4b45ffd6c3b479f8e828932f69b4
Author: AlexanderZemlyak <zemlyaksanya@mail.ru>
Date:   Wed Jun 11 17:59:22 2025 +0300

    Add ExitParamVisitor in visitors pipeline

commit 3f5a4f4950a3d3f2035ec2b18081a01c734c1a96
Author: AlexanderZemlyak <zemlyaksanya@mail.ru>
Date:   Wed Jun 11 17:35:30 2025 +0300

    Small fixes

commit 3f32348b2f4dd66edd372d3989d7651ac56a5d93
Author: AlexanderZemlyak <zemlyaksanya@mail.ru>
Date:   Wed Jun 11 17:11:07 2025 +0300

    Fix merge error

commit 684d6a36912ef5c5ad82d4de0807683eac87debf
Merge: 8e506f409 eeb3116ae
Author: AlexanderZemlyak <zemlyaksanya@mail.ru>
Date:   Wed Jun 11 17:06:42 2025 +0300

    Merge branch 'master' into Spython_refactoring

commit 8e506f409e4b34ad81620bf352813ab507e6134e
Author: AlexanderZemlyak <zemlyaksanya@mail.ru>
Date:   Wed Jun 11 16:44:37 2025 +0300

    Implement visitors pipeline for PascalABC.NET

commit 0e8e4d5c786cbad5257804ce495fe410546ddf4c
Author: AlexanderZemlyak <zemlyaksanya@mail.ru>
Date:   Wed Jun 11 14:10:22 2025 +0300

    Refactor SPython StandardSyntaxTreeConverter to use pipeline approach

commit eeb3116aea
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Jun 10 21:30:20 2025 +0300

    3.10.3.3634

commit ea338d6bfe
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Jun 10 20:30:42 2025 +0300

    2025 in GlobalAssemblyInfo.cs

commit 4dc6bd72ef
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Jun 10 20:19:18 2025 +0300

    chm восстановил

commit fd139b4700
Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
Date:   Tue Jun 10 20:09:10 2025 +0300

    fix SemanticTreeConverter.cs encoding (#3273)

commit d11674efc2
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Jun 10 19:56:16 2025 +0300

    Вернул старый css для справки

commit 9aee28f4f0
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Jun 10 19:54:57 2025 +0300

    2025

commit 07370e365f
Author: Sun Serega <sunserega2@gmail.com>
Date:   Tue Jun 10 19:18:02 2025 +0300

    Upgrade windows runner for CI/CD (#3271)

    * Try upgrade windows runner for CI/CD

    * Update names and BOM

commit 50fd3cb1ee
Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
Date:   Wed May 28 23:01:09 2025 +0300

    * adding supports enumeration check for Pascal types in foreach resolver (#3272)

    * fix naming

commit 5fec52615a
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat May 24 21:36:36 2025 +0300

    Распаковка KeyValuePair| И в foreach

commit fbb5dec9a9
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat May 17 19:34:33 2025 +0300

    Внешний Between

commit a914ab6ef5
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Fri May 16 16:57:00 2025 +0300

    InRange изменение поведения и внешний

commit 04059ab235
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed May 14 19:57:30 2025 +0300

    Исправлены библиотеки PT4Exam

commit 40bfc046a8
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Wed May 14 19:40:04 2025 +0300

    Fix shift space action in Intellisense (#3269)

commit e3a64850ef
Author: dmkwketx <dmkwketx@gmail.com>
Date:   Mon May 12 21:14:21 2025 +0300

    Update GraphWPF.pas (#3270)

    если title больше одной строки, показывалась только последняя. теперь все строки будут показаны.

commit e9cf278fdd
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Mon May 12 10:24:04 2025 +0300

    IsOrdered в разных воплощениях

commit 255533f407
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Fri May 9 16:39:12 2025 +0300

    IsOrdered метод расширения

commit 4c56298bfb
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Thu May 8 22:53:34 2025 +0300

    exit(param)

commit c22dee65fa
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed May 7 10:57:41 2025 +0300

    sp2

commit 3f37c2cc4f
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed May 7 10:56:51 2025 +0300

    sp

commit cdfde69281
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Fri May 2 21:44:57 2025 +0300

    2 chars

commit 2e27beef48
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Thu Apr 10 13:14:04 2025 +0300

    Create generic instances cache (#3259)

    * First attempt to create generic instances cache

    * Change TypeScope equality check and add instance cache clearing

    * Move instance cache clearing call to CodeCompletion Compile funciton

    Шаблонные типы в instance_cache не должны пересекаться для различных модулей. Для улучшения производительности вызов очистки кэша расположен перед вызовом компиляции всех модулей.

    * Squashed commit of the following:

    commit 771ea7b445
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Sun Apr 6 14:32:17 2025 +0200

        #3230

    commit 28a1a03e8d
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Sun Apr 6 11:35:09 2025 +0200

        #3251

    commit af7abc770b
    Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
    Date:   Sun Apr 6 08:33:34 2025 +0300

        synchronization of namespaces and folders for TeacherControlPlugin (#3262)

    commit aae723b982
    Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
    Date:   Thu Apr 3 12:00:04 2025 +0300

        Create default syntax tree converter class (#3216)

        Для удобства разработчиков простых языков, которым не требуются дополнительные обходы синтаксического дерева.

    commit f9cc90e50f
    Author: Sun Serega <sunserega2@gmail.com>
    Date:   Thu Apr 3 11:59:46 2025 +0300

        fix errors (#3260)

    commit f85bfad60f
    Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
    Date:   Thu Apr 3 11:58:19 2025 +0300

        Intellisense memory leaks fix (#3257)

        * Fix memory leaks found for PABCSystem.pas

        Memory leaks of Interface and Implementation Unit Scopes fixed

        * Change open_files and recomp_files variables type to be Dictionary (not HashTable)

        * open_files Check simplification

        * Move TypeTable.Clear call to CodeCompletion Compile method

    * Fix incorrect dictionary iteration

    * Add one more dictionary keys copying

commit 69149f8c44
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Thu Apr 10 13:13:17 2025 +0300

    Refactor intellisense (#3213)

    * Refactor keywords managing to avoid repeating them twice

    * Fix build error

    * Fix string comparisons and null reference exception

    * Manage references in PascalABCLanguageInfo project

    * Fix inaccuracy in BaseKeywords.cs

    * Move ValidDirectives field to ILanguageInformation

    * Basic refactoring of GetPopupHintText + delete ampersend inserting

    * Delete other cases of ampersend inserting

    * Add check that we parsing PascalABC.NET in GetPopupHintText

    Временное решение, нужно будет вынести вторую попытку в интерфейс парсера.

    * Refactor CodeCompletionProvider (first iteration)

    * Extract shift space actions in separate class

    * Replace dollar service character in CodeCompletion by separate boolean (ctrlSpaceAfterDot))

    * Refactor GetCompletionDataByFirst method

    * Fix GetCompletionDataByFirst behaviour when getting symInfos after uses keyword

    * Another iteration of refactoring in CodeCompletionProvider + comments

    * Update intellisense documentation

    * Fix build error

    * Fix encoding

    * Squashed commit of the following:

    commit 7751fe7e75
    Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
    Date:   Sun Mar 16 13:28:03 2025 +0300

        generating language res file at build time (#3252)

    commit d1fce63d69
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Mar 4 08:38:09 2025 +0300

        Сборка после pr SDK

    commit d491e88aa7
    Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
    Date:   Mon Mar 3 20:34:51 2025 +0300

        migration to new build system (#3241)

        * converting project files into sdk style
        * new build commands
        * adding new dll into nsis
        * removing unused .cs files

    commit 1fd348ec3c
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sun Feb 23 20:49:26 2025 +0300

        NSIS New 3.10

        Ярлык в меню Пуск у всех пользователей

    commit 80b7182dc1
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Feb 19 11:50:00 2025 +0300

        _ in names

    commit a2b078960b
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Feb 19 10:52:25 2025 +0300

        cnfc2

    commit 58f26d469d
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Feb 18 22:28:13 2025 +0300

        перекомпиляция 3.10.3.3611

    commit b78a72977f
    Author: nevermind322 <81963698+nevermind322@users.noreply.github.com>
    Date:   Tue Feb 18 22:02:19 2025 +0300

        fix build on mono (#3249)

        * fix build on mono

        * remove local func

        * fix again

    commit c3557e388c
    Author: Nikolay Kuznetsov <adasoft@gmail.com>
    Date:   Sat Feb 15 20:32:46 2025 +0300

        Update GraphABC.pas (#3244)

        1. Быстрая реализация функции FloodFill
        Для этого добавлена процедура BitmapFloodFill, которая вызывается из метода Picture.FloodFill и процедуры FloodFill

        2.Добавлена поддержка LockDrawing/UnlockDrawing в процедуру FloodFill

    commit 9dbac389e1
    Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
    Date:   Wed Feb 12 13:57:14 2025 +0300

        Add missing projects to pabcnetc.sln (#3247)

    commit 41dfb6f187
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Fri Feb 7 21:41:01 2025 +0300

        [] - преобразование во все контейнеры

        GraphABCHelper - теперь ABCObjects работает под Линукс

        School исправлен согласно последним веяниям []

    commit 79bbbd10ff
    Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
    Date:   Wed Jan 29 20:18:37 2025 +0300

        removing files for support fx4.0 (#3240)

    commit 88d5c409eb
    Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
    Date:   Tue Jan 28 20:41:55 2025 +0300

        Рефакторинг PascalABCNET.xshd (#3237)

        * refactoring PascalABCNET.xshd

        * removing extra characters

    commit 8fbd7fdfc3
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sun Jan 26 23:42:48 2025 +0300

        3.10.3
        faststrings
        EmptyCollection и преобразование ее в List, Dictionary
        t: (real,real) := (1,2)

    commit bba132bd5d
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Jan 22 09:14:44 2025 +0300

        Поправил справку по функции

    commit 1bd21857cc
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Jan 8 18:46:51 2025 +0300

        Teacher Control Plugin - возможность задать server.dat

    commit 0848a1b796
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Jan 4 22:54:38 2025 +0300

        Исправление автоформатирования []

    commit d45b782a7b
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Jan 4 18:45:07 2025 +0300

        Rename PABCSistem in test suite

    commit c2347e604b
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Jan 4 14:44:51 2025 +0300

        Примеры - устранил неточности

        LightPT - имя сервера вынес в публичную секцию

    commit b68b8da970
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Dec 17 15:52:18 2024 +0300

        Примеры Coords1.pas Coords2.pas.pas

    commit 8a9788e6f9
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Dec 17 15:06:57 2024 +0300

        Перенес проверку set array на уровень парсера

        Немного поправил Intellisense по наведению для NewSet

        По точке там что то другое работает

    commit 874ddebad3
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Dec 14 21:00:38 2024 +0300

        Поправил грамматику []

        Теперь нельзя в режиме ## использовать атрибуты

        Зато можно [1,2,3].Print

    commit 080fb487e1
    Merge: a53dcd9ed a484b0e82
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Dec 14 15:25:24 2024 +0300

        Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet

    commit a53dcd9ed2
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Dec 14 15:25:16 2024 +0300

        SF Prm Cmb для строк

    commit a484b0e82d
    Author: Sun Serega <sunserega2@gmail.com>
    Date:   Thu Dec 12 13:49:17 2024 +0200

        fix (#3231)

    commit 6ef11f249c
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Dec 10 11:05:45 2024 +0300

        3.10.2

    commit db9679d89f
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Dec 10 10:59:20 2024 +0300

        Закончил превращение синтаксиса [] по умолчанию в массивы

    commit 45fdde24b4
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Sun Dec 8 18:08:00 2024 +0100

        #3229

    commit 494b47624d
    Merge: 5875b9929 7906d73da
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Sun Dec 8 10:42:07 2024 +0100

        Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet

    commit 5875b99296
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Sun Dec 8 10:41:53 2024 +0100

        platformtarget native - .NET 9.0

    commit 7906d73da3
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Dec 3 14:25:37 2024 +0300

        Небольшие изменения в реализации операций с множествами

    commit 087591c7b6
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Nov 27 11:37:07 2024 +0300

        3.10.1

        Coords - доработки

        Distance, Middle, DrawText с фоном и рамкой. Глобальные переменные настройки

    commit d268d4f83b
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Thu Nov 21 22:24:07 2024 +0300

        NSToBytes переделал с исключением

    commit 2bacdc8c28
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Nov 20 13:20:33 2024 +0300

        Комментарии к NewSet

    commit e917ac8eca
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Nov 20 12:42:15 2024 +0300

        TypeName для set

    commit 206289c6a7
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Nov 19 20:23:03 2024 +0300

        Везде заменил _hs на hs в NewSet

        Убрал вызовы методов расширений NewSet в PABCSystem.pas

        Убрал var в operator +

    commit d8262078f6
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Nov 19 13:56:47 2024 +0300

        Исправление мелких ошибок NewSet

        Все тесты проходят.

        Проблема, которая остаётся - в режиме ускорения такие программы падают:

        begin
          var s: set of byte;
          Print(s = [1]);
        end.

        Причина - из dll не вызывается конструктор записи без параметров, хотя он определён. В C# вообще у записей не может быть конструктора по умолчанию - наверное потому. Но для NewSet надо бы сделать исключение

    commit f8819665ba
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Nov 16 10:56:11 2024 +0300

        NS2

    commit 591d9ebe60
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Wed Nov 13 21:34:10 2024 +0100

        fix

    commit c6505634f4
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Wed Nov 13 21:12:33 2024 +0100

        fix

    commit a6564df23c
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Wed Nov 13 20:52:29 2024 +0100

        fix in new sets

    commit 03be5bd931
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Nov 13 22:13:41 2024 +0300

        Переставил operator:= в NewSet

    commit 96c68f1666
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Tue Nov 12 21:38:07 2024 +0100

        #3223

    commit 82776f3c77
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Nov 9 12:18:19 2024 +0300

        NewSet - много мелких исправлений.

        Все тесты проходят кроме Tests 5 - видимо с pabcrtl.dll

    * Update comments in PascalABCLanguageInformation

commit cc7d4472c6
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Thu Apr 10 12:19:31 2025 +0300

    Write developer guide for integrating new language (#3264)

commit 5d842153a5
Author: Sun Serega <sunserega2@gmail.com>
Date:   Thu Apr 10 12:17:52 2025 +0300

    Add NSIS binaries to .gitignore exclude (#3265)

commit ee31ed94b3
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Thu Apr 10 12:06:40 2025 +0300

    TeacherControlPlugin.cs - шифрованные модули

commit ba23a01e29
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Apr 9 10:59:16 2025 +0300

    Закомментировал неверный обработчик

commit 3f70700d2b
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Mon Apr 7 22:07:13 2025 +0300

    nsis новый - папка bin

    TeacherControlPlugin.cs - добавление обработчика для последующей шифровки Tasks.pas

commit 0353abf57c
Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
Date:   Mon Apr 7 08:35:22 2025 +0300

    fix caching Localization assembly (#3263)

commit 771ea7b445
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Sun Apr 6 14:32:17 2025 +0200

    #3230

commit 28a1a03e8d
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Sun Apr 6 11:35:09 2025 +0200

    #3251

commit af7abc770b
Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
Date:   Sun Apr 6 08:33:34 2025 +0300

    synchronization of namespaces and folders for TeacherControlPlugin (#3262)

commit aae723b982
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Thu Apr 3 12:00:04 2025 +0300

    Create default syntax tree converter class (#3216)

    Для удобства разработчиков простых языков, которым не требуются дополнительные обходы синтаксического дерева.

commit f9cc90e50f
Author: Sun Serega <sunserega2@gmail.com>
Date:   Thu Apr 3 11:59:46 2025 +0300

    fix errors (#3260)

commit f85bfad60f
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Thu Apr 3 11:58:19 2025 +0300

    Intellisense memory leaks fix (#3257)

    * Fix memory leaks found for PABCSystem.pas

    Memory leaks of Interface and Implementation Unit Scopes fixed

    * Change open_files and recomp_files variables type to be Dictionary (not HashTable)

    * open_files Check simplification

    * Move TypeTable.Clear call to CodeCompletion Compile method

commit 7751fe7e75
Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
Date:   Sun Mar 16 13:28:03 2025 +0300

    generating language res file at build time (#3252)

commit d1fce63d69
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Mar 4 08:38:09 2025 +0300

    Сборка после pr SDK

commit d491e88aa7
Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
Date:   Mon Mar 3 20:34:51 2025 +0300

    migration to new build system (#3241)

    * converting project files into sdk style
    * new build commands
    * adding new dll into nsis
    * removing unused .cs files

commit 1fd348ec3c
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Feb 23 20:49:26 2025 +0300

    NSIS New 3.10

    Ярлык в меню Пуск у всех пользователей

commit 80b7182dc1
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Feb 19 11:50:00 2025 +0300

    _ in names

commit a2b078960b
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Feb 19 10:52:25 2025 +0300

    cnfc2

commit 58f26d469d
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Feb 18 22:28:13 2025 +0300

    перекомпиляция 3.10.3.3611

commit b78a72977f
Author: nevermind322 <81963698+nevermind322@users.noreply.github.com>
Date:   Tue Feb 18 22:02:19 2025 +0300

    fix build on mono (#3249)

    * fix build on mono

    * remove local func

    * fix again

commit c3557e388c
Author: Nikolay Kuznetsov <adasoft@gmail.com>
Date:   Sat Feb 15 20:32:46 2025 +0300

    Update GraphABC.pas (#3244)

    1. Быстрая реализация функции FloodFill
    Для этого добавлена процедура BitmapFloodFill, которая вызывается из метода Picture.FloodFill и процедуры FloodFill

    2.Добавлена поддержка LockDrawing/UnlockDrawing в процедуру FloodFill

commit 9dbac389e1
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Wed Feb 12 13:57:14 2025 +0300

    Add missing projects to pabcnetc.sln (#3247)

commit 41dfb6f187
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Fri Feb 7 21:41:01 2025 +0300

    [] - преобразование во все контейнеры

    GraphABCHelper - теперь ABCObjects работает под Линукс

    School исправлен согласно последним веяниям []

commit 79bbbd10ff
Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
Date:   Wed Jan 29 20:18:37 2025 +0300

    removing files for support fx4.0 (#3240)

commit 88d5c409eb
Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
Date:   Tue Jan 28 20:41:55 2025 +0300

    Рефакторинг PascalABCNET.xshd (#3237)

    * refactoring PascalABCNET.xshd

    * removing extra characters

commit 8fbd7fdfc3
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Jan 26 23:42:48 2025 +0300

    3.10.3
    faststrings
    EmptyCollection и преобразование ее в List, Dictionary
    t: (real,real) := (1,2)

commit bba132bd5d
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Jan 22 09:14:44 2025 +0300

    Поправил справку по функции

commit 1bd21857cc
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Jan 8 18:46:51 2025 +0300

    Teacher Control Plugin - возможность задать server.dat

commit 0848a1b796
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Jan 4 22:54:38 2025 +0300

    Исправление автоформатирования []

commit d45b782a7b
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Jan 4 18:45:07 2025 +0300

    Rename PABCSistem in test suite

commit c2347e604b
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Jan 4 14:44:51 2025 +0300

    Примеры - устранил неточности

    LightPT - имя сервера вынес в публичную секцию

commit b68b8da970
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Dec 17 15:52:18 2024 +0300

    Примеры Coords1.pas Coords2.pas.pas

commit 8a9788e6f9
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Dec 17 15:06:57 2024 +0300

    Перенес проверку set array на уровень парсера

    Немного поправил Intellisense по наведению для NewSet

    По точке там что то другое работает

commit 874ddebad3
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Dec 14 21:00:38 2024 +0300

    Поправил грамматику []

    Теперь нельзя в режиме ## использовать атрибуты

    Зато можно [1,2,3].Print

commit 080fb487e1
Merge: a53dcd9ed a484b0e82
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Dec 14 15:25:24 2024 +0300

    Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet

commit a53dcd9ed2
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Dec 14 15:25:16 2024 +0300

    SF Prm Cmb для строк

commit a484b0e82d
Author: Sun Serega <sunserega2@gmail.com>
Date:   Thu Dec 12 13:49:17 2024 +0200

    fix (#3231)

commit 6ef11f249c
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Dec 10 11:05:45 2024 +0300

    3.10.2

commit db9679d89f
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Dec 10 10:59:20 2024 +0300

    Закончил превращение синтаксиса [] по умолчанию в массивы

commit 45fdde24b4
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Sun Dec 8 18:08:00 2024 +0100

    #3229

commit 494b47624d
Merge: 5875b9929 7906d73da
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Sun Dec 8 10:42:07 2024 +0100

    Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet

commit 5875b99296
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Sun Dec 8 10:41:53 2024 +0100

    platformtarget native - .NET 9.0

commit 7906d73da3
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Dec 3 14:25:37 2024 +0300

    Небольшие изменения в реализации операций с множествами

commit 087591c7b6
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Nov 27 11:37:07 2024 +0300

    3.10.1

    Coords - доработки

    Distance, Middle, DrawText с фоном и рамкой. Глобальные переменные настройки

commit d268d4f83b
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Thu Nov 21 22:24:07 2024 +0300

    NSToBytes переделал с исключением

commit 2bacdc8c28
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Nov 20 13:20:33 2024 +0300

    Комментарии к NewSet

commit e917ac8eca
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Nov 20 12:42:15 2024 +0300

    TypeName для set

commit 206289c6a7
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Nov 19 20:23:03 2024 +0300

    Везде заменил _hs на hs в NewSet

    Убрал вызовы методов расширений NewSet в PABCSystem.pas

    Убрал var в operator +

commit d8262078f6
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Nov 19 13:56:47 2024 +0300

    Исправление мелких ошибок NewSet

    Все тесты проходят.

    Проблема, которая остаётся - в режиме ускорения такие программы падают:

    begin
      var s: set of byte;
      Print(s = [1]);
    end.

    Причина - из dll не вызывается конструктор записи без параметров, хотя он определён. В C# вообще у записей не может быть конструктора по умолчанию - наверное потому. Но для NewSet надо бы сделать исключение

commit f8819665ba
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Nov 16 10:56:11 2024 +0300

    NS2

commit 591d9ebe60
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Wed Nov 13 21:34:10 2024 +0100

    fix

commit c6505634f4
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Wed Nov 13 21:12:33 2024 +0100

    fix

commit a6564df23c
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Wed Nov 13 20:52:29 2024 +0100

    fix in new sets

commit 03be5bd931
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Nov 13 22:13:41 2024 +0300

    Переставил operator:= в NewSet

commit 96c68f1666
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Tue Nov 12 21:38:07 2024 +0100

    #3223

commit 82776f3c77
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Nov 9 12:18:19 2024 +0300

    NewSet - много мелких исправлений.

    Все тесты проходят кроме Tests 5 - видимо с pabcrtl.dll

commit fbd63efa89
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Nov 3 16:59:48 2024 +0300

    NewSets
    Некоторые тесты надо исправить

commit 746c4ae2c2
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Thu Oct 31 21:00:42 2024 +0100

    #3221

commit 350d07326d
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Thu Oct 31 18:35:51 2024 +0100

    #3221

commit aae9ab408b
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Thu Oct 31 18:25:06 2024 +0100

    #3221

commit 1e4a811e04
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Wed Oct 30 20:42:59 2024 +0100

    test for #3219

commit d1a1247ecd
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Wed Oct 30 20:24:16 2024 +0100

    #3219

commit 13b3071d80
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Mon Oct 28 22:42:17 2024 +0300

    закомментировал extensions преобразования arr to set. Надеюсь в новой реализации всё исправить

commit 6d5c18f457
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Thu Oct 24 10:17:48 2024 +0300

    SF XLSX.pas

commit 0c773a7ecb
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Oct 16 12:04:33 2024 +0300

    tree.xml с парой новых узлов для Питона

commit 53b3fd0881
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Oct 9 14:09:01 2024 +0300

    Добавил временное преобразование от array of T в set of T

commit 271d5792ce
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Tue Oct 8 10:00:14 2024 +0300

    Documentation (#3211)

    * Add Compiler documentation

    * Add Intellisense documentation

    * Move documentation folder to root directory

commit 79f9ab73a0
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Oct 5 15:33:20 2024 +0300

    PT4_32

commit 0a20c8d32c
Author: Sun Serega <sunserega2@gmail.com>
Date:   Thu Sep 26 09:02:31 2024 +0200

    Add `.DistinctBy` (#3122)

commit 11981dbf47
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Sep 25 11:53:02 2024 +0300

    IndexMinBy, IndexMaxBy
    MinBy, MaxBy - более эффективная реализация
    GraphWPF - SaveToClipboard

commit 3eb1d2bd85
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Sun Sep 22 17:42:09 2024 +0200

    #3197

commit 20edd487e3
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Sun Sep 22 12:39:03 2024 +0200

    #3204

commit 7261231c9c
Merge: 7debbe702 9ab932977
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Sun Sep 22 09:49:58 2024 +0200

    Merge pull request #3207 from AlexanderZemlyak/fix_linux_version

    Fix linux version

commit 9ab9329771
Author: AlexanderZemlyak <zemlyaksanya@mail.ru>
Date:   Sun Sep 22 10:23:18 2024 +0300

    Add new projects in PascalACBNETLinux.sln

commit 7debbe702a
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Sep 21 14:29:38 2024 +0300

    Критическое обновление LightPT

commit 40335b873e
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Fri Sep 20 22:58:46 2024 +0300

    LightPT - OutputListIsClearedFromSpaces := False;
    Coords - DrawLine

commit 078281db17
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Thu Sep 19 22:42:44 2024 +0300

    coords suite

commit 8d51f999a5
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Thu Sep 19 20:28:28 2024 +0300

    Автоклассы - разрешение наследования от классов без полей

    Модуль Coords

commit 8f7e92d418
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Mon Sep 16 08:25:43 2024 +0300

    Turtle переделал на паттерн Команда

commit a6f6d8a90b
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Sep 7 23:11:54 2024 +0300

    Правки рейтинга в TeacherPlugin

commit 2365eb3633
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Sep 7 15:54:15 2024 +0300

    LinkLabel в TeacherControlPlugin

commit 1835b811ef
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Sep 3 23:51:44 2024 +0300

    MathNet Signed

commit b23d6df9e9
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Sep 3 23:16:15 2024 +0300

    MathNet.Numerics.dll

commit 790fba67b8
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Aug 27 17:56:09 2024 +0300

    3.10.0

commit 1ec4204fd2
Author: Sun Serega <sunserega2@gmail.com>
Date:   Mon Aug 26 09:20:27 2024 +0300

    `.Batch` cleanup (#3108)

commit b5e674c311
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Mon Aug 26 09:12:14 2024 +0300

    3_10_0

commit 7face043cf
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Mon Aug 26 09:11:08 2024 +0300

    ToSet

commit e456ad528e
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Aug 24 23:13:57 2024 +0300

    3.9.0.3530

commit 3247469e6d
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Aug 24 22:55:27 2024 +0300

    Добавлен DrawPoints в Turtle

    Исправлена ошибка с отображением подписей в Y-координате

commit 7548142623
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Aug 24 14:27:53 2024 +0300

    1. Глобально.
    SetDecimalSeparator(',')
    SetNumberFormat(DecimalSeparator := ','  и куча других параметров)

    s.ToReal(nfi)
    s.ToReals(nfi)
    StrToReal(nfi)
    StrToFloat(nfi)
    FloatToStr(nfi)

    var nfi := NumberFormat(DecimalSeparator := ',')

    s.ToReal(DecimalSeparator := ',')
    s.ToReals(DecimalSeparator := ',')
    StrToReal(DecimalSeparator := ',')

commit d94885b950
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Aug 24 12:13:09 2024 +0300

    randomElement для строк

    .ToReals - разделителями могут быть пробел табуляция и переход на новую строку

    NumberFormat - функция, возвращающая nfi

commit ae2e26acf8
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Fri Aug 23 19:33:55 2024 +0300

    PT4 - новые dll файлы старых заданий серий A

commit 0f8aa6fa3c
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Aug 18 17:28:05 2024 +0300

    SetOf как основной синоним HSet

commit db4b53be20
Merge: 86852e0a5 b9fd59a84
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Aug 18 16:05:42 2024 +0300

    Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet

commit 86852e0a59
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Aug 18 16:05:14 2024 +0300

    School - ToBase(number: int64

commit b9fd59a840
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Tue Aug 13 15:08:44 2024 +0200

    #2830

commit 4f0b0f8ba0
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Tue Aug 13 14:43:49 2024 +0200

    #3194

commit e3ee0fed4c
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Tue Aug 13 13:49:30 2024 +0200

    #3097

commit d396c4a9fe
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Tue Aug 13 10:40:23 2024 +0200

    #3178

commit 0d846d2335
Merge: e91e35398 a65a86921
Author: Ivan Bondarev <ibond84@googlemail.com>
Date:   Mon Aug 12 15:24:11 2024 +0200

    Merge pull request #3170 from samuraiGH/ForeachResolver-rework

    Foreach resolver rework

commit a65a869211
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Mon Aug 12 15:50:42 2024 +0300

    increasing pcu file version

commit e91e353984
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Aug 11 15:21:29 2024 +0300

    Обновленный модуль Turtle.pas

commit c18238df39
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Aug 6 20:18:57 2024 +0300

    3.9.0.3523

commit 1da2b524a6
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Aug 6 19:34:10 2024 +0300

    School PrimeDivisors

commit 47c61d8b14
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Fri Aug 2 10:48:07 2024 +0300

    New directive to disable linking pascal standard modules (#3186)

    * Add new 'disable standard units' directive and it's processing

    * Refactor InitializeNewUnit function

    * Improve disable standard units directive checks

    * Add null check in programs.cs to avoid error

    * Rename error related to disable standard units directive

    * Add referencing standard net libraries

    * Add checks for duplicates when injecting references

commit fc3ab96cae
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Fri Aug 2 10:46:40 2024 +0300

    Delete DocumentedUnits option and Exclude HelpBuilder project (#3192)

    * Delete CodeGeneration and PCUGenerate options from CompilerInternalDebug

    Достаточно их аналогов из CompilerOptions.

    * Add recreating CompilerOptions when reloading Compiler

    * Change Rebuild checkbox logic

    * Delete documented units fiels from CompilerInternalDebug

    * Revert "Delete CodeGeneration and PCUGenerate options from CompilerInternalDebug"

    This reverts commit 25e92b22722b7e251ab0156148fdf28ee3175c27.

    * Exclude HelpBuilder

commit 64acde6460
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Jul 31 18:21:04 2024 +0300

    Сделал возможным неявное приведение некоторого типа к array of T (при описании оператора в виде статической функции класса)

    School - IsPrime(n)

commit 3db5709101
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Jul 31 10:56:18 2024 +0300

    ZipCartesianFuncs.pas

commit c4fd47128b
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Jul 30 22:56:03 2024 +0300

    Zip, Cartesian - сделаны внешние функции до 5 параметров, в т.ч. с проекцией
    Zip, Cartesian - методы расширения дополнены чтобы было как во внешних
    Перегенерирована справка

commit 7d66f26d4f
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Mon Jul 1 00:16:43 2024 +0300

    cleanup and more tests

commit 464dc794a8
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Sun Jun 30 23:31:28 2024 +0300

    cleanup and more comments

commit 32f126370c
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Sun Jun 30 21:35:06 2024 +0300

    attempt to fix GetEnumerator resolving for Pascal types

commit fb3eeeb28b
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Sat Jun 29 16:26:35 2024 +0300

    fix tests

commit 84b0dfe537
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Sat Jun 29 15:49:13 2024 +0300

    fix getting MethodInfo

commit 5fa4d9fce7
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 22:45:07 2024 +0300

    cold fix set of T resolving

commit 460ce636ab
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 22:21:06 2024 +0300

    hot fix set of T resolving

commit 83c2f29ac6
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 21:53:11 2024 +0300

    fix method filtering again

commit c840a1a47a
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 21:32:41 2024 +0300

    fix type recovery

commit 2436627fdd
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 19:18:32 2024 +0300

    fixing method filtering

commit 15a05360a4
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 17:25:39 2024 +0300

    attempt to fix GetEnumerator resolving for compiled types

commit 4fd020d084
Author: samuraiGH <anonimajzer3@mail.ru>
Date:   Fri Jun 28 17:21:00 2024 +0300

    adding tests

* Fix merge error

* Delete extra files

* Move Examples to pascalabcnet\PABCNetHelp\Examples\SPython

* Update .dll

* Move examples to pascalabcnet\CodeExamples\SPython

* Revert pipeline visitors architecture for Pascal

* Add AssignIntegerDivisionOperation

* Revert pipeline visitors architecture for SPython

* Add len(str)

* Fix inaccuracies

* Fix case sensitive string comparison in some lambda classes

* Small fix in BaseLanguageInformation

* Revert changing Create string to constant in Pascal visitors

* Resolve some pull request issues

* Add Tuple-Type to Right Part of Assignment

* Add Tuple-Assignments a, b = 1, 2

* Delete unused function in DomSyntaxTreeVisitor

* Fix Tuple Assignment

* Add tuple TypeName

* Add turbo_tuple_expr to return_stmt

* Add Tuple-related Errors

* Update pabcnetc_clear/CommandConsoleCompiler.cs encoding

Co-authored-by: Sun Serega <sunserega2@gmail.com>

* Delete IndentArranger.exe

* Fix Generator in for Loop

* Fix Char-Assignment Type Inference

* Fix Collections Method Error Handling

* Fix result variable case sensitive comparing

* Fix Result Name Constants in Visitors

* Fix merge errors

* Resolve some pull request conversations

* Add SPython projects in pabcnetc.sln and PascalABCNETLinux.sln

* Delete Gplex.exe and Gppg.exe in SPython project

* Fix tuple-type Name in Errors

* Move time1.pas and Fix _ReBuild.bat

* Update _ReBuild.bat

* Fix method calls without parentheses in SPython

* Fix Localizations Files

* Remove SPythonParser.sln

* Refactor TipPainterTools to support inner parentheses in function parameters

* Update Linux TipPainterTools

* Fix dict Type Specialization

* Add GetDescriptionForCompiledMethod in SPython

* Squashed commit of the following:

commit bf3ba7d288
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Mon Aug 4 12:51:30 2025 +0300

    interface у Turtle.pas

    Команда изменения цвета и ширины

commit 59ed71f459
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Mon Aug 4 10:29:08 2025 +0300

    Команды ПоменятьЦвет и ПоменятьШиринуПера теперь учитываются в Черепахе

commit 160dd58195
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Jul 20 17:00:28 2025 +0300

    fix #3324

commit 6218cc8723
Merge: cabe8f85e 89e02b504
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Jul 19 20:06:38 2025 +0300

    Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet

commit cabe8f85ee
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Jul 19 20:06:25 2025 +0300

    Min(1) Max(1)

commit 89e02b504e
Author: Nikolay Kuznetsov <adasoft@gmail.com>
Date:   Thu Jul 17 10:08:54 2025 +0300

    Update CodeCompletionActions.cs (#3323)

    Показ Code Completion Window по Ctrl-Space, если курсор находится сразу после точки (как сделано в Win версии). Текущее поведение - после точки ccw не показывать, только если курсор переместить на несколько символов вправо от точки.

commit c080feba89
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Jul 15 16:06:58 2025 +0300

    RayTracer/RayTracer3.pas

commit cc266b3863
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Mon Jul 14 19:08:55 2025 +0300

    Поправки в LanguageInformation (#3322)

    * Fix inaccuracy

    * Delete useless variable

    * Implement refreshing description before showing it in Intellisense windows

    * Fix inaccuracies

    * Add GetDescriptionForArray and GetDescriptionForDelegate in SPythonLanguageInfo

    * Exclude Read Write Async and Await from keywords list in Intellisense

commit 56d1eb5648
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Sun Jul 13 18:44:29 2025 +0300

    Обновление описания сущностей в Intellisense (#3321)

    * Implement refreshing description before showing it in Intellisense windows

    * Change BuildDescription in ProcScope

    * Fix description rebuild bug

commit 4cec1e7c43
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Jul 13 13:13:29 2025 +0300

    fix #3299

    Revert incorrect pr intellisense

commit 20a1436129
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Sun Jul 13 10:19:40 2025 +0300

    Исправление неправильных изменений в LanguageInformation (#3319)

    * Fix inaccuracy

    * Delete useless variable

    * Implement refreshing description before showing it in Intellisense windows

    * Fix inaccuracies

    * Add GetDescriptionForArray and GetDescriptionForDelegate in SPythonLanguageInfo

commit 9e9a0469b3
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Thu Jul 10 18:35:07 2025 +0300

    Добавление обновления описания сущностей из Intellisense перед выводом их в окошке (#3320)

    * Implement refreshing description before showing it in Intellisense windows

    * Change BuildDescription in ProcScope

commit e14b517e9d
Author: Nikolay Kuznetsov <adasoft@gmail.com>
Date:   Sat Jul 5 11:09:00 2025 +0300

    Update ProcessRunner.cs -- fix for space chars in running app file name (#3317)

    fix pascalabcnet/pascalabcnet#ISSUE-3315

commit 6fa1caa034
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Sat Jul 5 11:05:34 2025 +0300

    Учет случая params в TipPainterTools при подсветке (#3318)

    * Refactor LanguageInformation classes

    * Improve extension check in TipPainterTools

    * Refactor parsing parameters for signature help

    * Fix TipPainterTools Linux version

    * Add Params check in TipPainterTools

commit a1584f4f90
Author: Nikolay Kuznetsov <adasoft@gmail.com>
Date:   Sat Jul 5 11:05:10 2025 +0300

    Update RobotField.pas (#3310)

    Адаптировано для Linux версии PABC
    * показываются надписи на форме в Ubuntu
    * шрифт надписей приведён к совместимому Sans Serif
    * Помощь - замена #10#13 на NewLine определяемый платформой

commit 19f78930ed
Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
Date:   Thu Jul 3 20:42:47 2025 +0300

    removing hard code (#3313)

commit ef795bbb64
Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
Date:   Thu Jul 3 20:39:09 2025 +0300

    renaming method and adding comments (#3312)

commit 9d57c427ac
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Mon Jun 30 19:33:04 2025 +0300

    MainForm.Load +=

commit 9927a0e305
Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
Date:   Mon Jun 30 19:19:24 2025 +0300

    fix type name comparsion (#3309)

commit 7614931f06
Author: dmkwketx <dmkwketx@gmail.com>
Date:   Mon Jun 30 19:18:05 2025 +0300

    Update WhatsNew 3_10_4 files: exit_param2.pas & exit_param3.pas (#3305)

    * Update exit_param3.pas

    Добавлена проверка, что числа меньше числа 2 не простые. особенно единица

    * Update exit_param2.pas

    Добавлена проверка что числа меньше числа 2 не простые.

commit dccd7942b7
Author: Nikolay Kuznetsov <adasoft@gmail.com>
Date:   Mon Jun 30 19:17:09 2025 +0300

    Added ABCObjects samples to Linux build (#3306)

commit 0b3471daa0
Author: Nikolay Kuznetsov <adasoft@gmail.com>
Date:   Mon Jun 30 19:16:51 2025 +0300

    Delete InstallerSamples/Graphics/GraphABCLinux directory (#3307)

    Удалить как неиспользуемую

commit d4173b0bec
Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
Date:   Sat Jun 28 16:12:28 2025 +0300

    removing hard code (#3304)

commit 0972d09837
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Sat Jun 28 16:10:29 2025 +0300

    Return break, continue и exit in completion list (#3298)

commit 5abe6333ba
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Thu Jun 26 13:25:24 2025 +0300

    опечатка в комменте

commit aa42e80c7f
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Jun 25 22:27:48 2025 +0300

    2025 by

commit ae16484db7
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Jun 25 20:06:03 2025 +0300

    Пересобрал

commit 0646c80e4a
Merge: 107f2c49b a389183ef
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Jun 25 20:05:20 2025 +0300

    Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet

commit 107f2c49bb
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Jun 25 19:11:42 2025 +0300

    Сделал ошибку при передаче в качестве делегата параметром обобщенной функции

commit d2440264e8
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Jun 25 19:09:36 2025 +0300

    Перенес из ошибок назад в правильные.

    Вернул странное недокументированное поведение присваивания обобщенной функции делегату

commit da16d41c58
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Jun 25 19:07:18 2025 +0300

    Удалил два файла с ошибками - обобщенная функция присваивается делегату

commit a389183efe
Author: Sun Serega <sunserega2@gmail.com>
Date:   Mon Jun 23 23:49:48 2025 +0300

    Improve GitIgnoreTester output (#3295)

commit 63274c3c5e
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Mon Jun 23 22:28:17 2025 +0300

    Пересобрал 3.11.0.3641

commit 34187755de
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Mon Jun 23 22:02:24 2025 +0300

    fix #3290

commit 6eccd661ae
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Mon Jun 23 16:36:58 2025 +0300

    3.11 version with SPython (not in installer!)

commit 080fca15bb
Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
Date:   Sun Jun 22 20:56:22 2025 +0300

    SPython 1.0 (#3274)

    * Squashed commit of the following:

    commit 115ed2e1b7b361b35f0b213688ad0838e0bffa69
    Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
    Date:   Thu Nov 7 10:21:08 2024 +0300

        Add from import Handling

    commit bdd3eb785e6c719201104497808e89dc20c4eacc
    Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
    Date:   Sun Nov 3 12:59:29 2024 +0300

        Add 'Import As'

    commit e5747aa56e359633be366887d3cf67d1ec054701
    Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
    Date:   Sun Nov 3 11:08:50 2024 +0300

        Add Ident_list to import

    commit 9d16fdb341b329adae45dec2bf6db04d8572675f
    Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
    Date:   Sun Nov 3 10:01:13 2024 +0300

        Move Import Handling to Visitor

    commit d8a0e8f5ee840e3ff15caafd7a456f91e1f2a962
    Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
    Date:   Sat Nov 2 18:36:10 2024 +0300

        Rename of Productions Related to Import

    commit 71282a457ab0c039a2f42c05249336d92ac76e7a
    Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
    Date:   Sat Nov 2 18:33:41 2024 +0300

        Move import to Statements

    * Add new AST visitors call template

    * Add syntax tree parameter

    * Add SpecialSyntaxTreeConverter

    * Add CollectNamesVisitor

    * Read Symbols from Semantic Tree

    * Add Visitor Renewaling

    * Fix Usage of Standard Libraries

    * Update AssignToVarConverterVisitor.cs

    * Fix Foreach Node Visitor

    * Refactor InterpreterVisitor (alpha version)

    * Add Imports Nodes for Declarations

    * Rename Method for Sending Object

    * Fix Remove in interface_node

    * Add ApplyConversionsAfterUsedModulesCompilation method to ILanguage interface

    * Rename ApplyConcreteConversions to ApplyConversions

    * Squashed commit of the following:

    commit a484b0e82d
    Author: Sun Serega <sunserega2@gmail.com>
    Date:   Thu Dec 12 13:49:17 2024 +0200

        fix (#3231)

    commit 6ef11f249c
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Dec 10 11:05:45 2024 +0300

        3.10.2

    commit db9679d89f
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Dec 10 10:59:20 2024 +0300

        Закончил превращение синтаксиса [] по умолчанию в массивы

    commit 45fdde24b4
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Sun Dec 8 18:08:00 2024 +0100

        #3229

    commit 494b47624d
    Merge: 5875b9929 7906d73da
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Sun Dec 8 10:42:07 2024 +0100

        Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet

    commit 5875b99296
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Sun Dec 8 10:41:53 2024 +0100

        platformtarget native - .NET 9.0

    commit 7906d73da3
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Dec 3 14:25:37 2024 +0300

        Небольшие изменения в реализации операций с множествами

    commit 087591c7b6
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Nov 27 11:37:07 2024 +0300

        3.10.1

        Coords - доработки

        Distance, Middle, DrawText с фоном и рамкой. Глобальные переменные настройки

    commit d268d4f83b
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Thu Nov 21 22:24:07 2024 +0300

        NSToBytes переделал с исключением

    commit 2bacdc8c28
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Nov 20 13:20:33 2024 +0300

        Комментарии к NewSet

    commit e917ac8eca
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Nov 20 12:42:15 2024 +0300

        TypeName для set

    commit 206289c6a7
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Nov 19 20:23:03 2024 +0300

        Везде заменил _hs на hs в NewSet

        Убрал вызовы методов расширений NewSet в PABCSystem.pas

        Убрал var в operator +

    commit d8262078f6
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Nov 19 13:56:47 2024 +0300

        Исправление мелких ошибок NewSet

        Все тесты проходят.

        Проблема, которая остаётся - в режиме ускорения такие программы падают:

        begin
          var s: set of byte;
          Print(s = [1]);
        end.

        Причина - из dll не вызывается конструктор записи без параметров, хотя он определён. В C# вообще у записей не может быть конструктора по умолчанию - наверное потому. Но для NewSet надо бы сделать исключение

    commit f8819665ba
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Nov 16 10:56:11 2024 +0300

        NS2

    commit 591d9ebe60
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Wed Nov 13 21:34:10 2024 +0100

        fix

    commit c6505634f4
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Wed Nov 13 21:12:33 2024 +0100

        fix

    commit a6564df23c
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Wed Nov 13 20:52:29 2024 +0100

        fix in new sets

    commit 03be5bd931
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Nov 13 22:13:41 2024 +0300

        Переставил operator:= в NewSet

    commit 96c68f1666
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Tue Nov 12 21:38:07 2024 +0100

        #3223

    commit 82776f3c77
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Nov 9 12:18:19 2024 +0300

        NewSet - много мелких исправлений.

        Все тесты проходят кроме Tests 5 - видимо с pabcrtl.dll

    commit fbd63efa89
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sun Nov 3 16:59:48 2024 +0300

        NewSets
        Некоторые тесты надо исправить

    commit 746c4ae2c2
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Thu Oct 31 21:00:42 2024 +0100

        #3221

    commit 350d07326d
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Thu Oct 31 18:35:51 2024 +0100

        #3221

    commit aae9ab408b
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Thu Oct 31 18:25:06 2024 +0100

        #3221

    commit 1e4a811e04
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Wed Oct 30 20:42:59 2024 +0100

        test for #3219

    commit d1a1247ecd
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Wed Oct 30 20:24:16 2024 +0100

        #3219

    commit 13b3071d80
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Mon Oct 28 22:42:17 2024 +0300

        закомментировал extensions преобразования arr to set. Надеюсь в новой реализации всё исправить

    commit 6d5c18f457
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Thu Oct 24 10:17:48 2024 +0300

        SF XLSX.pas

    commit 0c773a7ecb
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Oct 16 12:04:33 2024 +0300

        tree.xml с парой новых узлов для Питона

    commit 53b3fd0881
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Oct 9 14:09:01 2024 +0300

        Добавил временное преобразование от array of T в set of T

    commit 271d5792ce
    Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
    Date:   Tue Oct 8 10:00:14 2024 +0300

        Documentation (#3211)

        * Add Compiler documentation

        * Add Intellisense documentation

        * Move documentation folder to root directory

    commit 79f9ab73a0
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Oct 5 15:33:20 2024 +0300

        PT4_32

    commit 0a20c8d32c
    Author: Sun Serega <sunserega2@gmail.com>
    Date:   Thu Sep 26 09:02:31 2024 +0200

        Add `.DistinctBy` (#3122)

    commit 11981dbf47
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Sep 25 11:53:02 2024 +0300

        IndexMinBy, IndexMaxBy
        MinBy, MaxBy - более эффективная реализация
        GraphWPF - SaveToClipboard

    commit 3eb1d2bd85
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Sun Sep 22 17:42:09 2024 +0200

        #3197

    commit 20edd487e3
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Sun Sep 22 12:39:03 2024 +0200

        #3204

    commit 7261231c9c
    Merge: 7debbe702 9ab932977
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Sun Sep 22 09:49:58 2024 +0200

        Merge pull request #3207 from AlexanderZemlyak/fix_linux_version

        Fix linux version

    commit 9ab9329771
    Author: AlexanderZemlyak <zemlyaksanya@mail.ru>
    Date:   Sun Sep 22 10:23:18 2024 +0300

        Add new projects in PascalACBNETLinux.sln

    commit 7debbe702a
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Sep 21 14:29:38 2024 +0300

        Критическое обновление LightPT

    commit 40335b873e
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Fri Sep 20 22:58:46 2024 +0300

        LightPT - OutputListIsClearedFromSpaces := False;
        Coords - DrawLine

    commit 078281db17
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Thu Sep 19 22:42:44 2024 +0300

        coords suite

    commit 8d51f999a5
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Thu Sep 19 20:28:28 2024 +0300

        Автоклассы - разрешение наследования от классов без полей

        Модуль Coords

    commit 8f7e92d418
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Mon Sep 16 08:25:43 2024 +0300

        Turtle переделал на паттерн Команда

    commit a6f6d8a90b
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Sep 7 23:11:54 2024 +0300

        Правки рейтинга в TeacherPlugin

    commit 2365eb3633
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Sep 7 15:54:15 2024 +0300

        LinkLabel в TeacherControlPlugin

    commit 1835b811ef
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Sep 3 23:51:44 2024 +0300

        MathNet Signed

    commit b23d6df9e9
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Sep 3 23:16:15 2024 +0300

        MathNet.Numerics.dll

    commit 790fba67b8
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Aug 27 17:56:09 2024 +0300

        3.10.0

    commit 1ec4204fd2
    Author: Sun Serega <sunserega2@gmail.com>
    Date:   Mon Aug 26 09:20:27 2024 +0300

        `.Batch` cleanup (#3108)

    commit b5e674c311
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Mon Aug 26 09:12:14 2024 +0300

        3_10_0

    commit 7face043cf
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Mon Aug 26 09:11:08 2024 +0300

        ToSet

    commit e456ad528e
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Aug 24 23:13:57 2024 +0300

        3.9.0.3530

    commit 3247469e6d
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Aug 24 22:55:27 2024 +0300

        Добавлен DrawPoints в Turtle

        Исправлена ошибка с отображением подписей в Y-координате

    commit 7548142623
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Aug 24 14:27:53 2024 +0300

        1. Глобально.
        SetDecimalSeparator(',')
        SetNumberFormat(DecimalSeparator := ','  и куча других параметров)

        s.ToReal(nfi)
        s.ToReals(nfi)
        StrToReal(nfi)
        StrToFloat(nfi)
        FloatToStr(nfi)

        var nfi := NumberFormat(DecimalSeparator := ',')

        s.ToReal(DecimalSeparator := ',')
        s.ToReals(DecimalSeparator := ',')
        StrToReal(DecimalSeparator := ',')

    commit d94885b950
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Aug 24 12:13:09 2024 +0300

        randomElement для строк

        .ToReals - разделителями могут быть пробел табуляция и переход на новую строку

        NumberFormat - функция, возвращающая nfi

    commit ae2e26acf8
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Fri Aug 23 19:33:55 2024 +0300

        PT4 - новые dll файлы старых заданий серий A

    commit 0f8aa6fa3c
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sun Aug 18 17:28:05 2024 +0300

        SetOf как основной синоним HSet

    commit db4b53be20
    Merge: 86852e0a5 b9fd59a84
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sun Aug 18 16:05:42 2024 +0300

        Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet

    commit 86852e0a59
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sun Aug 18 16:05:14 2024 +0300

        School - ToBase(number: int64

    commit b9fd59a840
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Tue Aug 13 15:08:44 2024 +0200

        #2830

    commit 4f0b0f8ba0
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Tue Aug 13 14:43:49 2024 +0200

        #3194

    commit e3ee0fed4c
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Tue Aug 13 13:49:30 2024 +0200

        #3097

    commit d396c4a9fe
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Tue Aug 13 10:40:23 2024 +0200

        #3178

    commit 0d846d2335
    Merge: e91e35398 a65a86921
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Mon Aug 12 15:24:11 2024 +0200

        Merge pull request #3170 from samuraiGH/ForeachResolver-rework

        Foreach resolver rework

    commit a65a869211
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Mon Aug 12 15:50:42 2024 +0300

        increasing pcu file version

    commit e91e353984
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sun Aug 11 15:21:29 2024 +0300

        Обновленный модуль Turtle.pas

    commit c18238df39
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Aug 6 20:18:57 2024 +0300

        3.9.0.3523

    commit 1da2b524a6
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Aug 6 19:34:10 2024 +0300

        School PrimeDivisors

    commit 47c61d8b14
    Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
    Date:   Fri Aug 2 10:48:07 2024 +0300

        New directive to disable linking pascal standard modules (#3186)

        * Add new 'disable standard units' directive and it's processing

        * Refactor InitializeNewUnit function

        * Improve disable standard units directive checks

        * Add null check in programs.cs to avoid error

        * Rename error related to disable standard units directive

        * Add referencing standard net libraries

        * Add checks for duplicates when injecting references

    commit fc3ab96cae
    Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
    Date:   Fri Aug 2 10:46:40 2024 +0300

        Delete DocumentedUnits option and Exclude HelpBuilder project (#3192)

        * Delete CodeGeneration and PCUGenerate options from CompilerInternalDebug

        Достаточно их аналогов из CompilerOptions.

        * Add recreating CompilerOptions when reloading Compiler

        * Change Rebuild checkbox logic

        * Delete documented units fiels from CompilerInternalDebug

        * Revert "Delete CodeGeneration and PCUGenerate options from CompilerInternalDebug"

        This reverts commit 25e92b22722b7e251ab0156148fdf28ee3175c27.

        * Exclude HelpBuilder

    commit 64acde6460
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Jul 31 18:21:04 2024 +0300

        Сделал возможным неявное приведение некоторого типа к array of T (при описании оператора в виде статической функции класса)

        School - IsPrime(n)

    commit 3db5709101
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Jul 31 10:56:18 2024 +0300

        ZipCartesianFuncs.pas

    commit c4fd47128b
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Jul 30 22:56:03 2024 +0300

        Zip, Cartesian - сделаны внешние функции до 5 параметров, в т.ч. с проекцией
        Zip, Cartesian - методы расширения дополнены чтобы было как во внешних
        Перегенерирована справка

    commit 7d66f26d4f
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Mon Jul 1 00:16:43 2024 +0300

        cleanup and more tests

    commit 464dc794a8
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Sun Jun 30 23:31:28 2024 +0300

        cleanup and more comments

    commit 32f126370c
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Sun Jun 30 21:35:06 2024 +0300

        attempt to fix GetEnumerator resolving for Pascal types

    commit fb3eeeb28b
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Sat Jun 29 16:26:35 2024 +0300

        fix tests

    commit 84b0dfe537
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Sat Jun 29 15:49:13 2024 +0300

        fix getting MethodInfo

    commit 5fa4d9fce7
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Fri Jun 28 22:45:07 2024 +0300

        cold fix set of T resolving

    commit 460ce636ab
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Fri Jun 28 22:21:06 2024 +0300

        hot fix set of T resolving

    commit 83c2f29ac6
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Fri Jun 28 21:53:11 2024 +0300

        fix method filtering again

    commit c840a1a47a
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Fri Jun 28 21:32:41 2024 +0300

        fix type recovery

    commit 2436627fdd
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Fri Jun 28 19:18:32 2024 +0300

        fixing method filtering

    commit 15a05360a4
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Fri Jun 28 17:25:39 2024 +0300

        attempt to fix GetEnumerator resolving for compiled types

    commit 4fd020d084
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Fri Jun 28 17:21:00 2024 +0300

        adding tests

    * Move unitNames dictionary to CompilationUnit class

    * Implement Spython StringResorces for SyntaxTree Converters

    * Move post conversion method to ISyntaxTreeConverter interface

    * Override get_system_module in SpythonSyntaxTreeVisitor

    * Fix Unit and Function Having Same Name Bug

    * Add TimeMeasurements Programs

    * Swap Visitors for Supporting New Imports

    * Fix Function with Named Parameters Substitution

    * Add Error for Using Global

    * Fix yyloc Bug and Add SyntaxVisiters Errors

    * Move List Desugar from Visiter to Parser (temp)

    * Move List Generator Desugaring Back to Visitors

    * Add Args after Kvarg Error Message

    * Fix Parser and Visitors' Errors Messages

    * Moved Examples Programs

    * Update Name Substitution Logic

    * Squashed commit of the following:

    commit b68b8da970
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Dec 17 15:52:18 2024 +0300

        Примеры Coords1.pas Coords2.pas.pas

    commit 8a9788e6f9
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Dec 17 15:06:57 2024 +0300

        Перенес проверку set array на уровень парсера

        Немного поправил Intellisense по наведению для NewSet

        По точке там что то другое работает

    commit 874ddebad3
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Dec 14 21:00:38 2024 +0300

        Поправил грамматику []

        Теперь нельзя в режиме ## использовать атрибуты

        Зато можно [1,2,3].Print

    commit 080fb487e1
    Merge: a53dcd9ed a484b0e82
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Dec 14 15:25:24 2024 +0300

        Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet

    commit a53dcd9ed2
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Dec 14 15:25:16 2024 +0300

        SF Prm Cmb для строк

    commit a484b0e82d
    Author: Sun Serega <sunserega2@gmail.com>
    Date:   Thu Dec 12 13:49:17 2024 +0200

        fix (#3231)

    commit 6ef11f249c
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Dec 10 11:05:45 2024 +0300

        3.10.2

    commit db9679d89f
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Dec 10 10:59:20 2024 +0300

        Закончил превращение синтаксиса [] по умолчанию в массивы

    commit 45fdde24b4
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Sun Dec 8 18:08:00 2024 +0100

        #3229

    commit 494b47624d
    Merge: 5875b9929 7906d73da
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Sun Dec 8 10:42:07 2024 +0100

        Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet

    commit 5875b99296
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Sun Dec 8 10:41:53 2024 +0100

        platformtarget native - .NET 9.0

    commit 7906d73da3
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Dec 3 14:25:37 2024 +0300

        Небольшие изменения в реализации операций с множествами

    commit 087591c7b6
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Nov 27 11:37:07 2024 +0300

        3.10.1

        Coords - доработки

        Distance, Middle, DrawText с фоном и рамкой. Глобальные переменные настройки

    commit d268d4f83b
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Thu Nov 21 22:24:07 2024 +0300

        NSToBytes переделал с исключением

    commit 2bacdc8c28
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Nov 20 13:20:33 2024 +0300

        Комментарии к NewSet

    commit e917ac8eca
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Nov 20 12:42:15 2024 +0300

        TypeName для set

    commit 206289c6a7
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Nov 19 20:23:03 2024 +0300

        Везде заменил _hs на hs в NewSet

        Убрал вызовы методов расширений NewSet в PABCSystem.pas

        Убрал var в operator +

    commit d8262078f6
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Nov 19 13:56:47 2024 +0300

        Исправление мелких ошибок NewSet

        Все тесты проходят.

        Проблема, которая остаётся - в режиме ускорения такие программы падают:

        begin
          var s: set of byte;
          Print(s = [1]);
        end.

        Причина - из dll не вызывается конструктор записи без параметров, хотя он определён. В C# вообще у записей не может быть конструктора по умолчанию - наверное потому. Но для NewSet надо бы сделать исключение

    commit f8819665ba
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Nov 16 10:56:11 2024 +0300

        NS2

    commit 591d9ebe60
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Wed Nov 13 21:34:10 2024 +0100

        fix

    commit c6505634f4
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Wed Nov 13 21:12:33 2024 +0100

        fix

    commit a6564df23c
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Wed Nov 13 20:52:29 2024 +0100

        fix in new sets

    commit 03be5bd931
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Nov 13 22:13:41 2024 +0300

        Переставил operator:= в NewSet

    commit 96c68f1666
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Tue Nov 12 21:38:07 2024 +0100

        #3223

    commit 82776f3c77
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Nov 9 12:18:19 2024 +0300

        NewSet - много мелких исправлений.

        Все тесты проходят кроме Tests 5 - видимо с pabcrtl.dll

    commit fbd63efa89
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sun Nov 3 16:59:48 2024 +0300

        NewSets
        Некоторые тесты надо исправить

    commit 746c4ae2c2
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Thu Oct 31 21:00:42 2024 +0100

        #3221

    commit 350d07326d
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Thu Oct 31 18:35:51 2024 +0100

        #3221

    commit aae9ab408b
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Thu Oct 31 18:25:06 2024 +0100

        #3221

    commit 1e4a811e04
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Wed Oct 30 20:42:59 2024 +0100

        test for #3219

    commit d1a1247ecd
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Wed Oct 30 20:24:16 2024 +0100

        #3219

    commit 13b3071d80
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Mon Oct 28 22:42:17 2024 +0300

        закомментировал extensions преобразования arr to set. Надеюсь в новой реализации всё исправить

    commit 6d5c18f457
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Thu Oct 24 10:17:48 2024 +0300

        SF XLSX.pas

    commit 0c773a7ecb
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Oct 16 12:04:33 2024 +0300

        tree.xml с парой новых узлов для Питона

    commit 53b3fd0881
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Oct 9 14:09:01 2024 +0300

        Добавил временное преобразование от array of T в set of T

    commit 271d5792ce
    Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
    Date:   Tue Oct 8 10:00:14 2024 +0300

        Documentation (#3211)

        * Add Compiler documentation

        * Add Intellisense documentation

        * Move documentation folder to root directory

    commit 79f9ab73a0
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Oct 5 15:33:20 2024 +0300

        PT4_32

    commit 0a20c8d32c
    Author: Sun Serega <sunserega2@gmail.com>
    Date:   Thu Sep 26 09:02:31 2024 +0200

        Add `.DistinctBy` (#3122)

    commit 11981dbf47
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Sep 25 11:53:02 2024 +0300

        IndexMinBy, IndexMaxBy
        MinBy, MaxBy - более эффективная реализация
        GraphWPF - SaveToClipboard

    commit 3eb1d2bd85
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Sun Sep 22 17:42:09 2024 +0200

        #3197

    commit 20edd487e3
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Sun Sep 22 12:39:03 2024 +0200

        #3204

    commit 7261231c9c
    Merge: 7debbe702 9ab932977
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Sun Sep 22 09:49:58 2024 +0200

        Merge pull request #3207 from AlexanderZemlyak/fix_linux_version

        Fix linux version

    commit 9ab9329771
    Author: AlexanderZemlyak <zemlyaksanya@mail.ru>
    Date:   Sun Sep 22 10:23:18 2024 +0300

        Add new projects in PascalACBNETLinux.sln

    commit 7debbe702a
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Sep 21 14:29:38 2024 +0300

        Критическое обновление LightPT

    commit 40335b873e
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Fri Sep 20 22:58:46 2024 +0300

        LightPT - OutputListIsClearedFromSpaces := False;
        Coords - DrawLine

    commit 078281db17
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Thu Sep 19 22:42:44 2024 +0300

        coords suite

    commit 8d51f999a5
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Thu Sep 19 20:28:28 2024 +0300

        Автоклассы - разрешение наследования от классов без полей

        Модуль Coords

    commit 8f7e92d418
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Mon Sep 16 08:25:43 2024 +0300

        Turtle переделал на паттерн Команда

    commit a6f6d8a90b
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Sep 7 23:11:54 2024 +0300

        Правки рейтинга в TeacherPlugin

    commit 2365eb3633
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Sep 7 15:54:15 2024 +0300

        LinkLabel в TeacherControlPlugin

    commit 1835b811ef
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Sep 3 23:51:44 2024 +0300

        MathNet Signed

    commit b23d6df9e9
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Sep 3 23:16:15 2024 +0300

        MathNet.Numerics.dll

    commit 790fba67b8
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Aug 27 17:56:09 2024 +0300

        3.10.0

    commit 1ec4204fd2
    Author: Sun Serega <sunserega2@gmail.com>
    Date:   Mon Aug 26 09:20:27 2024 +0300

        `.Batch` cleanup (#3108)

    commit b5e674c311
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Mon Aug 26 09:12:14 2024 +0300

        3_10_0

    commit 7face043cf
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Mon Aug 26 09:11:08 2024 +0300

        ToSet

    commit e456ad528e
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Aug 24 23:13:57 2024 +0300

        3.9.0.3530

    commit 3247469e6d
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Aug 24 22:55:27 2024 +0300

        Добавлен DrawPoints в Turtle

        Исправлена ошибка с отображением подписей в Y-координате

    commit 7548142623
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Aug 24 14:27:53 2024 +0300

        1. Глобально.
        SetDecimalSeparator(',')
        SetNumberFormat(DecimalSeparator := ','  и куча других параметров)

        s.ToReal(nfi)
        s.ToReals(nfi)
        StrToReal(nfi)
        StrToFloat(nfi)
        FloatToStr(nfi)

        var nfi := NumberFormat(DecimalSeparator := ',')

        s.ToReal(DecimalSeparator := ',')
        s.ToReals(DecimalSeparator := ',')
        StrToReal(DecimalSeparator := ',')

    commit d94885b950
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Aug 24 12:13:09 2024 +0300

        randomElement для строк

        .ToReals - разделителями могут быть пробел табуляция и переход на новую строку

        NumberFormat - функция, возвращающая nfi

    commit ae2e26acf8
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Fri Aug 23 19:33:55 2024 +0300

        PT4 - новые dll файлы старых заданий серий A

    commit 0f8aa6fa3c
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sun Aug 18 17:28:05 2024 +0300

        SetOf как основной синоним HSet

    commit db4b53be20
    Merge: 86852e0a5 b9fd59a84
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sun Aug 18 16:05:42 2024 +0300

        Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet

    commit 86852e0a59
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sun Aug 18 16:05:14 2024 +0300

        School - ToBase(number: int64

    commit b9fd59a840
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Tue Aug 13 15:08:44 2024 +0200

        #2830

    commit 4f0b0f8ba0
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Tue Aug 13 14:43:49 2024 +0200

        #3194

    commit e3ee0fed4c
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Tue Aug 13 13:49:30 2024 +0200

        #3097

    commit d396c4a9fe
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Tue Aug 13 10:40:23 2024 +0200

        #3178

    commit 0d846d2335
    Merge: e91e35398 a65a86921
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Mon Aug 12 15:24:11 2024 +0200

        Merge pull request #3170 from samuraiGH/ForeachResolver-rework

        Foreach resolver rework

    commit a65a869211
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Mon Aug 12 15:50:42 2024 +0300

        increasing pcu file version

    commit e91e353984
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sun Aug 11 15:21:29 2024 +0300

        Обновленный модуль Turtle.pas

    commit c18238df39
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Aug 6 20:18:57 2024 +0300

        3.9.0.3523

    commit 1da2b524a6
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Aug 6 19:34:10 2024 +0300

        School PrimeDivisors

    commit 47c61d8b14
    Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
    Date:   Fri Aug 2 10:48:07 2024 +0300

        New directive to disable linking pascal standard modules (#3186)

        * Add new 'disable standard units' directive and it's processing

        * Refactor InitializeNewUnit function

        * Improve disable standard units directive checks

        * Add null check in programs.cs to avoid error

        * Rename error related to disable standard units directive

        * Add referencing standard net libraries

        * Add checks for duplicates when injecting references

    commit fc3ab96cae
    Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
    Date:   Fri Aug 2 10:46:40 2024 +0300

        Delete DocumentedUnits option and Exclude HelpBuilder project (#3192)

        * Delete CodeGeneration and PCUGenerate options from CompilerInternalDebug

        Достаточно их аналогов из CompilerOptions.

        * Add recreating CompilerOptions when reloading Compiler

        * Change Rebuild checkbox logic

        * Delete documented units fiels from CompilerInternalDebug

        * Revert "Delete CodeGeneration and PCUGenerate options from CompilerInternalDebug"

        This reverts commit 25e92b22722b7e251ab0156148fdf28ee3175c27.

        * Exclude HelpBuilder

    commit 64acde6460
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Jul 31 18:21:04 2024 +0300

        Сделал возможным неявное приведение некоторого типа к array of T (при описании оператора в виде статической функции класса)

        School - IsPrime(n)

    commit 3db5709101
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Jul 31 10:56:18 2024 +0300

        ZipCartesianFuncs.pas

    commit c4fd47128b
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Jul 30 22:56:03 2024 +0300

        Zip, Cartesian - сделаны внешние функции до 5 параметров, в т.ч. с проекцией
        Zip, Cartesian - методы расширения дополнены чтобы было как во внешних
        Перегенерирована справка

    commit 7d66f26d4f
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Mon Jul 1 00:16:43 2024 +0300

        cleanup and more tests

    commit 464dc794a8
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Sun Jun 30 23:31:28 2024 +0300

        cleanup and more comments

    commit 32f126370c
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Sun Jun 30 21:35:06 2024 +0300

        attempt to fix GetEnumerator resolving for Pascal types

    commit fb3eeeb28b
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Sat Jun 29 16:26:35 2024 +0300

        fix tests

    commit 84b0dfe537
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Sat Jun 29 15:49:13 2024 +0300

        fix getting MethodInfo

    commit 5fa4d9fce7
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Fri Jun 28 22:45:07 2024 +0300

        cold fix set of T resolving

    commit 460ce636ab
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Fri Jun 28 22:21:06 2024 +0300

        hot fix set of T resolving

    commit 83c2f29ac6
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Fri Jun 28 21:53:11 2024 +0300

        fix method filtering again

    commit c840a1a47a
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Fri Jun 28 21:32:41 2024 +0300

        fix type recovery

    commit 2436627fdd
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Fri Jun 28 19:18:32 2024 +0300

        fixing method filtering

    commit 15a05360a4
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Fri Jun 28 17:25:39 2024 +0300

        attempt to fix GetEnumerator resolving for compiled types

    commit 4fd020d084
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Fri Jun 28 17:21:00 2024 +0300

        adding tests

    * feat(bin/LanguageKits/SPython): add more things to installer

    * Change get_system_module method visibility (and some more)

    * Update SPython language names

    * Add CaseSensitive boolean saving in pcu

    * Implement case sensitive symbol table

    * Fix Create function not found error

    * Delete try/catch block in CollectNamesFromUsedUnits to make code cleaner

    * Create languageCaseSensitive field in pcu

    * Create CompilationArtifacts struct for passing data to ConvertAfterUsedModulesCompilation

    * Fix GraphWPF importing problem by dirty workaround !!!

    * Squashed commit of the following:

    commit 57ff5ef37d04ce8fcac8705c5a693bddf2ecf10e
    Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
    Date:   Thu Feb 27 12:56:53 2025 +0300

        Fix Global Variables Type Definition

        Основная программа выносится в функцию, определяемой самой первой и first_assignment_defines_type выводит тип глобальных переменных корректно

    commit 6f93ae8d6afc1c685d602b85ba6d455d862b35af
    Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
    Date:   Wed Feb 26 17:33:10 2025 +0300

        Replace same_type_node, Fix Procedure Assignment

    commit 52a096394cfdd4d8e4b27ddd36570b45b053c380
    Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
    Date:   Thu Feb 20 13:59:16 2025 +0300

        Fix Local Scope in If Node

    commit a0be5bed7f110314c0e512d28a76e3bd87328f01
    Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
    Date:   Sat Feb 15 16:40:50 2025 +0300

        Fix Bug with same_type_node

    commit 04fd2b2a6667bf06af02614a2fd30d0b50172a0c
    Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
    Date:   Sat Feb 15 16:09:27 2025 +0300

        Fix Assignment for New Variables

    commit ea591e243a5a458d6d94e665cec50d9ef60e1a08
    Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
    Date:   Sat Feb 15 15:58:45 2025 +0300

        Fix Assignment for Imported Variables in Functions

    commit e5d71be7693c527e6f4cd88671503dafa0ac9777
    Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
    Date:   Sat Feb 15 15:13:21 2025 +0300

        Fix SPython's Syntax Node Erasion

    commit c78649ac7e7883860ce459cb31f9d9e46194f203
    Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
    Date:   Sat Feb 15 14:35:53 2025 +0300

        Fix Variables from Module Assignment

    commit 4890f7f163a2557bc58d6e9c48cb432c6436a3aa
    Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
    Date:   Sat Feb 15 13:36:53 2025 +0300

        Return RetainUsedGlobalVariablesVisitor

    commit e5460edf2fae002ccc64d261bbb8fadb27deec12
    Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
    Date:   Sat Feb 15 13:05:38 2025 +0300

        Add Errors for Wrong Global Usage

    commit e32387e1356cc1e330518c57ab895f89b9de1784
    Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
    Date:   Sat Feb 15 12:33:55 2025 +0300

        Update Comments about Syntax Visitors

    commit 1f6c7ac2d8c891d582cbe957ed2ad6886de27de1
    Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
    Date:   Sat Feb 15 12:27:59 2025 +0300

        Fix Global Variables

        read access for global variables in fuctions by default

    commit e840610a25718ba12df144948bdda175cbc8d7c5
    Merge: e70cb9914 6c81b45c0
    Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
    Date:   Fri Feb 14 19:51:38 2025 +0300

        Merge branch 'SPython' into SPython-Context-Change

    commit e70cb99145120df29d1ae172d1b00afa8ea5b18f
    Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
    Date:   Fri Feb 14 19:49:18 2025 +0300

        Return Back Global Keyword

    commit 7cf7a24b8f927cad72645e028f0e0ebc47cae328
    Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
    Date:   Wed Feb 12 13:15:35 2025 +0300

        Fix Merge

    commit 89cc4551a0bcdb55eb64d244e35035134e5f6e75
    Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
    Date:   Wed Feb 12 13:02:06 2025 +0300

        Squashed commit of the following:

        commit 41dfb6f187
        Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
        Date:   Fri Feb 7 21:41:01 2025 +0300

            [] - преобразование во все контейнеры

            GraphABCHelper - теперь ABCObjects работает под Линукс

            School исправлен согласно последним веяниям []

        commit 79bbbd10ff
        Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
        Date:   Wed Jan 29 20:18:37 2025 +0300

            removing files for support fx4.0 (#3240)

        commit 88d5c409eb
        Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
        Date:   Tue Jan 28 20:41:55 2025 +0300

            Рефакторинг PascalABCNET.xshd (#3237)

            * refactoring PascalABCNET.xshd

            * removing extra characters

        commit 8fbd7fdfc3
        Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
        Date:   Sun Jan 26 23:42:48 2025 +0300

            3.10.3
            faststrings
            EmptyCollection и преобразование ее в List, Dictionary
            t: (real,real) := (1,2)

        commit bba132bd5d
        Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
        Date:   Wed Jan 22 09:14:44 2025 +0300

            Поправил справку по функции

        commit 1bd21857cc
        Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
        Date:   Wed Jan 8 18:46:51 2025 +0300

            Teacher Control Plugin - возможность задать server.dat

        commit 0848a1b796
        Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
        Date:   Sat Jan 4 22:54:38 2025 +0300

            Исправление автоформатирования []

        commit d45b782a7b
        Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
        Date:   Sat Jan 4 18:45:07 2025 +0300

            Rename PABCSistem in test suite

        commit c2347e604b
        Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
        Date:   Sat Jan 4 14:44:51 2025 +0300

            Примеры - устранил неточности

            LightPT - имя сервера вынес в публичную секцию

        commit b68b8da970
        Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
        Date:   Tue Dec 17 15:52:18 2024 +0300

            Примеры Coords1.pas Coords2.pas.pas

        commit 8a9788e6f9
        Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
        Date:   Tue Dec 17 15:06:57 2024 +0300

            Перенес проверку set array на уровень парсера

            Немного поправил Intellisense по наведению для NewSet

            По точке там что то другое работает

        commit 874ddebad3
        Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
        Date:   Sat Dec 14 21:00:38 2024 +0300

            Поправил грамматику []

            Теперь нельзя в режиме ## использовать атрибуты

            Зато можно [1,2,3].Print

        commit 080fb487e1
        Merge: a53dcd9ed a484b0e82
        Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
        Date:   Sat Dec 14 15:25:24 2024 +0300

            Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet

        commit a53dcd9ed2
        Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
        Date:   Sat Dec 14 15:25:16 2024 +0300

            SF Prm Cmb для строк

        commit a484b0e82d
        Author: Sun Serega <sunserega2@gmail.com>
        Date:   Thu Dec 12 13:49:17 2024 +0200

            fix (#3231)

        commit 6ef11f249c
        Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
        Date:   Tue Dec 10 11:05:45 2024 +0300

            3.10.2

        commit db9679d89f
        Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
        Date:   Tue Dec 10 10:59:20 2024 +0300

            Закончил превращение синтаксиса [] по умолчанию в массивы

        commit 45fdde24b4
        Author: Ivan Bondarev <ibond84@googlemail.com>
        Date:   Sun Dec 8 18:08:00 2024 +0100

            #3229

        commit 494b47624d
        Merge: 5875b9929 7906d73da
        Author: Ivan Bondarev <ibond84@googlemail.com>
        Date:   Sun Dec 8 10:42:07 2024 +0100

            Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet

        commit 5875b99296
        Author: Ivan Bondarev <ibond84@googlemail.com>
        Date:   Sun Dec 8 10:41:53 2024 +0100

            platformtarget native - .NET 9.0

        commit 7906d73da3
        Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
        Date:   Tue Dec 3 14:25:37 2024 +0300

            Небольшие изменения в реализации операций с множествами

        commit 087591c7b6
        Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
        Date:   Wed Nov 27 11:37:07 2024 +0300

            3.10.1

            Coords - доработки

            Distance, Middle, DrawText с фоном и рамкой. Глобальные переменные настройки

        commit d268d4f83b
        Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
        Date:   Thu Nov 21 22:24:07 2024 +0300

            NSToBytes переделал с исключением

        commit 2bacdc8c28
        Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
        Date:   Wed Nov 20 13:20:33 2024 +0300

            Комментарии к NewSet

        commit e917ac8eca
        Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
        Date:   Wed Nov 20 12:42:15 2024 +0300

            TypeName для set

        commit 206289c6a7
        Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
        Date:   Tue Nov 19 20:23:03 2024 +0300

            Везде заменил _hs на hs в NewSet

            Убрал вызовы методов расширений NewSet в PABCSystem.pas

…

* Add rest of GetDesctiption methods to SPythonLanguageInformation

* Add extended_new_expr allowing use without brackets for Intellisense

* Add new intellisense_dotted_ident non-terminal symbol

* Fix OperatorCanNotBeAppliedToThisTypes error throwing for SPython

* Squashed commit of the following:

commit 6d15540895
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Aug 31 17:21:18 2025 +0300

    SPython в 3.11

commit 1dc78980b2
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Aug 27 11:23:19 2025 +0300

    Flag

commit 0483c2dca0
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Mon Aug 25 23:04:15 2025 +0300

    Sign для беззнаковых

commit dc4cbb2547
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Mon Aug 25 00:16:12 2025 +0300

    Флаг в Graph3D.pas

commit 6a6c3553c2
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Mon Aug 4 13:59:32 2025 +0300

    LightPT - задачи перенес

commit bf3ba7d288
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Mon Aug 4 12:51:30 2025 +0300

    interface у Turtle.pas

    Команда изменения цвета и ширины

commit 59ed71f459
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Mon Aug 4 10:29:08 2025 +0300

    Команды ПоменятьЦвет и ПоменятьШиринуПера теперь учитываются в Черепахе

commit 160dd58195
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Jul 20 17:00:28 2025 +0300

    fix #3324

commit 6218cc8723
Merge: cabe8f85e 89e02b504
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Jul 19 20:06:38 2025 +0300

    Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet

commit cabe8f85ee
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sat Jul 19 20:06:25 2025 +0300

    Min(1) Max(1)

commit 89e02b504e
Author: Nikolay Kuznetsov <adasoft@gmail.com>
Date:   Thu Jul 17 10:08:54 2025 +0300

    Update CodeCompletionActions.cs (#3323)

    Показ Code Completion Window по Ctrl-Space, если курсор находится сразу после точки (как сделано в Win версии). Текущее поведение - после точки ccw не показывать, только если курсор переместить на несколько символов вправо от точки.

commit c080feba89
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Tue Jul 15 16:06:58 2025 +0300

    RayTracer/RayTracer3.pas

commit cc266b3863
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Mon Jul 14 19:08:55 2025 +0300

    Поправки в LanguageInformation (#3322)

    * Fix inaccuracy

    * Delete useless variable

    * Implement refreshing description before showing it in Intellisense windows

    * Fix inaccuracies

    * Add GetDescriptionForArray and GetDescriptionForDelegate in SPythonLanguageInfo

    * Exclude Read Write Async and Await from keywords list in Intellisense

commit 56d1eb5648
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Sun Jul 13 18:44:29 2025 +0300

    Обновление описания сущностей в Intellisense (#3321)

    * Implement refreshing description before showing it in Intellisense windows

    * Change BuildDescription in ProcScope

    * Fix description rebuild bug

commit 4cec1e7c43
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Sun Jul 13 13:13:29 2025 +0300

    fix #3299

    Revert incorrect pr intellisense

commit 20a1436129
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Sun Jul 13 10:19:40 2025 +0300

    Исправление неправильных изменений в LanguageInformation (#3319)

    * Fix inaccuracy

    * Delete useless variable

    * Implement refreshing description before showing it in Intellisense windows

    * Fix inaccuracies

    * Add GetDescriptionForArray and GetDescriptionForDelegate in SPythonLanguageInfo

commit 9e9a0469b3
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Thu Jul 10 18:35:07 2025 +0300

    Добавление обновления описания сущностей из Intellisense перед выводом их в окошке (#3320)

    * Implement refreshing description before showing it in Intellisense windows

    * Change BuildDescription in ProcScope

commit e14b517e9d
Author: Nikolay Kuznetsov <adasoft@gmail.com>
Date:   Sat Jul 5 11:09:00 2025 +0300

    Update ProcessRunner.cs -- fix for space chars in running app file name (#3317)

    fix pascalabcnet/pascalabcnet#ISSUE-3315

commit 6fa1caa034
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Sat Jul 5 11:05:34 2025 +0300

    Учет случая params в TipPainterTools при подсветке (#3318)

    * Refactor LanguageInformation classes

    * Improve extension check in TipPainterTools

    * Refactor parsing parameters for signature help

    * Fix TipPainterTools Linux version

    * Add Params check in TipPainterTools

commit a1584f4f90
Author: Nikolay Kuznetsov <adasoft@gmail.com>
Date:   Sat Jul 5 11:05:10 2025 +0300

    Update RobotField.pas (#3310)

    Адаптировано для Linux версии PABC
    * показываются надписи на форме в Ubuntu
    * шрифт надписей приведён к совместимому Sans Serif
    * Помощь - замена #10#13 на NewLine определяемый платформой

commit 19f78930ed
Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
Date:   Thu Jul 3 20:42:47 2025 +0300

    removing hard code (#3313)

commit ef795bbb64
Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
Date:   Thu Jul 3 20:39:09 2025 +0300

    renaming method and adding comments (#3312)

commit 9d57c427ac
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Mon Jun 30 19:33:04 2025 +0300

    MainForm.Load +=

commit 9927a0e305
Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
Date:   Mon Jun 30 19:19:24 2025 +0300

    fix type name comparsion (#3309)

commit 7614931f06
Author: dmkwketx <dmkwketx@gmail.com>
Date:   Mon Jun 30 19:18:05 2025 +0300

    Update WhatsNew 3_10_4 files: exit_param2.pas & exit_param3.pas (#3305)

    * Update exit_param3.pas

    Добавлена проверка, что числа меньше числа 2 не простые. особенно единица

    * Update exit_param2.pas

    Добавлена проверка что числа меньше числа 2 не простые.

commit dccd7942b7
Author: Nikolay Kuznetsov <adasoft@gmail.com>
Date:   Mon Jun 30 19:17:09 2025 +0300

    Added ABCObjects samples to Linux build (#3306)

commit 0b3471daa0
Author: Nikolay Kuznetsov <adasoft@gmail.com>
Date:   Mon Jun 30 19:16:51 2025 +0300

    Delete InstallerSamples/Graphics/GraphABCLinux directory (#3307)

    Удалить как неиспользуемую

commit d4173b0bec
Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
Date:   Sat Jun 28 16:12:28 2025 +0300

    removing hard code (#3304)

commit 0972d09837
Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
Date:   Sat Jun 28 16:10:29 2025 +0300

    Return break, continue и exit in completion list (#3298)

commit 5abe6333ba
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Thu Jun 26 13:25:24 2025 +0300

    опечатка в комменте

commit aa42e80c7f
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Jun 25 22:27:48 2025 +0300

    2025 by

commit ae16484db7
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Jun 25 20:06:03 2025 +0300

    Пересобрал

commit 0646c80e4a
Merge: 107f2c49b a389183ef
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Jun 25 20:05:20 2025 +0300

    Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet

commit 107f2c49bb
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Jun 25 19:11:42 2025 +0300

    Сделал ошибку при передаче в качестве делегата параметром обобщенной функции

commit d2440264e8
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Jun 25 19:09:36 2025 +0300

    Перенес из ошибок назад в правильные.

    Вернул странное недокументированное поведение присваивания обобщенной функции делегату

commit da16d41c58
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Wed Jun 25 19:07:18 2025 +0300

    Удалил два файла с ошибками - обобщенная функция присваивается делегату

commit a389183efe
Author: Sun Serega <sunserega2@gmail.com>
Date:   Mon Jun 23 23:49:48 2025 +0300

    Improve GitIgnoreTester output (#3295)

commit 63274c3c5e
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Mon Jun 23 22:28:17 2025 +0300

    Пересобрал 3.11.0.3641

commit 34187755de
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Mon Jun 23 22:02:24 2025 +0300

    fix #3290

commit 6eccd661ae
Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
Date:   Mon Jun 23 16:36:58 2025 +0300

    3.11 version with SPython (not in installer!)

commit 080fca15bb
Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
Date:   Sun Jun 22 20:56:22 2025 +0300

    SPython 1.0 (#3274)

    * Squashed commit of the following:

    commit 115ed2e1b7b361b35f0b213688ad0838e0bffa69
    Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
    Date:   Thu Nov 7 10:21:08 2024 +0300

        Add from import Handling

    commit bdd3eb785e6c719201104497808e89dc20c4eacc
    Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
    Date:   Sun Nov 3 12:59:29 2024 +0300

        Add 'Import As'

    commit e5747aa56e359633be366887d3cf67d1ec054701
    Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
    Date:   Sun Nov 3 11:08:50 2024 +0300

        Add Ident_list to import

    commit 9d16fdb341b329adae45dec2bf6db04d8572675f
    Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
    Date:   Sun Nov 3 10:01:13 2024 +0300

        Move Import Handling to Visitor

    commit d8a0e8f5ee840e3ff15caafd7a456f91e1f2a962
    Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
    Date:   Sat Nov 2 18:36:10 2024 +0300

        Rename of Productions Related to Import

    commit 71282a457ab0c039a2f42c05249336d92ac76e7a
    Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
    Date:   Sat Nov 2 18:33:41 2024 +0300

        Move import to Statements

    * Add new AST visitors call template

    * Add syntax tree parameter

    * Add SpecialSyntaxTreeConverter

    * Add CollectNamesVisitor

    * Read Symbols from Semantic Tree

    * Add Visitor Renewaling

    * Fix Usage of Standard Libraries

    * Update AssignToVarConverterVisitor.cs

    * Fix Foreach Node Visitor

    * Refactor InterpreterVisitor (alpha version)

    * Add Imports Nodes for Declarations

    * Rename Method for Sending Object

    * Fix Remove in interface_node

    * Add ApplyConversionsAfterUsedModulesCompilation method to ILanguage interface

    * Rename ApplyConcreteConversions to ApplyConversions

    * Squashed commit of the following:

    commit a484b0e82d
    Author: Sun Serega <sunserega2@gmail.com>
    Date:   Thu Dec 12 13:49:17 2024 +0200

        fix (#3231)

    commit 6ef11f249c
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Dec 10 11:05:45 2024 +0300

        3.10.2

    commit db9679d89f
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Dec 10 10:59:20 2024 +0300

        Закончил превращение синтаксиса [] по умолчанию в массивы

    commit 45fdde24b4
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Sun Dec 8 18:08:00 2024 +0100

        #3229

    commit 494b47624d
    Merge: 5875b9929 7906d73da
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Sun Dec 8 10:42:07 2024 +0100

        Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet

    commit 5875b99296
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Sun Dec 8 10:41:53 2024 +0100

        platformtarget native - .NET 9.0

    commit 7906d73da3
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Dec 3 14:25:37 2024 +0300

        Небольшие изменения в реализации операций с множествами

    commit 087591c7b6
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Nov 27 11:37:07 2024 +0300

        3.10.1

        Coords - доработки

        Distance, Middle, DrawText с фоном и рамкой. Глобальные переменные настройки

    commit d268d4f83b
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Thu Nov 21 22:24:07 2024 +0300

        NSToBytes переделал с исключением

    commit 2bacdc8c28
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Nov 20 13:20:33 2024 +0300

        Комментарии к NewSet

    commit e917ac8eca
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Nov 20 12:42:15 2024 +0300

        TypeName для set

    commit 206289c6a7
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Nov 19 20:23:03 2024 +0300

        Везде заменил _hs на hs в NewSet

        Убрал вызовы методов расширений NewSet в PABCSystem.pas

        Убрал var в operator +

    commit d8262078f6
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Nov 19 13:56:47 2024 +0300

        Исправление мелких ошибок NewSet

        Все тесты проходят.

        Проблема, которая остаётся - в режиме ускорения такие программы падают:

        begin
          var s: set of byte;
          Print(s = [1]);
        end.

        Причина - из dll не вызывается конструктор записи без параметров, хотя он определён. В C# вообще у записей не может быть конструктора по умолчанию - наверное потому. Но для NewSet надо бы сделать исключение

    commit f8819665ba
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Nov 16 10:56:11 2024 +0300

        NS2

    commit 591d9ebe60
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Wed Nov 13 21:34:10 2024 +0100

        fix

    commit c6505634f4
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Wed Nov 13 21:12:33 2024 +0100

        fix

    commit a6564df23c
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Wed Nov 13 20:52:29 2024 +0100

        fix in new sets

    commit 03be5bd931
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Nov 13 22:13:41 2024 +0300

        Переставил operator:= в NewSet

    commit 96c68f1666
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Tue Nov 12 21:38:07 2024 +0100

        #3223

    commit 82776f3c77
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Nov 9 12:18:19 2024 +0300

        NewSet - много мелких исправлений.

        Все тесты проходят кроме Tests 5 - видимо с pabcrtl.dll

    commit fbd63efa89
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sun Nov 3 16:59:48 2024 +0300

        NewSets
        Некоторые тесты надо исправить

    commit 746c4ae2c2
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Thu Oct 31 21:00:42 2024 +0100

        #3221

    commit 350d07326d
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Thu Oct 31 18:35:51 2024 +0100

        #3221

    commit aae9ab408b
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Thu Oct 31 18:25:06 2024 +0100

        #3221

    commit 1e4a811e04
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Wed Oct 30 20:42:59 2024 +0100

        test for #3219

    commit d1a1247ecd
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Wed Oct 30 20:24:16 2024 +0100

        #3219

    commit 13b3071d80
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Mon Oct 28 22:42:17 2024 +0300

        закомментировал extensions преобразования arr to set. Надеюсь в новой реализации всё исправить

    commit 6d5c18f457
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Thu Oct 24 10:17:48 2024 +0300

        SF XLSX.pas

    commit 0c773a7ecb
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Oct 16 12:04:33 2024 +0300

        tree.xml с парой новых узлов для Питона

    commit 53b3fd0881
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Oct 9 14:09:01 2024 +0300

        Добавил временное преобразование от array of T в set of T

    commit 271d5792ce
    Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
    Date:   Tue Oct 8 10:00:14 2024 +0300

        Documentation (#3211)

        * Add Compiler documentation

        * Add Intellisense documentation

        * Move documentation folder to root directory

    commit 79f9ab73a0
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Oct 5 15:33:20 2024 +0300

        PT4_32

    commit 0a20c8d32c
    Author: Sun Serega <sunserega2@gmail.com>
    Date:   Thu Sep 26 09:02:31 2024 +0200

        Add `.DistinctBy` (#3122)

    commit 11981dbf47
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Sep 25 11:53:02 2024 +0300

        IndexMinBy, IndexMaxBy
        MinBy, MaxBy - более эффективная реализация
        GraphWPF - SaveToClipboard

    commit 3eb1d2bd85
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Sun Sep 22 17:42:09 2024 +0200

        #3197

    commit 20edd487e3
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Sun Sep 22 12:39:03 2024 +0200

        #3204

    commit 7261231c9c
    Merge: 7debbe702 9ab932977
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Sun Sep 22 09:49:58 2024 +0200

        Merge pull request #3207 from AlexanderZemlyak/fix_linux_version

        Fix linux version

    commit 9ab9329771
    Author: AlexanderZemlyak <zemlyaksanya@mail.ru>
    Date:   Sun Sep 22 10:23:18 2024 +0300

        Add new projects in PascalACBNETLinux.sln

    commit 7debbe702a
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Sep 21 14:29:38 2024 +0300

        Критическое обновление LightPT

    commit 40335b873e
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Fri Sep 20 22:58:46 2024 +0300

        LightPT - OutputListIsClearedFromSpaces := False;
        Coords - DrawLine

    commit 078281db17
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Thu Sep 19 22:42:44 2024 +0300

        coords suite

    commit 8d51f999a5
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Thu Sep 19 20:28:28 2024 +0300

        Автоклассы - разрешение наследования от классов без полей

        Модуль Coords

    commit 8f7e92d418
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Mon Sep 16 08:25:43 2024 +0300

        Turtle переделал на паттерн Команда

    commit a6f6d8a90b
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Sep 7 23:11:54 2024 +0300

        Правки рейтинга в TeacherPlugin

    commit 2365eb3633
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Sep 7 15:54:15 2024 +0300

        LinkLabel в TeacherControlPlugin

    commit 1835b811ef
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Sep 3 23:51:44 2024 +0300

        MathNet Signed

    commit b23d6df9e9
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Sep 3 23:16:15 2024 +0300

        MathNet.Numerics.dll

    commit 790fba67b8
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Aug 27 17:56:09 2024 +0300

        3.10.0

    commit 1ec4204fd2
    Author: Sun Serega <sunserega2@gmail.com>
    Date:   Mon Aug 26 09:20:27 2024 +0300

        `.Batch` cleanup (#3108)

    commit b5e674c311
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Mon Aug 26 09:12:14 2024 +0300

        3_10_0

    commit 7face043cf
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Mon Aug 26 09:11:08 2024 +0300

        ToSet

    commit e456ad528e
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Aug 24 23:13:57 2024 +0300

        3.9.0.3530

    commit 3247469e6d
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Aug 24 22:55:27 2024 +0300

        Добавлен DrawPoints в Turtle

        Исправлена ошибка с отображением подписей в Y-координате

    commit 7548142623
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Aug 24 14:27:53 2024 +0300

        1. Глобально.
        SetDecimalSeparator(',')
        SetNumberFormat(DecimalSeparator := ','  и куча других параметров)

        s.ToReal(nfi)
        s.ToReals(nfi)
        StrToReal(nfi)
        StrToFloat(nfi)
        FloatToStr(nfi)

        var nfi := NumberFormat(DecimalSeparator := ',')

        s.ToReal(DecimalSeparator := ',')
        s.ToReals(DecimalSeparator := ',')
        StrToReal(DecimalSeparator := ',')

    commit d94885b950
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Aug 24 12:13:09 2024 +0300

        randomElement для строк

        .ToReals - разделителями могут быть пробел табуляция и переход на новую строку

        NumberFormat - функция, возвращающая nfi

    commit ae2e26acf8
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Fri Aug 23 19:33:55 2024 +0300

        PT4 - новые dll файлы старых заданий серий A

    commit 0f8aa6fa3c
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sun Aug 18 17:28:05 2024 +0300

        SetOf как основной синоним HSet

    commit db4b53be20
    Merge: 86852e0a5 b9fd59a84
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sun Aug 18 16:05:42 2024 +0300

        Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet

    commit 86852e0a59
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sun Aug 18 16:05:14 2024 +0300

        School - ToBase(number: int64

    commit b9fd59a840
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Tue Aug 13 15:08:44 2024 +0200

        #2830

    commit 4f0b0f8ba0
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Tue Aug 13 14:43:49 2024 +0200

        #3194

    commit e3ee0fed4c
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Tue Aug 13 13:49:30 2024 +0200

        #3097

    commit d396c4a9fe
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Tue Aug 13 10:40:23 2024 +0200

        #3178

    commit 0d846d2335
    Merge: e91e35398 a65a86921
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Mon Aug 12 15:24:11 2024 +0200

        Merge pull request #3170 from samuraiGH/ForeachResolver-rework

        Foreach resolver rework

    commit a65a869211
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Mon Aug 12 15:50:42 2024 +0300

        increasing pcu file version

    commit e91e353984
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sun Aug 11 15:21:29 2024 +0300

        Обновленный модуль Turtle.pas

    commit c18238df39
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Aug 6 20:18:57 2024 +0300

        3.9.0.3523

    commit 1da2b524a6
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Aug 6 19:34:10 2024 +0300

        School PrimeDivisors

    commit 47c61d8b14
    Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
    Date:   Fri Aug 2 10:48:07 2024 +0300

        New directive to disable linking pascal standard modules (#3186)

        * Add new 'disable standard units' directive and it's processing

        * Refactor InitializeNewUnit function

        * Improve disable standard units directive checks

        * Add null check in programs.cs to avoid error

        * Rename error related to disable standard units directive

        * Add referencing standard net libraries

        * Add checks for duplicates when injecting references

    commit fc3ab96cae
    Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
    Date:   Fri Aug 2 10:46:40 2024 +0300

        Delete DocumentedUnits option and Exclude HelpBuilder project (#3192)

        * Delete CodeGeneration and PCUGenerate options from CompilerInternalDebug

        Достаточно их аналогов из CompilerOptions.

        * Add recreating CompilerOptions when reloading Compiler

        * Change Rebuild checkbox logic

        * Delete documented units fiels from CompilerInternalDebug

        * Revert "Delete CodeGeneration and PCUGenerate options from CompilerInternalDebug"

        This reverts commit 25e92b22722b7e251ab0156148fdf28ee3175c27.

        * Exclude HelpBuilder

    commit 64acde6460
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Jul 31 18:21:04 2024 +0300

        Сделал возможным неявное приведение некоторого типа к array of T (при описании оператора в виде статической функции класса)

        School - IsPrime(n)

    commit 3db5709101
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Jul 31 10:56:18 2024 +0300

        ZipCartesianFuncs.pas

    commit c4fd47128b
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Jul 30 22:56:03 2024 +0300

        Zip, Cartesian - сделаны внешние функции до 5 параметров, в т.ч. с проекцией
        Zip, Cartesian - методы расширения дополнены чтобы было как во внешних
        Перегенерирована справка

    commit 7d66f26d4f
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Mon Jul 1 00:16:43 2024 +0300

        cleanup and more tests

    commit 464dc794a8
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Sun Jun 30 23:31:28 2024 +0300

        cleanup and more comments

    commit 32f126370c
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Sun Jun 30 21:35:06 2024 +0300

        attempt to fix GetEnumerator resolving for Pascal types

    commit fb3eeeb28b
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Sat Jun 29 16:26:35 2024 +0300

        fix tests

    commit 84b0dfe537
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Sat Jun 29 15:49:13 2024 +0300

        fix getting MethodInfo

    commit 5fa4d9fce7
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Fri Jun 28 22:45:07 2024 +0300

        cold fix set of T resolving

    commit 460ce636ab
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Fri Jun 28 22:21:06 2024 +0300

        hot fix set of T resolving

    commit 83c2f29ac6
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Fri Jun 28 21:53:11 2024 +0300

        fix method filtering again

    commit c840a1a47a
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Fri Jun 28 21:32:41 2024 +0300

        fix type recovery

    commit 2436627fdd
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Fri Jun 28 19:18:32 2024 +0300

        fixing method filtering

    commit 15a05360a4
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Fri Jun 28 17:25:39 2024 +0300

        attempt to fix GetEnumerator resolving for compiled types

    commit 4fd020d084
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Fri Jun 28 17:21:00 2024 +0300

        adding tests

    * Move unitNames dictionary to CompilationUnit class

    * Implement Spython StringResorces for SyntaxTree Converters

    * Move post conversion method to ISyntaxTreeConverter interface

    * Override get_system_module in SpythonSyntaxTreeVisitor

    * Fix Unit and Function Having Same Name Bug

    * Add TimeMeasurements Programs

    * Swap Visitors for Supporting New Imports

    * Fix Function with Named Parameters Substitution

    * Add Error for Using Global

    * Fix yyloc Bug and Add SyntaxVisiters Errors

    * Move List Desugar from Visiter to Parser (temp)

    * Move List Generator Desugaring Back to Visitors

    * Add Args after Kvarg Error Message

    * Fix Parser and Visitors' Errors Messages

    * Moved Examples Programs

    * Update Name Substitution Logic

    * Squashed commit of the following:

    commit b68b8da970
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Dec 17 15:52:18 2024 +0300

        Примеры Coords1.pas Coords2.pas.pas

    commit 8a9788e6f9
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Dec 17 15:06:57 2024 +0300

        Перенес проверку set array на уровень парсера

        Немного поправил Intellisense по наведению для NewSet

        По точке там что то другое работает

    commit 874ddebad3
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Dec 14 21:00:38 2024 +0300

        Поправил грамматику []

        Теперь нельзя в режиме ## использовать атрибуты

        Зато можно [1,2,3].Print

    commit 080fb487e1
    Merge: a53dcd9ed a484b0e82
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Dec 14 15:25:24 2024 +0300

        Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet

    commit a53dcd9ed2
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Dec 14 15:25:16 2024 +0300

        SF Prm Cmb для строк

    commit a484b0e82d
    Author: Sun Serega <sunserega2@gmail.com>
    Date:   Thu Dec 12 13:49:17 2024 +0200

        fix (#3231)

    commit 6ef11f249c
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Dec 10 11:05:45 2024 +0300

        3.10.2

    commit db9679d89f
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Dec 10 10:59:20 2024 +0300

        Закончил превращение синтаксиса [] по умолчанию в массивы

    commit 45fdde24b4
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Sun Dec 8 18:08:00 2024 +0100

        #3229

    commit 494b47624d
    Merge: 5875b9929 7906d73da
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Sun Dec 8 10:42:07 2024 +0100

        Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet

    commit 5875b99296
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Sun Dec 8 10:41:53 2024 +0100

        platformtarget native - .NET 9.0

    commit 7906d73da3
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Dec 3 14:25:37 2024 +0300

        Небольшие изменения в реализации операций с множествами

    commit 087591c7b6
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Nov 27 11:37:07 2024 +0300

        3.10.1

        Coords - доработки

        Distance, Middle, DrawText с фоном и рамкой. Глобальные переменные настройки

    commit d268d4f83b
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Thu Nov 21 22:24:07 2024 +0300

        NSToBytes переделал с исключением

    commit 2bacdc8c28
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Nov 20 13:20:33 2024 +0300

        Комментарии к NewSet

    commit e917ac8eca
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Nov 20 12:42:15 2024 +0300

        TypeName для set

    commit 206289c6a7
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Nov 19 20:23:03 2024 +0300

        Везде заменил _hs на hs в NewSet

        Убрал вызовы методов расширений NewSet в PABCSystem.pas

        Убрал var в operator +

    commit d8262078f6
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Nov 19 13:56:47 2024 +0300

        Исправление мелких ошибок NewSet

        Все тесты проходят.

        Проблема, которая остаётся - в режиме ускорения такие программы падают:

        begin
          var s: set of byte;
          Print(s = [1]);
        end.

        Причина - из dll не вызывается конструктор записи без параметров, хотя он определён. В C# вообще у записей не может быть конструктора по умолчанию - наверное потому. Но для NewSet надо бы сделать исключение

    commit f8819665ba
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Nov 16 10:56:11 2024 +0300

        NS2

    commit 591d9ebe60
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Wed Nov 13 21:34:10 2024 +0100

        fix

    commit c6505634f4
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Wed Nov 13 21:12:33 2024 +0100

        fix

    commit a6564df23c
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Wed Nov 13 20:52:29 2024 +0100

        fix in new sets

    commit 03be5bd931
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Nov 13 22:13:41 2024 +0300

        Переставил operator:= в NewSet

    commit 96c68f1666
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Tue Nov 12 21:38:07 2024 +0100

        #3223

    commit 82776f3c77
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Nov 9 12:18:19 2024 +0300

        NewSet - много мелких исправлений.

        Все тесты проходят кроме Tests 5 - видимо с pabcrtl.dll

    commit fbd63efa89
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sun Nov 3 16:59:48 2024 +0300

        NewSets
        Некоторые тесты надо исправить

    commit 746c4ae2c2
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Thu Oct 31 21:00:42 2024 +0100

        #3221

    commit 350d07326d
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Thu Oct 31 18:35:51 2024 +0100

        #3221

    commit aae9ab408b
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Thu Oct 31 18:25:06 2024 +0100

        #3221

    commit 1e4a811e04
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Wed Oct 30 20:42:59 2024 +0100

        test for #3219

    commit d1a1247ecd
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Wed Oct 30 20:24:16 2024 +0100

        #3219

    commit 13b3071d80
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Mon Oct 28 22:42:17 2024 +0300

        закомментировал extensions преобразования arr to set. Надеюсь в новой реализации всё исправить

    commit 6d5c18f457
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Thu Oct 24 10:17:48 2024 +0300

        SF XLSX.pas

    commit 0c773a7ecb
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Oct 16 12:04:33 2024 +0300

        tree.xml с парой новых узлов для Питона

    commit 53b3fd0881
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Oct 9 14:09:01 2024 +0300

        Добавил временное преобразование от array of T в set of T

    commit 271d5792ce
    Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
    Date:   Tue Oct 8 10:00:14 2024 +0300

        Documentation (#3211)

        * Add Compiler documentation

        * Add Intellisense documentation

        * Move documentation folder to root directory

    commit 79f9ab73a0
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Oct 5 15:33:20 2024 +0300

        PT4_32

    commit 0a20c8d32c
    Author: Sun Serega <sunserega2@gmail.com>
    Date:   Thu Sep 26 09:02:31 2024 +0200

        Add `.DistinctBy` (#3122)

    commit 11981dbf47
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Sep 25 11:53:02 2024 +0300

        IndexMinBy, IndexMaxBy
        MinBy, MaxBy - более эффективная реализация
        GraphWPF - SaveToClipboard

    commit 3eb1d2bd85
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Sun Sep 22 17:42:09 2024 +0200

        #3197

    commit 20edd487e3
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Sun Sep 22 12:39:03 2024 +0200

        #3204

    commit 7261231c9c
    Merge: 7debbe702 9ab932977
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Sun Sep 22 09:49:58 2024 +0200

        Merge pull request #3207 from AlexanderZemlyak/fix_linux_version

        Fix linux version

    commit 9ab9329771
    Author: AlexanderZemlyak <zemlyaksanya@mail.ru>
    Date:   Sun Sep 22 10:23:18 2024 +0300

        Add new projects in PascalACBNETLinux.sln

    commit 7debbe702a
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Sep 21 14:29:38 2024 +0300

        Критическое обновление LightPT

    commit 40335b873e
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Fri Sep 20 22:58:46 2024 +0300

        LightPT - OutputListIsClearedFromSpaces := False;
        Coords - DrawLine

    commit 078281db17
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Thu Sep 19 22:42:44 2024 +0300

        coords suite

    commit 8d51f999a5
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Thu Sep 19 20:28:28 2024 +0300

        Автоклассы - разрешение наследования от классов без полей

        Модуль Coords

    commit 8f7e92d418
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Mon Sep 16 08:25:43 2024 +0300

        Turtle переделал на паттерн Команда

    commit a6f6d8a90b
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Sep 7 23:11:54 2024 +0300

        Правки рейтинга в TeacherPlugin

    commit 2365eb3633
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Sep 7 15:54:15 2024 +0300

        LinkLabel в TeacherControlPlugin

    commit 1835b811ef
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Sep 3 23:51:44 2024 +0300

        MathNet Signed

    commit b23d6df9e9
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Sep 3 23:16:15 2024 +0300

        MathNet.Numerics.dll

    commit 790fba67b8
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Aug 27 17:56:09 2024 +0300

        3.10.0

    commit 1ec4204fd2
    Author: Sun Serega <sunserega2@gmail.com>
    Date:   Mon Aug 26 09:20:27 2024 +0300

        `.Batch` cleanup (#3108)

    commit b5e674c311
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Mon Aug 26 09:12:14 2024 +0300

        3_10_0

    commit 7face043cf
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Mon Aug 26 09:11:08 2024 +0300

        ToSet

    commit e456ad528e
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Aug 24 23:13:57 2024 +0300

        3.9.0.3530

    commit 3247469e6d
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Aug 24 22:55:27 2024 +0300

        Добавлен DrawPoints в Turtle

        Исправлена ошибка с отображением подписей в Y-координате

    commit 7548142623
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Aug 24 14:27:53 2024 +0300

        1. Глобально.
        SetDecimalSeparator(',')
        SetNumberFormat(DecimalSeparator := ','  и куча других параметров)

        s.ToReal(nfi)
        s.ToReals(nfi)
        StrToReal(nfi)
        StrToFloat(nfi)
        FloatToStr(nfi)

        var nfi := NumberFormat(DecimalSeparator := ',')

        s.ToReal(DecimalSeparator := ',')
        s.ToReals(DecimalSeparator := ',')
        StrToReal(DecimalSeparator := ',')

    commit d94885b950
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sat Aug 24 12:13:09 2024 +0300

        randomElement для строк

        .ToReals - разделителями могут быть пробел табуляция и переход на новую строку

        NumberFormat - функция, возвращающая nfi

    commit ae2e26acf8
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Fri Aug 23 19:33:55 2024 +0300

        PT4 - новые dll файлы старых заданий серий A

    commit 0f8aa6fa3c
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sun Aug 18 17:28:05 2024 +0300

        SetOf как основной синоним HSet

    commit db4b53be20
    Merge: 86852e0a5 b9fd59a84
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sun Aug 18 16:05:42 2024 +0300

        Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet

    commit 86852e0a59
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sun Aug 18 16:05:14 2024 +0300

        School - ToBase(number: int64

    commit b9fd59a840
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Tue Aug 13 15:08:44 2024 +0200

        #2830

    commit 4f0b0f8ba0
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Tue Aug 13 14:43:49 2024 +0200

        #3194

    commit e3ee0fed4c
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Tue Aug 13 13:49:30 2024 +0200

        #3097

    commit d396c4a9fe
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Tue Aug 13 10:40:23 2024 +0200

        #3178

    commit 0d846d2335
    Merge: e91e35398 a65a86921
    Author: Ivan Bondarev <ibond84@googlemail.com>
    Date:   Mon Aug 12 15:24:11 2024 +0200

        Merge pull request #3170 from samuraiGH/ForeachResolver-rework

        Foreach resolver rework

    commit a65a869211
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Mon Aug 12 15:50:42 2024 +0300

        increasing pcu file version

    commit e91e353984
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Sun Aug 11 15:21:29 2024 +0300

        Обновленный модуль Turtle.pas

    commit c18238df39
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Aug 6 20:18:57 2024 +0300

        3.9.0.3523

    commit 1da2b524a6
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Aug 6 19:34:10 2024 +0300

        School PrimeDivisors

    commit 47c61d8b14
    Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
    Date:   Fri Aug 2 10:48:07 2024 +0300

        New directive to disable linking pascal standard modules (#3186)

        * Add new 'disable standard units' directive and it's processing

        * Refactor InitializeNewUnit function

        * Improve disable standard units directive checks

        * Add null check in programs.cs to avoid error

        * Rename error related to disable standard units directive

        * Add referencing standard net libraries

        * Add checks for duplicates when injecting references

    commit fc3ab96cae
    Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com>
    Date:   Fri Aug 2 10:46:40 2024 +0300

        Delete DocumentedUnits option and Exclude HelpBuilder project (#3192)

        * Delete CodeGeneration and PCUGenerate options from CompilerInternalDebug

        Достаточно их аналогов из CompilerOptions.

        * Add recreating CompilerOptions when reloading Compiler

        * Change Rebuild checkbox logic

        * Delete documented units fiels from CompilerInternalDebug

        * Revert "Delete CodeGeneration and PCUGenerate options from CompilerInternalDebug"

        This reverts commit 25e92b22722b7e251ab0156148fdf28ee3175c27.

        * Exclude HelpBuilder

    commit 64acde6460
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Jul 31 18:21:04 2024 +0300

        Сделал возможным неявное приведение некоторого типа к array of T (при описании оператора в виде статической функции класса)

        School - IsPrime(n)

    commit 3db5709101
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Wed Jul 31 10:56:18 2024 +0300

        ZipCartesianFuncs.pas

    commit c4fd47128b
    Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    Date:   Tue Jul 30 22:56:03 2024 +0300

        Zip, Cartesian - сделаны внешние функции до 5 параметров, в т.ч. с проекцией
        Zip, Cartesian - методы расширения дополнены чтобы было как во внешних
        Перегенерирована справка

    commit 7d66f26d4f
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Mon Jul 1 00:16:43 2024 +0300

        cleanup and more tests

    commit 464dc794a8
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Sun Jun 30 23:31:28 2024 +0300

        cleanup and more comments

    commit 32f126370c
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Sun Jun 30 21:35:06 2024 +0300

        attempt to fix GetEnumerator resolving for Pascal types

    commit fb3eeeb28b
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Sat Jun 29 16:26:35 2024 +0300

        fix tests

    commit 84b0dfe537
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Sat Jun 29 15:49:13 2024 +0300

        fix getting MethodInfo

    commit 5fa4d9fce7
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Fri Jun 28 22:45:07 2024 +0300

        cold fix set of T resolving

    commit 460ce636ab
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Fri Jun 28 22:21:06 2024 +0300

        hot fix set of T resolving

    commit 83c2f29ac6
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Fri Jun 28 21:53:11 2024 +0300

        fix method filtering again

    commit c840a1a47a
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Fri Jun 28 21:32:41 2024 +0300

        fix type recovery

    commit 2436627fdd
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Fri Jun 28 19:18:32 2024 +0300

        fixing method filtering

    commit 15a05360a4
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Fri Jun 28 17:25:39 2024 +0300

        attempt to fix GetEnumerator resolving for compiled types

    commit 4fd020d084
    Author: samuraiGH <anonimajzer3@mail.ru>
    Date:   Fri Jun 28 17:21:00 2024 +0300

        adding tests

    * feat(bin/LanguageKits/SPython): add more things to installer

    * Change get_system_module method visibility (and some more)

    * Update SPython language names

    * Add CaseSensitive boolean saving in pcu

    * Implement case sensitive symbol table

    * Fix Create function not found error

    * Delete try/catch block in CollectNamesFromUsedUnits to make code cleaner

    * Create languageCaseSensitive field in pcu

    * Create CompilationArtifacts struct for passing data to ConvertAfterUsedModulesCompilation

    * Fix GraphWPF importing problem by dirty workaround !!!

    * Squashed commit of the following:

    commit 57ff5ef37d04ce8fcac8705c5a693bddf2ecf10e
    Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
    Date:   Thu Feb 27 12:56:53 2025 +0300

        Fix Global Variables Type Definition

        Основная программа выносится в функцию, определяемой самой первой и first_assignment_defines_type выводит тип глобальных переменных корректно

    commit 6f93ae8d6afc1c685d602b85ba6d455d862b35af
    Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
    Date:   Wed Feb 26 17:33:10 2025 +0300

        Replace same_type_node, Fix Procedure Assignment

    commit 52a096394cfdd4d8e4b27ddd36570b45b053c380
    Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
    Date:   Thu Feb 20 13:59:16 2025 +0300

        Fix Local Scope in If Node

    commit a0be5bed7f110314c0e512d28a76e3bd87328f01
    Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
    Date:   Sat Feb 15 16:40:50 2025 +0300

        Fix Bug with same_type_node

    commit 04fd2b2a6667bf06af02614a2fd30d0b50172a0c
    Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
    Date:   Sat Feb 15 16:09:27 2025 +0300

        Fix Assignment for New Variables

    commit ea591e243a5a458d6d94e665cec50d9ef60e1a08
    Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
    Date:   Sat Feb 15 15:58:45 2025 +0300

        Fix Assignment for Imported Variables in Functions

    commit e5d71be7693c527e6f4cd88671503dafa0ac9777
    Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
    Date:   Sat Feb 15 15:13:21 2025 +0300

        Fix SPython's Syntax Node Erasion

    commit c78649ac7e7883860ce459cb31f9d9e46194f203
    Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
    Date:   Sat Feb 15 14:35:53 2025 +0300

        Fix Variables from Module Assignment

    commit 4890f7f163a2557bc58d6e9c48cb432c6436a3aa
    Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
    Date:   Sat Feb 15 13:36:53 2025 +0300

        Return RetainUsedGlobalVariablesVisitor

    commit e5460edf2fae002ccc64d261bbb8fadb27deec12
    Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
    Date:   Sat Feb 15 13:05:38 2025 +0300

        Add Errors for Wrong Global Usage

    commit e32387e1356cc1e330518c57ab895f89b9de1784
    Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
    Date:   Sat Feb 15 12:33:55 2025 +0300

        Update Comments about Syntax Visitors

    commit 1f6c7ac2d8c891d582cbe957ed2ad6886de27de1
    Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
    Date:   Sat Feb 15 12:27:59 2025 +0300

        Fix Global Variables

        read access for global variables in fuctions by default

    commit e840610a25718ba12df144948bdda175cbc8d7c5
    Merge: e70cb9914 6c81b45c0
    Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
    Date:   Fri Feb 14 19:51:38 2025 +0300

        Merge branch 'SPython' into SPython-Context-Change

    commit e70cb99145120df29d1ae172d1b00afa8ea5b18f
    Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
    Date:   Fri Feb 14 19:49:18 2025 +0300

        Return Back Global Keyword

    commit 7cf7a24b8f927cad72645e028f0e0ebc47cae328
    Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
    Date:   Wed Feb 12 13:15:35 2025 +0300

        Fix Merge

    commit 89cc4551a0bcdb55eb64d244e35035134e5f6e75
    Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
    Date:   Wed Feb 12 13:02:06 2025 +0300

        Squashed commit of the following:

        commit 41dfb6f187
        Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
        Date:   Fri Feb 7 21:41:01 2025 +0300

            [] - преобразование во все контейнеры

            GraphABCHelper - теперь ABCObjects работает под Линукс

            School исправлен согласно последним веяниям []

        commit 79bbbd10ff
        Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
        Date:   Wed Jan 29 20:18:37 2025 +0300

            removing files for support fx4.0 (#3240)

        commit 88d5c409eb
        Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com>
        Date:   Tue Jan 28 20:41:55 2025 +0300

            Рефакторинг PascalABCNET.xshd (#3237)

            * refactoring PascalABCNET.xshd

            * removing extra characters

        commit 8fbd7fdfc3
        Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
        Date:   Sun Jan 26 23:42:48 2025 +0300

            3.10.3
            faststrings
            EmptyCollection и преобразование ее в List, Dictionary
            t: (real,real) := (1,2)

        commit bba132bd5d
        Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
        Date:   Wed Jan 22 09:14:44 2025 +0300

            Поправил справку по функции

        commit 1bd21857cc
        Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
        Date:   Wed Jan 8 18:46:51 2025 +0300

            Teacher Control Plugin - возможность задать server.dat

        commit 0848a1b796
        Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
        Date:   Sat Jan 4 22:54:38 2025 +0300

            Исправление автоформатирования []

        commit d45b782a7b
        Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
        Date:   Sat Jan 4 18:45:07 2025 +0300

            Rename PABCSistem in test suite

        commit c2347e604b
        Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
        Date:   Sat Jan 4 14:44:51 2025 +0300

            Примеры - устранил неточности

            LightPT - имя сервера вынес в публичную секцию

        commit b68b8da970
        Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
        Date:   Tue Dec 17 15:52:18 2024 +0300

            Примеры Coords1.pas Coords2.pas.pas

        commit 8a9788e6f9
        Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
        Date:   Tue Dec 17 15:06:57 2024 +0300

            Перенес проверку set array на уровень парсера

            Немного поправил Intellisense по наведению для NewSet

            По точке там что то другое работает

        commit 874ddebad3
        Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
        Date:   Sat Dec 14 21:00:38 2024 +0300

            Поправил грамматику []

            Теперь нельзя в режиме ## использовать атрибуты

            Зато можно [1,2,3].Print

        commit 080fb487e1
        Merge: a53dcd9ed a484b0e82
        Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
        Date:   Sat Dec 14 15:25:24 2024 +0300

            Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet

        commit a53dcd9ed2
        Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
        Date:   Sat Dec 14 15:25:16 2024 +0300

            SF Prm Cmb для строк

        commit a484b0e82d
        Author: Sun Serega <sunserega2@gmail.com>
        Date:   Thu Dec 12 13:49:17 2024 +0200

            fix (#3231)

        commit 6ef11f249c
        Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
        Date:   Tue Dec 10 11:05:45 2024 +0300

            3.10.2

        commit db9679d89f
        Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
        Date:   Tue Dec 10 10:59:20 2024 +0300

            Закончил превращение синтаксиса [] по умолчанию в массивы

        commit 45fdde24b4
        Author: Ivan Bondarev <ibond84@googlemail.com>
        Date:   Sun Dec 8 18:08:00 2024 +0100

            #3229

        commit 494b47624d
        Merge: 5875b9929 7906d73da
        Author: Ivan Bondarev <ibond84@googlemail.com>
        Date:   Sun Dec 8 10:42:07 2024 +0100

            Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet

        commit 5875b99296
        Author: Ivan Bondarev <ibond84@googlemail.com>
        Date:   Sun Dec 8 10:41:53 2024 +0100

            platformtarget native - .NET 9.0

        commit 7906d73da3
        Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
        Date:   Tue Dec 3 14:25:37 2024 +0300

            Небольшие изменения в реализации операций с множествами

        commit 087591c7b6
        Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
        Date:   Wed Nov 27 11:37:07 2024 +0300

            3.10.1

            Coords - доработки

            Distance, Middle, DrawText с фоном и рамкой. Глобальные переменные настройки

        commit d268d4f83b
        Author: Mikhalkovich Stanislav <miks@math.sfedu.ru>
    …

* Fix %%MAIN%% function source context

* Fix case sensitivity for CompiledScope search methods

* Fix imported aliases hints

* Implement list standard container as wrapper

* Implement set standard container as wrapper

* Implement dict standard container as wrapper

* Improve set operations speed

* Move list, set and dict functions to SPythonHidden

Нужно будет перенести куда-то в другое место потом для красоты

* Fix type function in SPythonSystem

* Increase the priority of functions over the type conversion operation in ExpressionVisitor

* Fix generic type search in SymScope internal find

* Toggle AddStandardNetNamespacesToUserScope for SPython

Пришлось включить подсказку пр-в имен для корректной работы семантического Intellisense.

* Fix itertools

---------

Co-authored-by: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com>
Co-authored-by: Владислав Крылов <krylov@sfedu.ru>
Co-authored-by: Sun Serega <sunserega2@gmail.com>
2025-10-12 20:26:21 +03:00

6006 lines
272 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Copyright (c) Ivan Bondarev, Stanislav Mikhalkovich (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using PascalABCCompiler;
using PascalABCCompiler.Parsers;
using PascalABCCompiler.SyntaxTree;
using PascalABCCompiler.SyntaxTreeConverters;
using PascalABCCompiler.TreeRealization;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
namespace CodeCompletion
{
public class DomSyntaxTreeVisitor : AbstractVisitor
{
private SymScope returned_scope;//vozvrashaemyj scope posle vyzova visit
private Stack<SymScope> saved_returned_scopes = new Stack<SymScope>();//nuzhen dlja lambd
private List<SymScope> returned_scopes = new List<SymScope>();//hranit spisok scopov (metodov) posle vyzova visit, esli search_all=true
public SymScope entry_scope;//korenvoj scope unita
public SymScope impl_scope;
private string cur_type_name;
private location cur_loc;
private DomConverter converter;
private bool is_proc_realization=false;
private string meth_name;
private string cur_unit_file_name;
private Languages.Facade.ILanguage currentUnitLanguage;
private RetValue cnst_val;
private ExpressionEvaluator ev = new ExpressionEvaluator();
public bool add_doc_from_text=true;
private bool search_all = false;//flag, iskat vse peregruzki ili tolko odnu. sdelal dlja effektivnosti. true zadaetsja tolko v visit(method_call)
internal bool parse_only_interface = false;
private template_type_reference converted_template_type = null;
private List<var_def_statement> pending_is_pattern_vars = new List<var_def_statement>();
private static Compiler compiler;
public static bool use_semantic_for_intellisense;
private Dictionary<method_call, SymScope> method_call_cache = new Dictionary<method_call, SymScope>();
public HashSet<Assembly> cur_used_assemblies;
public DomSyntaxTreeVisitor(DomConverter converter)
{
//tcst = new TreeConverterSymbolTable(false);
this.converter = converter;
}
public override void visit(default_operator node)
{
node.type_name.visit(this);
}
public void Convert(compilation_unit cu)
{
method_call_cache.Clear();
try
{
cu.visit(this);
}
catch(Exception e)
{
#if DEBUG
File.AppendAllText("log.txt", e.Message + Environment.NewLine + e.StackTrace + Environment.NewLine);
#endif
//throw e;
//System.Diagnostics.Debug.WriteLine(e.StackTrace);
}
cur_used_assemblies = new HashSet<Assembly>(PascalABCCompiler.NetHelper.NetHelper.cur_used_assemblies);
if (use_semantic_for_intellisense && !parse_only_interface)
try
{
CorrectTreeWithSemantic(cu);
}
catch (Exception e)
{
#if DEBUG
File.AppendAllText("log.txt", e.Message + Environment.NewLine + e.StackTrace + Environment.NewLine);
#endif
}
}
private type_definition BuildSyntaxNodeForTypeReference(type_node tn)
{
if (tn.instance_params != null && tn.instance_params.Count > 0)
{
var ttr = new template_type_reference();
var ntr = new named_type_reference();
ttr.name = ntr;
ttr.params_list = new template_param_list();
var arr = tn.original_generic.full_name.Split('.');
for (int i = 0; i < arr.Length; i++)
{
var s = arr[i];
if (i < arr.Length - 1)
ntr.names.Add(new ident(s));
else
{
var id = new ident_with_templateparams();
ntr.Add(new ident(s));
foreach (var gen_td in tn.instance_params)
{
if (gen_td.PrintableName.StartsWith("AnonymousType#"))
{
SymScope tmp = cur_scope;
TypeScope ts = null;
cur_scope = ts = new TypeScope(SymbolKind.Class, cur_scope, null);
tmp.AddName(gen_td.PrintableName, cur_scope);
ts.loc = get_location(gen_td.location);
ts.si = new SymInfo("class", SymbolKind.Class, "");
foreach (var prop in (gen_td as common_type_node).properties)
{
ElementScope es = new ElementScope();
es.si = new SymInfo(prop.name, SymbolKind.Property, "");
BuildSyntaxNodeForTypeReference(prop.property_type).visit(this);
es.sc = returned_scope;
ts.AddName(prop.name, es);
}
returned_scope = cur_scope;
cur_scope = tmp;
ttr.params_list.Add(new named_type_reference(gen_td.PrintableName));
}
else
ttr.params_list.Add(BuildSyntaxNodeForTypeReference(gen_td));
}
}
}
return ttr;
}
else
{
var ntr = new named_type_reference();
if (tn.IsDelegate)
{
var invokeMeth = tn.find_first_in_type("Invoke");
if (invokeMeth != null)
{
var fn = invokeMeth.sym_info as function_node;
procedure_header header;
if (fn.return_value_type != null)
{
header = new function_header(BuildSyntaxNodeForTypeReference(fn.return_value_type));
}
else
{
header = new procedure_header();
}
header.parameters = new formal_parameters();
foreach (var param in fn.parameters)
{
var tparam = new typed_parameters();
tparam.vars_type = BuildSyntaxNodeForTypeReference(param.type);
tparam.idents = new ident_list();
tparam.idents.Add(new ident(param.name));
header.parameters.Add(tparam);
}
return header;
}
ntr.names.Add(new ident(tn.PrintableName.Replace("()", "")));
return ntr;
}
else if (tn.type_special_kind == PascalABCCompiler.SemanticTree.type_special_kind.array_kind)
{
array_type arr_type = new array_type(null, BuildSyntaxNodeForTypeReference(tn.element_type));
return arr_type;
}
var arr = tn.full_name.Split('.');
foreach (string s in arr)
{
if (s.IndexOf("implementation__") == -1)
ntr.names.Add(new ident(s));
}
return ntr;
}
}
private TypeScope GetIntellisenseTypeByType(Type t)
{
if (t.GetGenericArguments().Length == 0)
return TypeTable.get_compiled_type(t);
else
{
List<TypeScope> gen_args = new List<TypeScope>();
foreach (var gen_tn in t.GetGenericArguments())
{
gen_args.Add(TypeTable.get_compiled_type(gen_tn));
}
return CompiledScope.get_type_instance(t.GetGenericTypeDefinition(), gen_args);
}
}
private TypeScope GetCorrectedType(TypeScope ts, type_node tn, SymScope topScope)
{
if (ts is TypeSynonim)
{
var corrected_type = GetCorrectedType((ts as TypeSynonim).actType, tn, topScope);
if (!corrected_type.IsEqual((ts as TypeSynonim).actType))
return corrected_type;
return ts;
}
else if (tn is compiled_type_node)
{
var ctn = tn as compiled_type_node;
if (ctn.compiled_type.IsArray)
{
if (ctn.rank > 1)
return new ArrayScope(GetIntellisenseTypeByType((ctn.element_type as compiled_type_node).compiled_type), new TypeScope[ctn.rank]);
return new ArrayScope(GetIntellisenseTypeByType((ctn.element_type as compiled_type_node).compiled_type), null);
}
if (ctn.compiled_type.GetGenericArguments().Length == 0)
return TypeTable.get_compiled_type(ctn.compiled_type);
else
{
List<TypeScope> gen_args = new List<TypeScope>();
foreach (var gen_tn in ctn.compiled_type.GetGenericArguments())
{
gen_args.Add(GetIntellisenseTypeByType(gen_tn));
}
return CompiledScope.get_type_instance(ctn.compiled_type.GetGenericTypeDefinition(), gen_args);
}
}
else if (tn is ref_type_node && ts is PointerScope)
{
var corrected_type = GetCorrectedType((ts as PointerScope).elementType, tn.element_type, topScope);
if (!corrected_type.IsEqual((ts as PointerScope).elementType))
return new PointerScope(corrected_type);
return ts;
}
else
{
if (tn.full_name.IndexOf("$") != -1 && !tn.IsDelegate|| tn.full_name.IndexOf("#") != -1 && tn.full_name.IndexOf("AnonymousType#") == -1)
return ts;
if (ts is FileScope && tn.type_special_kind == PascalABCCompiler.SemanticTree.type_special_kind.typed_file)
return ts;
if (ts is FileScope && tn.type_special_kind == PascalABCCompiler.SemanticTree.type_special_kind.binary_file)
return ts;
var ntr = BuildSyntaxNodeForTypeReference(tn);
cur_scope = topScope;
ntr.visit(this);
if (returned_scope != null && returned_scope is TypeScope)
{
var correctedType = returned_scope as TypeScope;
if (!correctedType.IsTypeStrictEqual(ts))
return correctedType;
}
else if (returned_scope != null && returned_scope is ProcScope)
{
var procType = new ProcType(returned_scope as ProcScope);
if (!procType.IsEqual(ts))
return procType;
}
return ts;
}
}
/*private TypeScope CreateTypeScopeBySemanticType(type_node tn)
{
if (tn is common_generic_instance_type_node)
{
var ts = new TypeScope();
var gitn = tn as common_generic_instance_type_node;
ts.gener
foreach (var field in gitn.fields)
{
ts.AddName(field.name, CreateTypeScopeBySemanticType(field.type));
}
}
return null;
}*/
private void CorrectVariableType(var_definition_node vdn)
{
location loc = null;
if (vdn is namespace_variable)
{
loc = (vdn as namespace_variable).loc;
}
else if (vdn is local_variable)
{
loc = (vdn as local_variable).loc;
}
else if (vdn is local_block_variable)
{
loc = (vdn as local_block_variable).loc;
}
if (loc == null)
return;
var es = FindScopeByLocation(loc.begin_line_num,loc.begin_column_num) as ElementScope;
if (es != null)
{
es.sc = GetCorrectedType(es.sc as TypeScope, vdn.type, es.topScope);
es.MakeDescription();
}
}
private void CorrectTreeWithSemantic(compilation_unit cu)
{
var co = new CompilerOptions();
co.SavePCU = false;
co.GenerateCode = false;
co.UnitSyntaxTree = cu;
co.SourceFileName = cu.source_context.FileName;
co.ForIntellisense = true;
co.SaveDocumentation = false;
//if (compiler == null)
compiler = new Compiler();
compiler.CompilerOptions = co;
compiler.ClearAfterCompilation = false;
compiler.Compile();
foreach (var lv in compiler.CompiledVariables)
CorrectVariableType(lv);
compiler.ClearAll(/*false*/);
}
public SymScope FindScopeByLocation(int line, int col)
{
try
{
SymScope ss = entry_scope.FindScopeByLocation(line,col);
if (ss != null) return ss;
if (impl_scope != null) return impl_scope.FindScopeByLocation(line,col);
//if (impl_scope != null) return impl_scope.FindScopeByLocation(line,col);
}
catch
{
}
return null;
}
private void save_return_value()
{
saved_returned_scopes.Push(returned_scope);
}
private void restore_return_value()
{
returned_scope = saved_returned_scopes.Pop();
}
public override void visit(syntax_tree_node _syntax_tree_node)
{
throw new Exception("The method or operation is not implemented.");
}
private bool HasVariablesInBlock(statement_list _statement_list)
{
foreach (statement stmt in _statement_list.subnodes)
if (stmt is var_statement) return true;
return false;
}
private bool has_lambdas(expression node)
{
if (node is function_lambda_definition)
return true;
else if (node is dot_node)
{
dot_node dn = node as dot_node;
if (has_lambdas(dn.left))
return true;
if (has_lambdas(dn.right))
return true;
}
else if (node is method_call)
{
method_call mc = node as method_call;
if (has_lambdas(mc.dereferencing_value))
return true;
if (mc.parameters != null)
foreach (expression e in mc.parameters.expressions)
{
if (has_lambdas(e))
return true;
}
}
else if (node is new_expr)
{
new_expr ne = node as new_expr;
if (ne.params_list != null)
foreach (expression e in ne.params_list.expressions)
{
if (has_lambdas(e))
return true;
}
}
else if (node is tuple_node)
{
tuple_node tn = node as tuple_node;
foreach (expression e in tn.el.expressions)
{
if (has_lambdas(e))
return true;
}
}
else if (node is PascalABCCompiler.SyntaxTree.question_colon_expression)
{
PascalABCCompiler.SyntaxTree.question_colon_expression expr = node as PascalABCCompiler.SyntaxTree.question_colon_expression;
if (has_lambdas(expr.ret_if_true))
return true;
if (has_lambdas(expr.ret_if_false))
return true;
}
return false;
}
public override void visit(template_type_name node)
{
throw new Exception("The method or operation is not implemented.");
}
public override void visit(statement_list _statement_list)
{
SymScope tmp = cur_scope;
if (HasVariablesInBlock(_statement_list))
{
SymScope stmt_scope = new BlockScope(cur_scope);
cur_scope.AddName("$block_scope",stmt_scope);
stmt_scope.loc = get_location(_statement_list);
cur_scope = stmt_scope;
}
//try
{
foreach (statement stmt in _statement_list.subnodes)
stmt.visit(this);
}
//catch(Exception e)
{
}
cur_scope = tmp;
}
public override void visit(expression _expression)
{
throw new Exception("The method or operation is not implemented.");
}
public override void visit(assign _assign)
{
visit_is_patterns(_assign.from);
if (pending_is_pattern_vars.Count > 0)
{
foreach (var_def_statement vds in pending_is_pattern_vars)
vds.visit(this);
pending_is_pattern_vars.Clear();
}
if (_assign.from is function_lambda_definition)
{
_assign.to.visit(this);
TypeScope tmp_awaitedProcType = awaitedProcType;
if (returned_scope != null && returned_scope is TypeScope)
{
if (returned_scope is ProcScope)
returned_scope = new ProcType(returned_scope as ProcScope);
awaitedProcType = returned_scope as TypeScope;
}
_assign.from.visit(this);
awaitedProcType = tmp_awaitedProcType;
}
else if (has_lambdas(_assign.from))
_assign.from.visit(this);
else if (_assign.to is ident && cur_scope != null && cur_scope.Name.StartsWith("<>lambda")
&& (_assign.to as ident).name.Equals(currentUnitLanguage.LanguageInformation.ResultVariableName, currentUnitLanguage.CaseSensitive ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase))
{
var sc = cur_scope.FindNameOnlyInThisType(currentUnitLanguage.LanguageInformation.ResultVariableName);
if (sc is ElementScope)
{
ElementScope es = sc as ElementScope;
if (es.sc is TypeScope && (es.sc as TypeScope).IsDelegate)
{
_assign.from.visit(this);
(cur_scope as ProcScope).return_type = returned_scope as TypeScope;
es.sc = returned_scope;
es.MakeDescription();
}
}
}
}
public override void visit(bin_expr _bin_expr)
{
try
{
_bin_expr.left.visit(this);
RetValue left = cnst_val;
TypeScope tleft = returned_scope as TypeScope;
cnst_val.prim_val = null;
_bin_expr.right.visit(this);
TypeScope tright = returned_scope as TypeScope;
RetValue right = cnst_val;
cnst_val.prim_val = null;
if (left.prim_val != null && right.prim_val != null)
{
ev.eval_stack.Push(left);
ev.eval_stack.Push(right);
switch (_bin_expr.operation_type)
{
case Operators.Plus: ev.EvalPlus(); break;
case Operators.Minus: ev.EvalMinus(); break;
case Operators.Multiplication: ev.EvalMult(); break;
case Operators.Division: ev.EvalDiv(); break;
case Operators.IntegerDivision: ev.EvalIDiv(); break;
case Operators.BitwiseAND: ev.EvalAnd(); break;
case Operators.BitwiseOR: ev.EvalOr(); break;
case Operators.BitwiseXOR: ev.EvalXor(); break;
case Operators.BitwiseLeftShift: ev.EvalBitwiseLeft(); break;
case Operators.BitwiseRightShift: ev.EvalBitwiseRight(); break;
case Operators.Equal: ev.EvalEqual(); break;
case Operators.NotEqual: ev.EvalNotEqual(); break;
case Operators.Less: ev.EvalLess(); break;
case Operators.LessEqual: ev.EvalLessEqual(); break;
case Operators.Greater: ev.EvalGreater(); break;
case Operators.GreaterEqual: ev.EvalGreaterEqual(); break;
case Operators.LogicalAND: ev.EvalAnd(); break;
case Operators.LogicalOR: ev.EvalOr(); break;
case Operators.ModulusRemainder: ev.EvalRem(); break;
default:
ev.eval_stack.Clear();
break;
}
if (ev.eval_stack.Count > 0)
{
cnst_val = ev.eval_stack.Pop();
returned_scope = TypeTable.get_type(cnst_val.prim_val);
}
else
{
cnst_val.prim_val = null;
}
}
else
{
cnst_val.prim_val = null;
}
if (tleft != null && tright != null)
{
RetValue tmp = cnst_val;
string name = PascalABCCompiler.TreeConverter.name_reflector.get_name(_bin_expr.operation_type);
List<SymScope> lst = tleft.FindOverloadNamesOnlyInType(name);
List<SymScope> lst_right = tright.FindOverloadNamesOnlyInType(name);
if (lst.Count == 0 && !char.IsLetter(name[0]))
lst = tleft.FindOverloadNamesOnlyInType("operator" + name);
if (lst_right.Count == 0 && !char.IsLetter(name[0]))
lst_right = tright.FindOverloadNamesOnlyInType("operator" + name);
if (!char.IsLetter(name[0]))
name = "operator" + name;
else
name = "operator " + name;
List<ProcScope> meths = entry_scope.GetExtensionMethods(name, tleft);
foreach (ProcScope meth in meths)
lst.Add(meth);
lst.AddRange(lst_right);
meths = entry_scope.GetExtensionMethods(name, tright);
foreach (ProcScope meth in meths)
lst.Add(meth);
ProcScope ps = select_method(lst.ToArray(), tleft, tright, null, false, null, _bin_expr.left, _bin_expr.right);
if (ps != null)
returned_scope = ps.return_type;
else
{
if (_bin_expr.operation_type == Operators.Division)
returned_scope = TypeTable.real_type;
else
returned_scope = tleft;
}
cnst_val = tmp;
}
else if (tleft != null)
returned_scope = tleft;
else
returned_scope = tright;
}
catch (Exception e)
{
#if DEBUG
File.AppendAllText("log.txt", e.Message + Environment.NewLine + e.StackTrace + Environment.NewLine);
#endif
cnst_val.prim_val = null;
ev.eval_stack.Clear();
returned_scope = null;
}
}
public override void visit(un_expr _un_expr)
{
try
{
_un_expr.subnode.visit(this);
TypeScope tleft = returned_scope as TypeScope;
if (cnst_val.prim_val != null)
{
ev.eval_stack.Push(cnst_val);
switch (_un_expr.operation_type)
{
case Operators.BitwiseNOT:
ev.EvalNot(); break;
case Operators.LogicalNOT:
ev.EvalNot(); returned_scope = entry_scope.FindName(StringConstants.bool_type_name); break;
case Operators.Minus:
ev.EvalUnmin(); break;
}
if (ev.eval_stack.Count > 0)
{
cnst_val = ev.eval_stack.Pop();
returned_scope = TypeTable.get_type(cnst_val.prim_val);
}
else
{
cnst_val.prim_val = null;
returned_scope = tleft;
}
}
}
catch (Exception e)
{
cnst_val.prim_val = null;
ev.eval_stack.Clear();
returned_scope = null;
}
}
public override void visit(token_taginfo node)
{
}
public override void visit(declaration_specificator node)
{
}
public override void visit(const_node _const_node)
{
throw new Exception("The method or operation is not implemented.");
}
public override void visit(bool_const _bool_const)
{
returned_scope = TypeTable.bool_type;//entry_scope.FindName(StringConstants.bool_type_name);
cnst_val.prim_val = _bool_const.val;
}
public override void visit(int32_const _int32_const)
{
returned_scope = TypeTable.int_type;//entry_scope.FindName(StringConstants.integer_type_name);
cnst_val.prim_val = _int32_const.val;
}
public override void visit(double_const _double_const)
{
returned_scope = TypeTable.real_type;//entry_scope.FindName(StringConstants.real_type_name);
cnst_val.prim_val = _double_const.val;
}
public override void visit(statement _statement)
{
throw new Exception("The method or operation is not implemented.");
}
public override void visit(subprogram_body _subprogram_body)
{
throw new Exception("The method or operation is not implemented.");
}
public override void visit(ident _ident)
{
if (!search_all)
{
returned_scope = cur_scope.FindName(_ident.name);
if (returned_scope == null)
{
//cnst_val.prim_val = _ident.name;
cnst_val.prim_val = null;
return;
}
if (returned_scope is ElementScope)
{
ElementScope es = returned_scope as ElementScope;
cnst_val.prim_val = es.cnst_val;
returned_scope = es.sc;
if (es.IsIndexedProperty)
returned_scope = new IndexedPropertyType(es.sc as TypeScope);
return;
}
else
if (returned_scope is ProcScope)
{
ProcScope ps = returned_scope as ProcScope;
if (ps.parameters.Count == 0 || ps.parameters[0].param_kind == parametr_kind.params_parametr || ps.parameters[0].cnst_val != null)
{
if (ps.return_type != null)
returned_scope = ps.return_type;
else
returned_scope = new ProcType(ps);
}
else
{
returned_scopes = cur_scope.FindOverloadNames(_ident.name);
returned_scope = returned_scopes.Find(x => x is ProcScope && ((x as ProcScope).parameters.Count == 0 || (x as ProcScope).parameters[0].param_kind == parametr_kind.params_parametr || (x as ProcScope).parameters[0].cnst_val != null));
if (returned_scope == null)
{
returned_scope = returned_scopes[0];
if (returned_scope is ProcScope && (returned_scope as ProcScope).return_type == null)
returned_scope = new ProcType(returned_scope as ProcScope);
}
else if (returned_scope is ProcScope && (returned_scope as ProcScope).return_type != null)
returned_scope = (returned_scope as ProcScope).return_type;
else if (returned_scopes.Count > 0 && returned_scopes[0] is ProcScope && (returned_scopes[0] as ProcScope).return_type == null)
returned_scope = new ProcType(returned_scopes[0] as ProcScope);
}
}
else if (returned_scope is TypeScope)
is_type = true;
}
else
{
returned_scopes = cur_scope.FindOverloadNames(_ident.name);
for (int i = 0; i < returned_scopes.Count; i++)
{
if (returned_scopes[i] is ElementScope)
{
cnst_val.prim_val = (returned_scopes[i] as ElementScope).cnst_val;
returned_scope = (returned_scopes[i] as ElementScope).sc;
returned_scopes[i] = returned_scope;
return;
}
else
if (returned_scopes[i] is TypeScope)
{
is_type = true;
}
}
search_all = false;
}
//cnst_val.prim_val = _ident.name;
}
public override void visit(addressed_value _addressed_value)
{
throw new Exception("The method or operation is not implemented.");
}
public override void visit(type_definition _type_definition)
{
throw new Exception("The method or operation is not implemented.");
}
public override void visit(named_type_reference _named_type_reference)
{
//throw new Exception("The method or operation is not implemented.");
returned_scope = cur_scope;
string suffix = "";
SymScope tmp_scope = returned_scope;
for (int i = 0; i < _named_type_reference.names.Count; i++)
{
if (i == _named_type_reference.names.Count - 1 && converted_template_type != null)
suffix = "`" + converted_template_type.params_list.params_list.Count;
if (i > 0)
returned_scope = returned_scope.FindNameOnlyInType(_named_type_reference.names[i].name+suffix);
else
returned_scope = returned_scope.FindName(_named_type_reference.names[i].name+suffix);
if (returned_scope == null)
{
if (suffix != "")
{
returned_scope = tmp_scope;
if (i > 0)
returned_scope = returned_scope.FindNameOnlyInType(_named_type_reference.names[i].name);
else
returned_scope = returned_scope.FindName(_named_type_reference.names[i].name);
if (returned_scope == null)
{
break;
}
}
else
break;
}
tmp_scope = returned_scope;
}
if (returned_scope == null || !(returned_scope is TypeScope))
returned_scope = new UnknownScope(new SymInfo(_named_type_reference.names[_named_type_reference.names.Count - 1].name, SymbolKind.Type, _named_type_reference.names[_named_type_reference.names.Count - 1].name));
}
public override void visit(variable_definitions _variable_definitions)
{
bool is_event = false;
foreach (var_def_statement vds in _variable_definitions.var_definitions)
{
if (vds.is_event && !is_event)
is_event = true;
else if (is_event)
vds.is_event = true;
vds.visit(this);
}
}
public override void visit(ident_list _ident_list)
{
throw new Exception("The method or operation is not implemented.");
}
public System.Collections.Hashtable vars = new System.Collections.Hashtable();
private TypeScope awaitedProcType;
public override void visit(var_def_statement _var_def_statement)
{
try
{
returned_scope = null;
if (_var_def_statement.vars_type != null)
_var_def_statement.vars_type.visit(this);
if (_var_def_statement.vars_type == null && _var_def_statement.inital_value != null || _var_def_statement.inital_value is function_lambda_definition)
{
SymScope tmp_scope = returned_scope;
TypeScope tmp_awaitedProcType = awaitedProcType;
if (_var_def_statement.inital_value is function_lambda_definition)
{
if (tmp_scope is ProcScope)
tmp_scope = new ProcType(tmp_scope as ProcScope);
awaitedProcType = tmp_scope as TypeScope;
}
_var_def_statement.inital_value.visit(this);
awaitedProcType = tmp_awaitedProcType;
if (tmp_scope != null && _var_def_statement.inital_value is function_lambda_definition)
returned_scope = tmp_scope;
}
// if (si == null) dn = compiled_type_node.get_type_node(PascalABCCompiler.NetHelper.NetHelper.FindType((_var_def_statement.vars_type as named_type_reference).names[0].name,unl));
//if (returned_scope == null) return;
if (returned_scope is ProcScope)
{
returned_scope = new ProcType(returned_scope as ProcScope);
}
if (_var_def_statement.vars != null)
foreach (ident s in _var_def_statement.vars.idents)
{
SymInfo si = new SymInfo(s.name, SymbolKind.Variable, s.name);
if (cur_scope is TypeScope) si.kind = SymbolKind.Field;
if (_var_def_statement.is_event) si.kind = SymbolKind.Event;
if (returned_scope == null && false)
returned_scope = new UnknownScope(new SymInfo("",SymbolKind.Class, ""));
ElementScope es = new ElementScope(si, returned_scope, cur_scope);
if (add_doc_from_text && this.converter.controller.docs != null && this.converter.controller.docs.ContainsKey(_var_def_statement))
es.AddDocumentation(this.converter.controller.docs[_var_def_statement]);
es.acc_mod = cur_access_mod;
es.is_static = _var_def_statement.var_attr == definition_attribute.Static;
es.si.acc_mod = cur_access_mod;
es.loc = get_location(s);
cur_scope.AddName(s.name, es);
es.declaringUnit = cur_scope;
}
}
catch (Exception e)
{
#if DEBUG
File.AppendAllText("log.txt", e.Message + Environment.NewLine + e.StackTrace + Environment.NewLine);
#endif
}
}
public document doc;
public location get_location(SourceContext sc)
{
if (sc == null)
{
return null;
}
return new location(sc.begin_position.line_num, sc.begin_position.column_num,
sc.end_position.line_num, sc.end_position.column_num, doc);
}
public location get_location(syntax_tree_node tn)
{
if (tn.source_context==null)
{
return null;
}
return new location(tn.source_context.begin_position.line_num,tn.source_context.begin_position.column_num,
tn.source_context.end_position.line_num,tn.source_context.end_position.column_num,doc);
}
public override void visit(declaration _declaration)
{
throw new Exception("The method or operation is not implemented.");
}
public override void visit(declarations _declarations)
{
//throw new Exception("The method or operation is not implemented.");
foreach (declaration decl in _declarations.defs)
decl.visit(this);
}
public override void visit(program_tree _program_tree)
{
}
public override void visit(program_name _program_name)
{
throw new Exception("The method or operation is not implemented.");
}
public override void visit(string_const _string_const)
{
returned_scope = TypeTable.string_type;//entry_scope.FindName(StringConstants.string_type_name);
//cnst_val.prim_val = "'"+_string_const.Value+"'";
cnst_val.prim_val = this.converter.controller.Parser.LanguageInformation.GetStringForString(_string_const.Value);
}
public override void visit(expression_list _expression_list)
{
throw new Exception("The method or operation is not implemented.");
}
public override void visit(dereference _dereference)
{
throw new Exception("The method or operation is not implemented.");
}
public override void visit(roof_dereference _roof_dereference)
{
//throw new Exception("The method or operation is not implemented.");
_roof_dereference.dereferencing_value.visit(this);
TypeScope ts = returned_scope as TypeScope;
while (ts is TypeSynonim)
ts = (ts as TypeSynonim).actType;
if (ts is PointerScope)
returned_scope = (ts as PointerScope).ref_type;
else returned_scope = null;
}
public override void visit(indexer _indexer)
{
//throw new Exception("The method or operation is not implemented.");
_indexer.dereferencing_value.visit(this);
if (returned_scope != null && returned_scope is TypeScope)
{
TypeScope ts = returned_scope as TypeScope;
if (ts is IndexedPropertyType)
returned_scope = (ts as IndexedPropertyType).propertyType;
else if (ts.GetFullName() != null && (ts.GetFullName().IndexOf("System.Tuple") == 0 || ts.original_type != null && ts.original_type.GetFullName() != null && ts.original_type.GetFullName().IndexOf("(T1,") == 0))
{
if (_indexer.indexes.expressions[0] is int32_const)
{
if ((_indexer.indexes.expressions[0] as int32_const).val >= 0)
{
dot_node dn = new dot_node(_indexer.dereferencing_value, new ident("Item" + ((_indexer.indexes.expressions[0] as int32_const).val + 1)));
dn.visit(this);
}
else
returned_scope = null;
}
else
returned_scope = null;
}
else if (returned_scope.GetElementType() != null)
returned_scope = returned_scope.GetElementType();
}
}
public override void visit(PascalABCCompiler.SyntaxTree.for_node _for_node)
{
//throw new Exception("The method or operation is not implemented.");
SymScope tmp = cur_scope;
//if (_for_node.type_name != null)
{
SymScope stmt_scope = new BlockScope(cur_scope);
cur_scope.AddName("$block_scope", stmt_scope);
stmt_scope.loc = get_location(_for_node);
returned_scope = null;
if (_for_node.type_name != null)
_for_node.type_name.visit(this);
if (returned_scope != null)
{
cur_scope = stmt_scope;
ElementScope es = new ElementScope(new SymInfo(_for_node.loop_variable.name, SymbolKind.Variable, _for_node.loop_variable.name), returned_scope, cur_scope);
stmt_scope.AddName(_for_node.loop_variable.name, es);
es.loc = get_location(_for_node.loop_variable);
returned_scope = null;
}
else
{
_for_node.initial_value.visit(this);
if (returned_scope != null)
{
cur_scope = stmt_scope;
if (_for_node.create_loop_variable)
{
ElementScope es = new ElementScope(new SymInfo(_for_node.loop_variable.name, SymbolKind.Variable, _for_node.loop_variable.name), returned_scope, cur_scope);
stmt_scope.AddName(_for_node.loop_variable.name, es);
es.loc = get_location(_for_node.loop_variable);
}
returned_scope = null;
}
}
}
if (_for_node.statements != null)
_for_node.statements.visit(this);
cur_scope = tmp;
}
public override void visit(PascalABCCompiler.SyntaxTree.repeat_node _repeat_node)
{
if (_repeat_node.statements != null)
_repeat_node.statements.visit(this);
}
public override void visit(PascalABCCompiler.SyntaxTree.while_node _while_node)
{
if (_while_node.statements != null)
_while_node.statements.visit(this);
}
public override void visit(is_pattern_expr _is_pattern_expr)
{
_is_pattern_expr.right.visit(this);
}
public override void visit(deconstructor_pattern _deconstructor_pattern)
{
_deconstructor_pattern.type.visit(this);
if (_deconstructor_pattern.parameters.Count == 1)
{
var pdp = _deconstructor_pattern.parameters[0];
if (pdp is var_deconstructor_parameter)
{
var_deconstructor_parameter vdp = pdp as var_deconstructor_parameter;
pending_is_pattern_vars.Add(new var_def_statement(vdp.identifier, _deconstructor_pattern.type, _deconstructor_pattern.source_context));
}
}
else
{
foreach (pattern_parameter pdp in _deconstructor_pattern.parameters)
{
if (pdp is var_deconstructor_parameter)
{
var_deconstructor_parameter vdp = pdp as var_deconstructor_parameter;
SymScope ss = returned_scope.FindName(vdp.identifier.name);
if (ss is ElementScope)
{
TypeScope ts = (ss as ElementScope).sc as TypeScope;
pending_is_pattern_vars.Add(new var_def_statement(vdp.identifier, new named_type_reference(new ident(ts.si.name)), _deconstructor_pattern.source_context));
}
}
}
}
}
public override void visit(match_with _match_with)
{
if (_match_with.case_list != null)
{
foreach (pattern_case pc in _match_with.case_list.elements)
pc.visit(this);
}
}
public override void visit(pattern_case _pattern_case)
{
_pattern_case.pattern.visit(this);
statement stmt = merge_with_is_variables(_pattern_case.case_action);
stmt.visit(this);
}
public void visit_is_patterns(expression expr)
{
if (expr is bin_expr)
{
bin_expr bexpr = expr as bin_expr;
visit_is_patterns(bexpr.left);
visit_is_patterns(bexpr.right);
}
else if (expr is is_pattern_expr)
expr.visit(this);
}
public statement merge_with_is_variables(statement stmt)
{
if (pending_is_pattern_vars.Count > 0)
{
if (stmt is statement_list)
{
foreach (var_def_statement vds in pending_is_pattern_vars)
(stmt as statement_list).Insert(0, new var_statement(vds, vds.source_context));
}
else
{
statement_list slist = new statement_list();
slist.source_context = stmt.source_context;
foreach (var_def_statement vds in pending_is_pattern_vars)
{
slist.Insert(0, new var_statement(vds, vds.source_context));
if (slist.source_context == null)
slist.source_context = vds.source_context;
}
slist.Add(stmt);
stmt = slist;
}
pending_is_pattern_vars.Clear();
}
return stmt;
}
public override void visit(PascalABCCompiler.SyntaxTree.if_node _if_node)
{
visit_is_patterns(_if_node.condition);
statement then_stmt = _if_node.then_body;
if (pending_is_pattern_vars.Count > 0 && then_stmt != null)
{
statement_list slist = new statement_list();
if (_if_node.then_body.source_context != null)
slist.source_context = new SourceContext(_if_node.source_context.LeftSourceContext, _if_node.then_body.source_context.RightSourceContext);
else if (_if_node.else_body != null && _if_node.else_body.source_context != null)
slist.source_context = new SourceContext(_if_node.source_context.LeftSourceContext, _if_node.else_body.source_context.LeftSourceContext);
else
slist.source_context = _if_node.source_context;
slist.Add(then_stmt);
then_stmt = merge_with_is_variables(slist);
}
if (then_stmt != null)
then_stmt.visit(this);
if (_if_node.else_body != null)
_if_node.else_body.visit(this);
}
public override void visit(ref_type _ref_type)
{
//throw new Exception("The method or operation is not implemented.");
_ref_type.pointed_to.visit(this);
if (returned_scope != null && returned_scope is TypeScope)
{
returned_scope = new PointerScope(returned_scope as TypeScope);
returned_scope.loc = get_location(_ref_type);
}
else
{
returned_scope = new PointerScope();
returned_scope.loc = get_location(_ref_type);
}
returned_scope.topScope = cur_scope;
}
public override void visit(diapason _diapason)
{
object left = null, right = null;
try
{
_diapason.left.visit(this);
left = cnst_val.prim_val;
cnst_val.prim_val = null;
_diapason.right.visit(this);
right = cnst_val.prim_val;
}
catch (Exception e)
{
}
if (left != null && right != null)
{
returned_scope = new DiapasonScope(left, right);
returned_scope.loc = get_location(_diapason);
returned_scope.topScope = cur_scope;
}
else returned_scope = null;
}
public override void visit(indexers_types _indexers_types)
{
throw new Exception("The method or operation is not implemented.");
}
public override void visit(array_type _array_type)
{
//throw new Exception("The method or operation is not implemented.");
_array_type.elements_type.visit(this);
if (returned_scope == null) return;
SymScope of_type = returned_scope;
List<TypeScope> indexes = new List<TypeScope>();
if (_array_type.indexers != null)
{
foreach (type_definition td in _array_type.indexers.indexers)
{
if (td != null)
{
td.visit(this);
if (returned_scope != null) indexes.Add((TypeScope)returned_scope);
else
{
returned_scope = null;
return;
}
}
else
indexes.Add(null);
}
}
else indexes.Add((TypeScope)entry_scope.FindName(StringConstants.integer_type_name));
TypeScope ts = of_type as TypeScope;
if (of_type is ProcScope)
ts = new ProcType(of_type as ProcScope);
returned_scope = new ArrayScope(ts as TypeScope,indexes.ToArray());
returned_scope.topScope = cur_scope;
if (_array_type.indexers == null) (returned_scope as ArrayScope).is_dynamic_arr = true;
returned_scope.loc = get_location(_array_type);
}
public override void visit(label_definitions _label_definitions)
{
//throw new Exception("The method or operation is not implemented.");
}
public override void visit(procedure_attribute _procedure_attribute)
{
throw new Exception("The method or operation is not implemented.");
}
public override void visit(typed_parameters _typed_parametres)
{
throw new Exception("The method or operation is not implemented.");
}
public override void visit(formal_parameters _formal_parametres)
{
throw new Exception("The method or operation is not implemented.");
}
public override void visit(procedure_attributes_list _procedure_attributes_list)
{
throw new Exception("The method or operation is not implemented.");
}
private bool IsForward(procedure_header hdr)
{
if (hdr.proc_attributes == null) return false;
for (int i=0; i<hdr.proc_attributes.proc_attributes.Count; i++)
if (hdr.proc_attributes.proc_attributes[i].attribute_type == proc_attribute.attr_forward)
return true;
return false;
}
private bool IsForward(function_header hdr)
{
if (hdr.proc_attributes == null) return false;
for (int i=0; i<hdr.proc_attributes.proc_attributes.Count; i++)
if (hdr.proc_attributes.proc_attributes[i].attribute_type == proc_attribute.attr_forward)
return true;
return false;
}
private bool IsStatic(procedure_attributes_list attrs)
{
if (attrs == null) return false;
for (int i=0; i<attrs.proc_attributes.Count; i++)
if (attrs.proc_attributes[i].attribute_type == proc_attribute.attr_static)
return true;
return false;
}
private void SetAttributes(ProcScope ps, procedure_attributes_list attrs)
{
if (attrs == null) return;
for (int i = 0; i < attrs.proc_attributes.Count; i++)
if (attrs.proc_attributes[i].attribute_type == proc_attribute.attr_static)
ps.is_static = true;
else if (attrs.proc_attributes[i].attribute_type == proc_attribute.attr_virtual)
ps.is_virtual = true;
else if (attrs.proc_attributes[i].attribute_type == proc_attribute.attr_abstract)
{
ps.is_abstract = true;
if (ps.topScope is TypeScope)
(ps.topScope as TypeScope).is_abstract = true;
}
else if (attrs.proc_attributes[i].attribute_type == proc_attribute.attr_override)
ps.is_override = true;
else if (attrs.proc_attributes[i].attribute_type == proc_attribute.attr_reintroduce)
ps.is_reintroduce = true;
}
private ProcScope select_function_definition(ProcScope ps, formal_parameters prms, TypeScope return_type, TypeScope declType, bool function=false, bool static_constructor=false)
{
SymScope tmp = returned_scope;
List<ElementScope> lst = new List<ElementScope>();
if (prms != null)
{
foreach (typed_parameters pars in prms.params_list)
{
pars.vars_type.visit(this);
if (returned_scope != null)
{
foreach (ident id in pars.idents.idents)
{
if (returned_scope is ProcScope)
returned_scope = new ProcType(returned_scope as ProcScope);
ElementScope si = new ElementScope(new SymInfo(id.name, SymbolKind.Parameter, id.name), returned_scope, ps);
si.loc = get_location(id);
si.param_kind = pars.param_kind;
if (pars.inital_value != null)
{
cnst_val.prim_val = null;
if (pars.inital_value is nil_const)
si.cnst_val = "nil";
else
{
pars.inital_value.visit(this);
if (cnst_val.prim_val != null)
si.cnst_val = cnst_val.prim_val;
else
si.cnst_val = pars.inital_value.ToString();
}
}
lst.Add(si);
}
}
}
while (ps != null)
{
if (ps.parameters != null)
{
if (ps.parameters.Count == lst.Count)
{
bool eq = true;
for (int i = 0; i < lst.Count; i++)
{
TypeScope left = ps.parameters[i].sc as TypeScope;
TypeScope right = lst[i].sc as TypeScope;
if (!left.IsEqual(right) || ps.parameters[i].param_kind != lst[i].param_kind)
{
eq = false;
break;
}
}
if (eq)
{
if (return_type == null) return ps;
if (ps.return_type != null && return_type != null)
{
if ((ps.return_type as TypeScope).IsEqual(return_type))
return ps;
}
}
}
}
ps = ps.nextProc;
}
}
else
{
while (ps != null)
{
if (ps.is_constructor && ps.is_static != static_constructor)
{
ps = ps.nextProc;
continue;
}
else if (ps.is_constructor && ps.is_static && static_constructor)
{
return ps;
}
if (ps.parameters == null || ps.parameters.Count == 0)
{
if (function && ps.return_type != null && return_type == null)
return ps;
if (ps.return_type == null && return_type == null)
return ps;
if (ps.return_type != null && return_type != null)
{
if ((ps.return_type as TypeScope).IsEqual(return_type))
return ps;
}
else
return null;
}
ps = ps.nextProc;
}
}
returned_scope = tmp;
return ps;
}
public override void visit(procedure_header _procedure_header)
{
//throw new Exception("The method or operation is not implemented.");
SymScope topScope;
ProcScope ps = null;
ElementScope[] predef_params = null;
bool not_def = false;
ProcRealization pr = null;
bool is_realization = false;
location loc = get_location(_procedure_header);
if (_procedure_header.name != null)
{
_procedure_header.name.visit(this);
if (_procedure_header.name.class_name != null)
{
topScope = null;
if (_procedure_header.name.ln != null && _procedure_header.name.ln.Count > 0)
{
SymScope tmp_scope = cur_scope;
for (int i = 0; i < _procedure_header.name.ln.Count; i++)
{
tmp_scope = tmp_scope.FindName(_procedure_header.name.ln[i].name);
if (tmp_scope == null)
break;
}
topScope = tmp_scope;
}
else
topScope = cur_scope.FindName(_procedure_header.name.class_name.name);
if (topScope != null)
{
ps = topScope.FindNameOnlyInThisType(meth_name) as ProcScope;
if (ps != null && ps is CompiledMethodScope)
ps = null;
if (ps == null)
{
ps = new ProcScope(meth_name, topScope);
ps.head_loc = loc;
bool ext = false;
if (topScope is CompiledScope || topScope is ArrayScope || topScope is TypeSynonim /*&& ((topScope as TypeSynonim).actType is CompiledScope || (topScope as TypeSynonim).actType is ArrayScope || (topScope as TypeSynonim).actType is DiapasonScope)*/)
ext = true;
else if (!(topScope is TypeSynonim) && !(topScope is PointerScope) && !(topScope is SetScope) && !(topScope is FileScope))
ext = true;
if (ext)
{
not_def = true;
ps.is_extension = true;
ps.AddName("self", new ElementScope(new SymInfo("self", SymbolKind.Parameter, "self"), topScope, cur_scope));
ps.declaringType = topScope as TypeScope;
TypeScope ts = topScope as TypeScope;
if (topScope is TypeSynonim)
ts = (ts as TypeSynonim).actType;
this.entry_scope.AddExtensionMethod(meth_name, ps, ts);
ts.AddExtensionMethod(meth_name, ps, ts);
}
}
//while (ps != null && ps.already_defined) ps = ps.nextProc;
else
{
if (ps.parameters != null)
predef_params = ps.parameters.ToArray();
ps = select_function_definition(ps, _procedure_header.parameters, null, topScope as TypeScope);
}
if (ps == null)
{
ps = new ProcScope(meth_name, cur_scope);
ps.head_loc = loc;
}
if (ps.parameters.Count != 0 && _procedure_header.parameters != null && is_proc_realization)
{
predef_params = ps.parameters.ToArray();
ps.parameters.Clear();
ps.already_defined = true;
}
if (impl_scope == null)
{
pr = new ProcRealization(ps, cur_scope);
pr.already_defined = true;
pr.loc = cur_loc;
pr.head_loc = loc;
if (topScope.ElemKind == SymbolKind.Interface)
pr.si.not_include = true;
is_realization = true;
entry_scope.AddName("$method", pr);
}
else
{
pr = new ProcRealization(ps, impl_scope);
pr.already_defined = true;
pr.loc = cur_loc;
is_realization = true;
pr.head_loc = loc;
impl_scope.AddName("$method", pr);
}
}
else
{
ps = new ProcScope(meth_name, cur_scope);
ps.head_loc = loc;
}
}
else
{
ps = new ProcScope(meth_name, cur_scope);
if (_procedure_header.proc_attributes != null && has_extensionmethod_attr(_procedure_header.proc_attributes.proc_attributes) && _procedure_header.parameters.params_list.Count > 0)
{
ps.is_extension = true;
if (_procedure_header.parameters.params_list[0].vars_type is enum_type_definition)
{
template_type_reference tuple = new template_type_reference();
tuple.name = new named_type_reference(new ident_list(new ident("System"), new ident("Tuple")).idents);
template_param_list tpl = new template_param_list();
enum_type_definition etd = _procedure_header.parameters.params_list[0].vars_type as enum_type_definition;
foreach (enumerator en in etd.enumerators.enumerators)
{
tpl.Add(en.name);
}
tuple.params_list = tpl;
tuple.visit(this);
}
else
_procedure_header.parameters.params_list[0].vars_type.visit(this);
topScope = returned_scope;
ps.declaringType = topScope as TypeScope;
TypeScope ts = topScope as TypeScope;
if (topScope is TypeSynonim)
ts = (ts as TypeSynonim).actType;
if (ts.original_type != null && ts.instances != null)
{
bool pure_instance = true;
foreach (TypeScope gen_arg in ts.instances)
{
if (!(gen_arg is TemplateParameterScope))
pure_instance = false;
}
if (pure_instance)
ts = ts.original_type;
}
this.entry_scope.AddExtensionMethod(meth_name, ps, ts);
topScope.AddExtensionMethod(meth_name, ps, ts);
pr = new ProcRealization(ps, cur_scope);
pr.already_defined = true;
pr.loc = cur_loc;
pr.head_loc = loc;
if (impl_scope != null)
impl_scope.AddName("$method", pr);
else
this.entry_scope.AddName("$method", pr);
}
ps.head_loc = loc;
if (!ps.is_extension)
{
if (IsForward(_procedure_header))
{
cur_scope.AddName(meth_name, ps);
ps.is_forward = true;
}
else
{
bool found_in_top = false;
SymScope ss = null;
if (cur_scope is ImplementationUnitScope)
{
ss = (cur_scope as ImplementationUnitScope).topScope.FindNameOnlyInThisType(meth_name);
if (ss != null && ss is ProcScope)
{
ps = select_function_definition(ss as ProcScope, _procedure_header.parameters, null, null);
if (ps == null && _procedure_header.parameters == null)
ps = ss as ProcScope;
if (ps == null)
{
ps = new ProcScope(meth_name, cur_scope);
ps.head_loc = loc;
}
//ps = ss as ProcScope;
if (ps.parameters.Count != 0 && _procedure_header.parameters != null)
{
predef_params = ps.parameters.ToArray();
ps.parameters.Clear();
ps.already_defined = true;
}
pr = new ProcRealization(ps, cur_scope);
pr.already_defined = true;
pr.loc = cur_loc;
pr.head_loc = loc;
is_realization = true;
cur_scope.AddName("$method", pr);
found_in_top = true;
}
}
if (!found_in_top) //ne nashli opisanie v interface chasti modilja
{
//ss = cur_scope.FindNameOnlyInType(meth_name);
ss = cur_scope.FindName(meth_name);
if (ss != null && ss is ProcScope)
{
if ((ss as ProcScope).is_forward && ss == select_function_definition(ss as ProcScope, _procedure_header.parameters, null, null))
{
//if ((ss as ProcScope).parameters.Count != 0 && _procedure_header.parameters != null) (ss as ProcScope).parameters.Clear();
pr = new ProcRealization(ss as ProcScope, cur_scope);
pr.already_defined = true;
pr.loc = cur_loc;
cur_scope.AddName("$method", pr);
returned_scope = pr;
pr.head_loc = loc;
return;
}
else
{
ps = new ProcScope(meth_name, cur_scope);
ps.head_loc = loc;
if (ps.topScope == ss.topScope)
{
while ((ss as ProcScope).nextProc != null && (ss as ProcScope).nextProc.topScope == ps.topScope) ss = (ss as ProcScope).nextProc;
ProcScope tmp_ps = (ss as ProcScope).nextProc;
(ss as ProcScope).nextProc = ps;
ps.nextProc = tmp_ps;
cur_scope.AddName(meth_name, ps);
ps.si.name = meth_name;
}
else
{
ps.nextProc = ss as ProcScope;
cur_scope.AddName(meth_name, ps);
}
//ps = select_function_definition(ss as ProcScope,_procedure_header.parameters);
}
}
else
{
cur_scope.AddName(meth_name, ps);
}
}
}
}
}
}
else
{
ps = new ProcScope("", cur_scope);
ps.head_loc = loc;
}
if ((!is_realization || not_def) && ps.loc == null)
ps.loc = cur_loc;
//ps.head_loc = loc;
ps.declaringUnit = entry_scope;
if (_procedure_header.template_args != null && !ps.IsGeneric())
{
Dictionary<string, List<TypeScope>> where_types = new Dictionary<string, List<TypeScope>>();
if (_procedure_header.where_defs != null)
{
foreach (where_definition wd in _procedure_header.where_defs.defs)
{
for (int i = 0; i < wd.names.idents.Count; i++)
{
string name = wd.names.idents[i].name;
for (int j = 0; j < wd.types.defs.Count; j++)
{
wd.types.defs[j].visit(this);
if (!where_types.ContainsKey(name))
where_types[name] = new List<TypeScope>();
where_types[name].Add(returned_scope as TypeScope);
}
}
}
}
foreach (ident s in _procedure_header.template_args.idents)
{
ps.AddTemplateParameter(s.name);
List<TypeScope> where_ts_list = null;
where_types.TryGetValue(s.name, out where_ts_list);
TypeScope base_ts = TypeTable.obj_type;
if (where_ts_list != null)
foreach (TypeScope ts in where_ts_list)
{
TypeScope where_ts = ts;
if (where_ts == null)
where_ts = TypeTable.obj_type;
base_ts = new TypeScope(where_ts.si.kind, where_ts.topScope, base_ts);
base_ts.AddImplementedInterface(where_ts);
}
TemplateParameterScope tps = new TemplateParameterScope(s.name, base_ts, ps);
tps.loc = get_location(s);
ps.AddName(s.name, tps);
}
}
SetAttributes(ps, _procedure_header.proc_attributes);
ps.is_static = _procedure_header.class_keyword;
if (add_doc_from_text && this.converter.controller.docs != null && this.converter.controller.docs.ContainsKey(_procedure_header))
ps.AddDocumentation(this.converter.controller.docs[_procedure_header]);
if (is_proc_realization) ps.already_defined = true;
else
{
ps.loc = loc;
}
if (_procedure_header.name == null || _procedure_header.name.class_name == null)
{
ps.acc_mod = cur_access_mod;
ps.si.acc_mod = cur_access_mod;
}
SymScope tmp = cur_scope;
cur_scope = ps;
if (_procedure_header.parameters != null)
add_parameters(ps, _procedure_header.parameters, predef_params);
cur_scope = tmp;
if (cur_scope is TypeScope && !ps.is_static)
ps.AddName("self", new ElementScope(new SymInfo("self", SymbolKind.Parameter, "self"), cur_scope, ps));
//cur_scope = ps;
returned_scope = ps;
ps.Complete();
if (pr != null && not_def)
pr.Complete();
}
bool has_extensionmethod_attr(List<procedure_attribute> attrs)
{
foreach (procedure_attribute attr in attrs)
{
if (attr.attribute_type == PascalABCCompiler.SyntaxTree.proc_attribute.attr_extension)
{
return true;
}
}
return false;
}
public override void visit(function_header _function_header)
{
SymScope topScope;
ProcScope ps = null;
ElementScope[] predef_params = null;
bool is_realization = false;
TypeScope return_type = null;
bool not_def = false;
ProcRealization pr = null;
location loc = get_location(_function_header);
returned_scope = null;
if (_function_header.return_type != null && !(_function_header.return_type is enum_type_definition && _function_header.template_args != null && _function_header.template_args.Count > 0))
_function_header.return_type.visit(this);
if (returned_scope != null)
{
if (returned_scope is ProcScope)
returned_scope = new ProcType(returned_scope as ProcScope);
return_type = returned_scope as TypeScope;
}
if (_function_header.name != null)
{
_function_header.name.visit(this);
if (_function_header.name.class_name != null)
{
topScope = null;
if (_function_header.name.ln != null && _function_header.name.ln.Count > 0)
{
SymScope tmp_scope = cur_scope;
for (int i = 0; i < _function_header.name.ln.Count; i++)
{
tmp_scope = tmp_scope.FindName(_function_header.name.ln[i].name);
if (tmp_scope == null)
break;
}
topScope = tmp_scope;
}
else
topScope = cur_scope.FindName(_function_header.name.class_name.name);
if (topScope != null)
{
ps = topScope.FindNameOnlyInThisType(meth_name) as ProcScope;
if (ps != null && ps is CompiledMethodScope)
ps = null;
if (ps == null)
{
ps = new ProcScope(meth_name, topScope);
ps.head_loc = loc;
bool ext = false;
if (topScope is CompiledScope || topScope is ArrayScope || topScope is TypeSynonim /*&& ((topScope as TypeSynonim).actType is CompiledScope || (topScope as TypeSynonim).actType is ArrayScope || (topScope as TypeSynonim).actType is DiapasonScope)*/)
ext = true;
else if (!(topScope is TypeSynonim) && !(topScope is PointerScope) && !(topScope is SetScope) && !(topScope is FileScope))
ext = true;
if (ext)
{
not_def = true;
ps.AddName("self", new ElementScope(new SymInfo("self", SymbolKind.Parameter, "self"), topScope, cur_scope));
ps.declaringType = topScope as TypeScope;
ps.is_extension = true;
TypeScope ts = topScope as TypeScope;
if (topScope is TypeSynonim)
ts = (ts as TypeSynonim).actType;
this.entry_scope.AddExtensionMethod(meth_name, ps, ts);
ts.AddExtensionMethod(meth_name, ps, ts);
}
}
else
{
ps = select_function_definition(ps, _function_header.parameters, return_type, topScope as TypeScope, true);
}
//while (ps != null && ps.already_defined) ps = ps.nextProc;
if (ps == null)
{
ps = new ProcScope(meth_name, cur_scope);
ps.head_loc = loc;
}
if (ps.parameters.Count != 0 && _function_header.parameters != null && is_proc_realization)
{
predef_params = ps.parameters.ToArray();
ps.parameters.Clear();
ps.already_defined = true;
}
if (impl_scope == null)
{
pr = new ProcRealization(ps, cur_scope);
pr.already_defined = true;
pr.loc = cur_loc;
is_realization = true;
pr.head_loc = loc;
entry_scope.AddName("$method", pr);
}
else
{
pr = new ProcRealization(ps, impl_scope);
pr.already_defined = true;
pr.loc = cur_loc;
pr.head_loc = loc;
is_realization = true;
impl_scope.AddName("$method", pr);
}
}
else
{
ps = new ProcScope(meth_name, cur_scope);
ps.head_loc = loc;
}
}
else
{
ps = new ProcScope(meth_name, cur_scope);
ps.head_loc = loc;
if (_function_header.proc_attributes != null && has_extensionmethod_attr(_function_header.proc_attributes.proc_attributes) && _function_header.parameters.params_list.Count > 0)
{
ps.is_extension = true;
if (_function_header.parameters.params_list[0].vars_type is enum_type_definition)
{
template_type_reference tuple = new template_type_reference();
tuple.name = new named_type_reference(new ident_list(new ident("System"), new ident("Tuple")).idents);
template_param_list tpl = new template_param_list();
enum_type_definition etd = _function_header.parameters.params_list[0].vars_type as enum_type_definition;
foreach (enumerator en in etd.enumerators.enumerators)
{
tpl.Add(en.name);
}
tuple.params_list = tpl;
tuple.visit(this);
}
else
_function_header.parameters.params_list[0].vars_type.visit(this);
topScope = returned_scope;
if (topScope is ProcScope)
topScope = new ProcType(topScope as ProcScope);
ps.declaringType = topScope as TypeScope;
TypeScope ts = topScope as TypeScope;
if (topScope is TypeSynonim)
ts = (ts as TypeSynonim).actType;
if (ts.original_type != null && ts.instances != null)
{
bool pure_instance = true;
foreach (TypeScope gen_arg in ts.instances)
{
if (!(gen_arg is TemplateParameterScope) && !(gen_arg is UnknownScope))
pure_instance = false;
}
if (pure_instance)
ts = ts.original_type;
}
this.entry_scope.AddExtensionMethod(meth_name, ps, ts);
topScope.AddExtensionMethod(meth_name, ps, ts);
/*if (topScope is TemplateParameterScope || topScope is UnknownScope)
TypeTable.obj_type.AddExtensionMethod(meth_name, ps, ts);*/
pr = new ProcRealization(ps, cur_scope);
pr.already_defined = true;
pr.loc = cur_loc;
pr.head_loc = loc;
if (impl_scope != null)
impl_scope.AddName("$method", pr);
else
this.entry_scope.AddName("$method", pr);
}
if (!ps.is_extension)
{
if (IsForward(_function_header))
{
cur_scope.AddName(meth_name, ps);
ps.is_forward = true;
}
else
{
bool found_in_top = false;
SymScope ss = null;
if (cur_scope is ImplementationUnitScope)
{
ss = (cur_scope as ImplementationUnitScope).topScope.FindNameOnlyInThisType(meth_name);
if (ss != null && ss is ProcScope)
{
//while ((ss as ProcScope).already_defined && (ss as ProcScope).nextProc != null) ss = (ss as ProcScope).nextProc;
//ps = ss as ProcScope;
if (ps.parameters != null)
predef_params = ps.parameters.ToArray();
ps = select_function_definition(ss as ProcScope, _function_header.parameters, return_type, null, true);
if (ps == null && _function_header.parameters == null && _function_header.return_type == null)
ps = ss as ProcScope;
if (ps == null)
{
ps = new ProcScope(meth_name, cur_scope);
ps.head_loc = loc;
}
if (ps.parameters.Count != 0 && _function_header.parameters != null)
{
ps.parameters.Clear();
ps.already_defined = true;
}
pr = new ProcRealization(ps, cur_scope);
pr.already_defined = true;
pr.loc = cur_loc;
pr.head_loc = loc;
is_realization = true;
cur_scope.AddName("$method", pr);
found_in_top = true;
}
}
if (!found_in_top)
{
//ss = cur_scope.FindNameOnlyInType(meth_name);
ss = cur_scope.FindName(meth_name);
if (ss != null && ss is ProcScope)
{
if ((ss as ProcScope).is_forward && ss == select_function_definition(ss as ProcScope, _function_header.parameters, (ss as ProcScope).return_type, null, true))
{
//if ((ss as ProcScope).parameters.Count != 0 && _function_header.parameters != null) (ss as ProcScope).parameters.Clear();
pr = new ProcRealization(ss as ProcScope, cur_scope);
pr.already_defined = true;
pr.loc = cur_loc;
cur_scope.AddName("$method", pr);
pr.head_loc = loc;
returned_scope = pr;
return;
}
else
{
ps = new ProcScope(meth_name, cur_scope);
ps.head_loc = loc;
if (ps.topScope == ss.topScope)
{
while ((ss as ProcScope).nextProc != null && (ss as ProcScope).nextProc.topScope == ps.topScope)
ss = (ss as ProcScope).nextProc;
ProcScope tmp_ps = (ss as ProcScope).nextProc;
(ss as ProcScope).nextProc = ps;
ps.nextProc = tmp_ps;
cur_scope.AddName(meth_name, ps);
ps.si.name = meth_name;
}
else
{
ps.nextProc = ss as ProcScope;
cur_scope.AddName(meth_name, ps);
}
}
}
else
{
cur_scope.AddName(meth_name, ps);
}
}
}
}
}
}
else
{
ps = new ProcScope("", cur_scope);
ps.head_loc = loc;
}
if ((!is_realization || not_def) && ps.loc == null)
ps.loc = cur_loc;
//ps.head_loc = loc;
ps.declaringUnit = entry_scope;
SymScope tmp = cur_scope;
if (_function_header.template_args != null && !ps.IsGeneric())
{
Dictionary<string, List<TypeScope>> where_types = new Dictionary<string, List<TypeScope>>();
if (_function_header.where_defs != null)
{
foreach (where_definition wd in _function_header.where_defs.defs)
{
for (int i = 0; i < wd.names.idents.Count; i++)
{
string name = wd.names.idents[i].name;
for (int j = 0; j < wd.types.defs.Count; j++)
{
wd.types.defs[j].visit(this);
if (!where_types.ContainsKey(name))
where_types[name] = new List<TypeScope>();
where_types[name].Add(returned_scope as TypeScope);
}
}
}
}
foreach (ident s in _function_header.template_args.idents)
{
ps.AddTemplateParameter(s.name);
List<TypeScope> where_ts_list = null;
where_types.TryGetValue(s.name, out where_ts_list);
TypeScope base_ts = TypeTable.obj_type;
if (where_ts_list != null)
foreach (TypeScope ts in where_ts_list)
{
TypeScope where_ts = ts;
if (where_ts == null)
where_ts = TypeTable.obj_type;
base_ts = new TypeScope(where_ts.si.kind, where_ts.topScope, base_ts);
base_ts.AddImplementedInterface(where_ts);
}
TemplateParameterScope tps = new TemplateParameterScope(s.name, base_ts, ps);
tps.loc = get_location(s);
ps.AddName(s.name, tps);
}
if (ps.return_type == null)
{
cur_scope = ps;
if (_function_header.return_type != null)
_function_header.return_type.visit(this);
return_type = returned_scope as TypeScope;
cur_scope = tmp;
}
}
SetAttributes(ps, _function_header.proc_attributes);
ps.is_static = _function_header.class_keyword;
if (add_doc_from_text && this.converter.controller.docs != null && this.converter.controller.docs.ContainsKey(_function_header))
ps.AddDocumentation(this.converter.controller.docs[_function_header]);
if (is_proc_realization)
{
ps.already_defined = true;
if (ps.loc == null)
ps.loc = loc;
}
else
{
ps.loc = loc;
}
if (_function_header.name == null || _function_header.name.class_name == null)
{
ps.acc_mod = cur_access_mod;
ps.si.acc_mod = cur_access_mod;
}
cur_scope = ps;
if (_function_header.parameters != null)
add_parameters(ps, _function_header.parameters, predef_params);
cur_scope = tmp;
if (ps.procRealization == null || ps.return_type == null)
ps.return_type = return_type;
//cur_scope = ps;
if (cur_scope is TypeScope && !ps.is_static)
ps.AddName("self", new ElementScope(new SymInfo("self", SymbolKind.Parameter, "self"), cur_scope, ps));
returned_scope = ps;
var resultName = currentUnitLanguage.LanguageInformation.ResultVariableName;
if (resultName != null)
{
ps.AddName(resultName, new ElementScope(new SymInfo(resultName, SymbolKind.Variable, resultName), ps.return_type, ps));
}
ps.Complete();
if (pr != null && not_def)
pr.Complete();
}
private void add_parameters(ProcScope ps, formal_parameters parameters, ElementScope[] predef_params)
{
int i = 0;
foreach (typed_parameters pars in parameters.params_list)
{
pars.vars_type.visit(this);
if (returned_scope != null)
{
if (returned_scope is ProcScope)
returned_scope = new ProcType(returned_scope as ProcScope);
foreach (ident id in pars.idents.idents)
{
ElementScope si = new ElementScope(new SymInfo(id.name, SymbolKind.Parameter, id.name), returned_scope, ps);
si.loc = get_location(id);
if (pars.inital_value != null)
{
cnst_val.prim_val = null;
if (!(pars.inital_value is nil_const))
{
pars.inital_value.visit(this);
if (cnst_val.prim_val != null)
si.cnst_val = cnst_val.prim_val;
else
si.cnst_val = pars.inital_value.ToString();
}
else
si.cnst_val = "nil";
}
ps.AddName(id.name, si);
si.param_kind = pars.param_kind;
si.MakeDescription();
if (si.cnst_val == null && predef_params != null && i < predef_params.Length)
si.cnst_val = predef_params[i].cnst_val;
ps.AddParameter(si);
i++;
}
}
}
}
public override void visit(procedure_definition _procedure_definition)
{
//throw new Exception("The method or operation is not implemented.");
SymScope tmp = cur_scope;
cur_loc = get_location(_procedure_definition);
if (!parse_only_method_body)
{
is_proc_realization = true;
_procedure_definition.proc_header.visit(this);
is_proc_realization = false;
}
if (_procedure_definition.proc_body != null)
{
if (!parse_only_method_body && _procedure_definition.proc_header is function_header && (_procedure_definition.proc_header as function_header).return_type == null)
{
var fh = (_procedure_definition.proc_header as function_header);
if (fh != null && fh.return_type == null && !(returned_scope is ProcScope && (returned_scope as ProcScope).procRealization != null && !(returned_scope as ProcScope).is_extension))
{
var bl = _procedure_definition.proc_body as block;
if (bl != null && bl.program_code != null)
{
if (bl.program_code.subnodes.Count == 1)
{
var ass = bl.program_code.subnodes[0] as assign;
if (ass != null && ass.to is ident && (ass.to as ident).name.Equals(currentUnitLanguage.LanguageInformation.ResultVariableName, currentUnitLanguage.CaseSensitive ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase))
{
if (!(ass.from is nil_const))
{
ProcScope tmp_scope = returned_scope as ProcScope;
cur_scope = returned_scope;
ass.from.visit(this);
if (returned_scope != null && returned_scope is TypeScope)
{
tmp_scope.return_type = returned_scope as TypeScope;
if (tmp_scope.return_type is ProcType && (tmp_scope.return_type as ProcType).target == tmp_scope)
tmp_scope.return_type = null;
tmp_scope.Complete();
returned_scope = tmp_scope;
}
}
}
}
}
}
}
if (!parse_only_method_body)
cur_scope = returned_scope;
/*if ((ret_tn as ProcScope).return_type != null)
{
ret_tn.AddName("Result",new ElementScope(new SymInfo("Result", SymbolKind.Variable,"Result"),(ret_tn as ProcScope).return_type,cur_scope));
}*/
if (!parse_only_interface && !parse_only_method_header)
{
try
{
_procedure_definition.proc_body.visit(this);
}
catch (Exception ex)
{
}
}
if (cur_scope != null && cur_scope is ProcScope)
{
ProcRealization pr = (cur_scope as ProcScope).procRealization;
if (pr == null)
cur_scope.body_loc = get_location(_procedure_definition.proc_body);
else
pr.body_loc = get_location(_procedure_definition.proc_body);
}
}
cur_scope = tmp;
}
private List<PointerScope> ref_type_wait_list = new List<PointerScope>();
private ident_list template_args = null;
public override void visit(type_declaration _type_declaration)
{
//throw new Exception("The method or operation is not implemented.");
cur_type_name = _type_declaration.type_name.name;
List<string> generic_params = new List<string>();
if (_type_declaration.type_name is template_type_name)
{
template_args = (_type_declaration.type_name as template_type_name).template_args;
foreach (ident id in (_type_declaration.type_name as template_type_name).template_args.list)
{
generic_params.Add(id.name);
}
}
_type_declaration.type_def.visit(this);
if (returned_scope != null && returned_scope is PointerScope && (returned_scope as PointerScope).ref_type is UnknownScope)
{
ref_type_wait_list.Add(returned_scope as PointerScope);
}
//else
if (returned_scope != null && returned_scope is TypeScope)
{
/*if (!(_type_declaration.type_def is named_type_reference) && !(_type_declaration.type_def is sequence_type)
&& !(_type_declaration.type_def is sequence_type) && !(_type_declaration.type_def is array_type)
&& !(returned_scope is CompiledScope && _type_declaration.type_def is enum_type_definition))*/
if (_type_declaration.type_def is class_definition)
{
//(ret_tn as TypeScope).name = _type_declaration.type_name.name;
returned_scope.si.name = _type_declaration.type_name.name;
returned_scope.si.description = returned_scope.GetDescription();
if (!(_type_declaration.type_def is class_definition))
returned_scope.MakeSynonimDescription();
returned_scope.loc = get_location(_type_declaration);//new location(loc.begin_line_num,loc.begin_column_num,ret_tn.loc.end_line_num,ret_tn.loc.end_column_num,ret_tn.loc.doc);
if (_type_declaration.type_def is class_definition)
{
class_definition cl_def = _type_declaration.type_def as class_definition;
string key = this.converter.controller.Parser.LanguageInformation.GetClassKeyword(cl_def.keyword);
if (cl_def.attribute == class_attribute.Auto)
key = "auto " + key;
else if ((cl_def.attribute & class_attribute.Abstract) == class_attribute.Abstract)
key = "abstract " + key;
else if ((cl_def.attribute & class_attribute.Sealed) == class_attribute.Sealed)
key = "sealed " + key;
else if ((cl_def.attribute & class_attribute.Static) == class_attribute.Static)
key = "static " + key;
if (key != null && returned_scope.body_loc != null)
{
returned_scope.head_loc = new location(returned_scope.body_loc.begin_line_num, returned_scope.body_loc.begin_column_num, returned_scope.body_loc.begin_line_num, returned_scope.body_loc.begin_column_num + key.Length, doc);
}
if ((cl_def.attribute & class_attribute.Partial) == class_attribute.Partial)
{
List<SymScope> lst = cur_scope.FindOverloadNames(cur_type_name);
if (lst != null)
{
var this_ts = returned_scope as TypeScope;
foreach (SymScope ss in lst)
{
var ts = ss as TypeScope;
if (ts != null)
{
ts.AddPartial(this_ts);
this_ts.AddPartial(ts);
}
}
}
}
}
if (add_doc_from_text && this.converter.controller.docs != null && this.converter.controller.docs.ContainsKey(_type_declaration))
returned_scope.AddDocumentation(this.converter.controller.docs[_type_declaration]);
if (!(_type_declaration.type_def is class_definition))
cur_scope.AddName(_type_declaration.type_name.name, returned_scope);
}
else
{
TypeSynonim ts = new TypeSynonim(new SymInfo(_type_declaration.type_name.name, returned_scope.si.kind, _type_declaration.type_name.name), returned_scope, generic_params);
ts.loc = get_location(_type_declaration);
ts.topScope = cur_scope;
ts.declaringUnit = entry_scope;
//ts.si.describe = "type "+ret_tn.si.name+" = "+ret_tn.si.describe;
if (_type_declaration.type_def is enum_type_definition && ts.loc.begin_line_num != ts.loc.end_line_num)
{
location loc = get_location(_type_declaration.type_def);
ts.head_loc = new location(loc.begin_line_num, loc.begin_column_num, loc.begin_line_num, loc.begin_column_num, doc);
ts.body_loc = loc;
}
cur_scope.AddName(_type_declaration.type_name.name, ts);
if (add_doc_from_text && this.converter.controller.docs != null && this.converter.controller.docs.ContainsKey(_type_declaration))
ts.AddDocumentation(this.converter.controller.docs[_type_declaration]);
}
}
else if (returned_scope != null)
{
if (returned_scope is ProcScope)
{
returned_scope = new ProcType(returned_scope as ProcScope, generic_params);
returned_scope.topScope = cur_scope;
}
cur_scope.AddName(_type_declaration.type_name.name, returned_scope);
if (returned_scope is ProcType)
{
returned_scope.MakeSynonimDescription();
}
location loc = get_location(_type_declaration);
if (returned_scope.loc == null)
{
returned_scope.loc = loc;
//ret_tn.loc = new location(loc.begin_line_num,loc.begin_column_num,ret_tn.loc.end_line_num,ret_tn.loc.end_column_num,ret_tn.loc.doc);
}
}
returned_scope.declaringUnit = entry_scope;
if (ref_type_wait_list.Count == 0) returned_scope = null;
cur_type_name = null;
template_args = null;
}
public override void visit(type_declarations _type_declarations)
{
//throw new Exception("The method or operation is not implemented.");
Hashtable ht = new Hashtable(StringComparer.OrdinalIgnoreCase);
foreach (type_declaration td in _type_declarations.types_decl)
{
td.visit(this);
if (td.type_name != null)
ht[td.type_name.name] = returned_scope;
}
if (ref_type_wait_list.Count > 0)
{
for (int i=0; i<ref_type_wait_list.Count; i++)
{
PointerScope ps = ref_type_wait_list[i];
TypeScope ts = ht[ps.ref_type.si.name] as TypeScope;
if (ts != null)
{
ps.ref_type = ts;
}
}
}
returned_scope = null;
ref_type_wait_list.Clear();
}
public override void visit(simple_const_definition _simple_const_definition)
{
//throw new Exception("The method or operation is not implemented.");
try
{
_simple_const_definition.const_value.visit(this);
}
catch (Exception e)
{
#if DEBUG
File.AppendAllText("log.txt", e.Message + Environment.NewLine + e.StackTrace + Environment.NewLine);
#endif
}
if (returned_scope != null /*&& cnst_val.prim_val != null*/)
{
ElementScope es = new ElementScope(new SymInfo(_simple_const_definition.const_name.name, SymbolKind.Constant, _simple_const_definition.const_name.name), returned_scope, cnst_val.prim_val != null? cnst_val.prim_val: get_constant_as_string(_simple_const_definition.const_value), cur_scope);
es.is_static = true;
cur_scope.AddName(_simple_const_definition.const_name.name, es);
es.loc = get_location(_simple_const_definition.const_name);
es.declaringUnit = entry_scope;
if (add_doc_from_text && this.converter.controller.docs != null && this.converter.controller.docs.ContainsKey(_simple_const_definition))
es.AddDocumentation(this.converter.controller.docs[_simple_const_definition]);
}
returned_scope = null;
cnst_val.prim_val = null;
}
private string get_constant_as_string(expression e)
{
if (e is pascal_set_constant || e is PascalABCCompiler.SyntaxTree.array_const)
{
List<string> elems = new List<string>();
pascal_set_constant set = e as pascal_set_constant;
PascalABCCompiler.SyntaxTree.array_const arr = e as PascalABCCompiler.SyntaxTree.array_const;
expression_list values = null;
if (set != null)
values = set.values;
else
values = arr.elements;
if (values == null)
return "[]";
if (values.Count > 10)//dlinnye konstanty ne pokazyvaem
return null;//prosto const c: <type>
foreach (expression elem in values.expressions)
{
if (elem is ident || elem is int32_const || elem is char_const || elem is string_const)
elems.Add(get_constant_as_string(elem));//tolko primitivy
else
return null;
}
//govnostudia ne daet podkluchit Core.dll i ne mogu vyzvat Join. urody
StringBuilder sb = new StringBuilder();
for (int i = 0; i < elems.Count; i++)
{
sb.Append(elems[i]);
if (i < elems.Count - 1)
sb.Append(", ");
}
if (set != null)
return "[" + sb.ToString() + "]";
else
return "(" + sb.ToString() + ")";
}
else if (e is char_const)
return "'" + (e as char_const).cconst + "'";
else if (e.ToString().Contains("PascalABCCompiler.SyntaxTree"))
return null;
else
return e.ToString();
}
public override void visit(typed_const_definition _typed_const_definition)
{
//throw new Exception("The method or operation is not implemented.");
_typed_const_definition.const_type.visit(this);
if (returned_scope == null) return;
cnst_val.prim_val = null;
SymScope cnst_type = returned_scope;
try
{
_typed_const_definition.const_value.visit(this);
}
catch (Exception e)
{
#if DEBUG
File.AppendAllText("log.txt", e.Message + Environment.NewLine + e.StackTrace + Environment.NewLine);
#endif
}
ElementScope es = new ElementScope(new SymInfo(_typed_const_definition.const_name.name, SymbolKind.Constant, _typed_const_definition.const_name.name), cnst_type, cnst_val.prim_val != null?cnst_val.prim_val: get_constant_as_string(_typed_const_definition.const_value), cur_scope);
cur_scope.AddName(_typed_const_definition.const_name.name, es);
es.loc = get_location(_typed_const_definition);
es.is_static = true;
es.declaringUnit = entry_scope;
if (add_doc_from_text && this.converter.controller.docs != null && this.converter.controller.docs.ContainsKey(_typed_const_definition))
es.AddDocumentation(this.converter.controller.docs[_typed_const_definition]);
cnst_val.prim_val = null;
}
public override void visit(const_definition _const_definition)
{
throw new Exception("The method or operation is not implemented.");
}
public override void visit(consts_definitions_list _consts_definitions_list)
{
//throw new Exception("The method or operation is not implemented.");
foreach (const_definition cnst in _consts_definitions_list.const_defs)
cnst.visit(this);
}
public override void visit(unit_name _unit_name)
{
throw new Exception("The method or operation is not implemented.");
}
public override void visit(unit_or_namespace _unit_or_namespace)
{
throw new Exception("The method or operation is not implemented.");
}
public override void visit(uses_unit_in _uses_unit_in)
{
throw new Exception("The method or operation is not implemented.");
}
public override void visit(uses_list _uses_list)
{
throw new Exception("The method or operation is not implemented.");
}
public override void visit(program_body _program_body)
{
throw new Exception("The method or operation is not implemented.");
}
public override void visit(compilation_unit _compilation_unit)
{
throw new Exception("The method or operation is not implemented.");
}
private Hashtable ns_cache;
private bool is_namespace = false;
public override void visit(unit_module _unit_module)
{
string path = get_assembly_path("mscorlib.dll", _unit_module.file_name);
Assembly _as = PascalABCCompiler.NetHelper.NetHelper.LoadAssembly(path);
AssemblyDocCache.Load(_as, path);
PascalABCCompiler.NetHelper.NetHelper.init_namespaces(_as);
List<string> namespaces = new List<string>();
currentUnitLanguage = Languages.Facade.LanguageProvider.Instance.SelectLanguageByExtension(_unit_module.file_name);
string unitName = _unit_module.unit_name.idunit_name.name;
var languageUsingStandardUnit = Languages.Facade.LanguageProvider.Instance.Languages.Find(lang => lang.SystemUnitNames.Contains(unitName));
// Пока что добавили возможость грубо отключить добавление NET пространств имен по умолчанию здесь (второе условие нужно, чтобы в стандартные модули языка они тоже не добавлялись) EVA
if (currentUnitLanguage.LanguageInformation.AddStandardNetNamespacesToUserScope && (languageUsingStandardUnit?.LanguageInformation.AddStandardNetNamespacesToUserScope ?? true))
namespaces.AddRange(PascalABCCompiler.NetHelper.NetHelper.GetNamespaces(_as));
InterfaceUnitScope unit_scope = null;
bool existed_ns = false;
is_namespace = _unit_module.unit_name.HeaderKeyword == UnitHeaderKeyword.Namespace;
if (_unit_module.unit_name.HeaderKeyword != UnitHeaderKeyword.Namespace || !CodeCompletionController.pabcNamespaces.TryGetValue(_unit_module.unit_name.idunit_name.name.ToLower(), out unit_scope))
{
cur_scope = unit_scope = new InterfaceUnitScope(new SymInfo(_unit_module.unit_name.idunit_name.name, SymbolKind.Namespace, _unit_module.unit_name.idunit_name.name), null, _unit_module.unit_name.HeaderKeyword == UnitHeaderKeyword.Namespace, _unit_module.file_name);
if (_unit_module.unit_name.HeaderKeyword == UnitHeaderKeyword.Namespace /*&& CodeCompletionController.comp != null && CodeCompletionController.comp.CompilerOptions.CurrentProject != null*/)
{
CodeCompletionController.pabcNamespaces.Add(_unit_module.unit_name.idunit_name.name.ToLower(), unit_scope);
}
}
else
{
cur_scope = new InterfaceUnitScope(new SymInfo(_unit_module.unit_name.idunit_name.name, SymbolKind.Namespace, _unit_module.unit_name.idunit_name.name), null, _unit_module.unit_name.HeaderKeyword == UnitHeaderKeyword.Namespace, _unit_module.file_name);
existed_ns = true;
//cur_scope = unit_scope;
cur_scope.symbol_table = unit_scope.symbol_table;
unit_scope.AddNamespaceUnit(cur_scope as InterfaceUnitScope);
unit_scope = cur_scope as InterfaceUnitScope;
//cur_scope.members.RemoveAll(x => x.loc != null && x.loc.doc.file_name == _unit_module.file_name);
}
this.cur_unit_file_name = _unit_module.file_name;
//if (XmlDoc.LookupLocalizedXmlDocForUnitWithSources(_unit_module.file_name) != null)
if (!add_doc_from_text)
{
UnitDocCache.LoadWithSources(cur_scope, _unit_module.file_name);
//this.add_doc_from_text = false;
}
//add_standart_types_simple();
Stack<Position> regions_stack = new Stack<Position>();
if (CodeCompletionController.comp != null && CodeCompletionController.comp.CompilerOptions.CurrentProject != null && CodeCompletionController.comp.CompilerOptions.CurrentProject.ContainsSourceFile(_unit_module.file_name))
{
IReferenceInfo[] refs = CodeCompletionController.comp.CompilerOptions.CurrentProject.References;
if (_unit_module.compiler_directives == null)
_unit_module.compiler_directives = new List<PascalABCCompiler.SyntaxTree.compiler_directive>();
foreach (IReferenceInfo ri in refs)
{
_unit_module.compiler_directives.Add
(new PascalABCCompiler.SyntaxTree.compiler_directive(new token_info("reference"), new token_info(ri.FullAssemblyName)));
}
}
List<string> included_files = new List<string>();
if (_unit_module.compiler_directives != null)
foreach (PascalABCCompiler.SyntaxTree.compiler_directive dir in _unit_module.compiler_directives)
{
if (dir.Name.text.ToLower() == "reference")
{
try
{
//System.Reflection.Assembly assm = System.Reflection.Assembly.LoadFrom(get_assembly_path(dir.Directive.text,_unit_module.file_name));
path = get_assembly_path(dir.Directive.text, _unit_module.file_name);
System.Reflection.Assembly assm = PascalABCCompiler.NetHelper.NetHelper.LoadAssembly(path);
PascalABCCompiler.NetHelper.NetHelper.init_namespaces(assm);
AssemblyDocCache.Load(assm, path);
namespaces.AddRange(PascalABCCompiler.NetHelper.NetHelper.GetNamespaces(assm));
unit_scope.AddReferencedAssembly(assm);
}
catch (Exception)
{
}
//ns=new PascalABCCompiler.NetHelper.NetScope(unl,assm,tcst);
}
else
if (dir.Name.text.ToLower() == "region")
{
if (cur_scope.regions == null)
cur_scope.regions = new List<Position>();
regions_stack.Push(new Position(dir.source_context.begin_position.line_num, dir.source_context.begin_position.column_num, dir.source_context.end_position.line_num, dir.source_context.end_position.column_num, dir.source_context.FileName, dir.Directive.text));
}
else if (dir.Name.text.ToLower() == "endregion")
{
if (regions_stack.Count > 0)
{
Position pos = regions_stack.Pop();
if (cur_scope.regions != null)
{
cur_scope.regions.Add(new Position(pos.line, pos.column - 1, dir.source_context.end_position.line_num, dir.source_context.end_position.column_num, pos.file_name, pos.fold_text));
}
}
}
else if (dir.Name.text.ToLower() == "includenamespace")
{
string directive = dir.Directive.text.Replace('/', Path.DirectorySeparatorChar).Replace('\\', Path.DirectorySeparatorChar);
Compiler.TryThrowInvalidPath(directive, dir.source_context);
if (directive == "*.pas" || directive.EndsWith(Path.DirectorySeparatorChar + "*.pas"))
{
string udir = Path.Combine(Path.GetDirectoryName(_unit_module.file_name), directive.Replace(Path.DirectorySeparatorChar + "*.pas", ""));
foreach (string file in Directory.EnumerateFiles(udir, "*.pas"))
included_files.Add(file);
}
else
included_files.Add(Path.Combine(Path.GetDirectoryName(_unit_module.file_name), directive));
}
}
ns_cache = new Hashtable(StringComparer.CurrentCultureIgnoreCase);
doc = new document(_unit_module.file_name);
cur_scope.head_loc = get_location(_unit_module.unit_name);
cur_scope.file_name = _unit_module.file_name;
cur_scope.loc = get_location(_unit_module);
//if (!existed_ns)
cur_scope.AddName(_unit_module.unit_name.idunit_name.name, cur_scope);
if (add_doc_from_text && this.converter.controller.docs != null && this.converter.controller.docs.ContainsKey(_unit_module.unit_name))
cur_scope.AddDocumentation(this.converter.controller.docs[_unit_module.unit_name]);
entry_scope = cur_scope;
if (_unit_module.unit_name.HeaderKeyword == UnitHeaderKeyword.Library)
foreach (string file in included_files)
{
DomConverter dc = CodeCompletionController.comp_modules[file] as DomConverter;
if (dc == null)
{
dc = new CodeCompletionController().CompileAllIfNeed(file, true);
}
if (dc.visitor != null)
{
}
}
// считаем основной модуль идущим первым в списке EVA
var language = Languages.Facade.LanguageProvider.Instance.Languages.Find(lang => lang.SystemUnitNames.First() == unitName);
if (language != null)
{
// добавление стандартных типов можно делать в отдельный фиктивный модуль, как в основном компиляторе
// это позволит работать директиве DisableStandardUnits, а также не будет засорять сам стандартный модуль типами EVA
add_standart_types(entry_scope, language.LanguageInformation);
if (language == Languages.Facade.LanguageProvider.Instance.MainLanguage)
{
AddPascalStandardProcedures();
}
}
CodeCompletionController.comp_modules[_unit_module.file_name] = this.converter;
if (!existed_ns)
{
foreach (string s in namespaces)
{
if (!ns_cache.ContainsKey(s))
{
NamespaceScope ns_scope = new NamespaceScope(s);
entry_scope.AddName(s, ns_scope);
ns_cache[s] = s;
}
}
}
if (currentUnitLanguage.ApplySyntaxTreeConvertersForIntellisense)
{
foreach (ISyntaxTreeConverter converter in currentUnitLanguage.SyntaxTreeConverters)
{
_unit_module = (unit_module)converter.Convert(_unit_module, true);
}
}
List<string> usedUnitsNames = new List<string>();
interface_node _interface_node = _unit_module.interface_part;
if (_interface_node.uses_modules != null)
{
usedUnitsNames = _interface_node.uses_modules.units.Select(unit => unit.name.idents[0].name).ToList();
(cur_scope as InterfaceUnitScope).uses_source_range = get_location(_interface_node.uses_modules);
// компиляция зависимостей из секции uses
for (int j = _interface_node.uses_modules.units.Count - 1; j >= 0; j--)
{
unit_or_namespace s = _interface_node.uses_modules.units[j];
CompileUsedUnitOrNamespace(s, Path.GetDirectoryName(_unit_module.file_name),
cur_scope, ns_cache, unl, currentUnitLanguage.CaseSensitive);
}
}
// компиляция зависимостей из конструкций import и from import
if (cur_scope != null && _unit_module.initialization_part != null)
{
CompileImportedDependencies(_unit_module.initialization_part, _unit_module.file_name, ns_cache, usedUnitsNames, currentUnitLanguage.CaseSensitive);
}
StringComparer comparer = currentUnitLanguage.CaseSensitive ? StringComparer.Ordinal : StringComparer.OrdinalIgnoreCase;
// если это стандартный модуль, то подразумевается, что в нем явно указано какие из других стандартных модулей он использует EVA
if (!currentUnitLanguage.SystemUnitNames.Contains(Path.GetFileNameWithoutExtension(_unit_module.file_name)))
{
// Добавление всех стандартных модулей EVA
foreach (var standardUnitName in currentUnitLanguage.SystemUnitNames.Except(usedUnitsNames, comparer))
{
AddStandardUnit(standardUnitName, currentUnitLanguage.CaseSensitive, currentUnitLanguage.LanguageInformation.AddStandardUnitNamesToUserScope);
}
}
if (currentUnitLanguage.ApplySyntaxTreeConvertersForIntellisense)
{
var namesFromUsedUnits = CollectNamesFromUsedUnits(cur_scope);
var artifacts = new CompilationArtifactsUsedBySyntaxConverters(namesFromUsedUnits);
foreach (ISyntaxTreeConverter converter in currentUnitLanguage.SyntaxTreeConverters)
{
_unit_module = (unit_module)converter.ConvertAfterUsedModulesCompilation(_unit_module, true, in artifacts);
}
}
DateTime start_time = DateTime.Now;
System.Diagnostics.Debug.WriteLine("intellisense parsing interface started " + System.Convert.ToInt32((DateTime.Now - start_time).TotalMilliseconds));
if (is_namespace)
{
parse_only_class_headers = true;
_unit_module.interface_part.visit(this);
parse_only_class_headers = false;
parse_only_method_headers = true;
_unit_module.interface_part.visit(this);
parse_only_method_headers = false;
parse_only_method_bodies = true;
_unit_module.interface_part.visit(this);
}
else
_unit_module.interface_part.visit(this);
System.Diagnostics.Debug.WriteLine("intellisense parsing interface ended " + System.Convert.ToInt32((DateTime.Now - start_time).TotalMilliseconds));
start_time = DateTime.Now;
System.Diagnostics.Debug.WriteLine("intellisense parsing implementation started " + System.Convert.ToInt32((DateTime.Now - start_time).TotalMilliseconds));
if (_unit_module.implementation_part != null)
_unit_module.implementation_part.visit(this);
System.Diagnostics.Debug.WriteLine("intellisense parsing implementation ended " + System.Convert.ToInt32((DateTime.Now - start_time).TotalMilliseconds));
if (_unit_module.initialization_part != null)
{
SymScope tmp = cur_scope;
SymScope stmt_scope = new BlockScope(cur_scope);
cur_scope.AddName("$block_scope", stmt_scope);
if (_unit_module.initialization_part.left_logical_bracket != null)
{
stmt_scope.loc = get_location(_unit_module.initialization_part.left_logical_bracket.source_context.Merge(_unit_module.initialization_part.right_logical_bracket.source_context));
}
else
{
stmt_scope.loc = get_location(_unit_module.initialization_part.source_context);
}
cur_scope = stmt_scope;
_unit_module.initialization_part.visit(this);
cur_scope = tmp;
}
if (_unit_module.finalization_part != null)
{
SymScope tmp = cur_scope;
SymScope stmt_scope = new BlockScope(cur_scope);
cur_scope.AddName("$block_scope", stmt_scope);
if (_unit_module.finalization_part.left_logical_bracket != null)
{
stmt_scope.loc = get_location(_unit_module.finalization_part.left_logical_bracket.source_context.Merge(_unit_module.finalization_part.right_logical_bracket.source_context));
}
else
{
stmt_scope.loc = get_location(_unit_module.finalization_part.source_context);
}
cur_scope = stmt_scope;
_unit_module.finalization_part.visit(this);
cur_scope = tmp;
}
}
private Dictionary<string, HashSet<string>> CollectNamesFromUsedUnits(SymScope currentUnitScope)
{
var namesFromUsedUnits = new Dictionary<string, HashSet<string>>();
foreach (var unitScope in currentUnitScope.used_units)
{
if (unitScope is InterfaceUnitScope interfaceScope)
{
namesFromUsedUnits.Add(unitScope.Name, new HashSet<string>());
foreach (var symbol in unitScope.symbol_table)
{
var scopesOrScope = ((DictionaryEntry)symbol).Value;
string name;
if (scopesOrScope is List<SymScope> scopes)
{
name = scopes[0].Name;
}
else
{
name = ((SymScope)scopesOrScope).Name;
}
if (name == unitScope.Name)
continue;
namesFromUsedUnits[unitScope.Name].Add(name);
}
}
}
return namesFromUsedUnits;
}
public string get_assembly_path(string name, string CompFile)
{
string fname = (string.Format("{0}\\{1}",System.IO.Path.GetDirectoryName(CompFile), name)).ToLower();
if (System.IO.File.Exists(fname))
return fname;
return Compiler.get_assembly_path(name,true);
}
PascalABCCompiler.TreeRealization.using_namespace_list unl = new PascalABCCompiler.TreeRealization.using_namespace_list();
public SymScope cur_scope;
public static string FindPCUFileName(string UnitName, string curr_path, bool caseSensitiveSearch)
{
return CodeCompletionController.comp.FindPCUFileName(UnitName, curr_path, out _, caseSensitiveSearch);
}
private void AddStandardUnit(string unitName, bool caseSensitiveSearch, bool addStandardUnitNameToCurrentScope)
{
string unitPath = CodeCompletionNameHelper.FindSourceFileName(unitName, out _, caseSensitiveSearch);
if (unitPath != null)
{
DomConverter dc = CodeCompletionController.comp_modules[unitPath] as DomConverter;
if (dc == null)
{
CodeCompletionController ccc = new CodeCompletionController();
dc = ccc.CompileAllIfNeed(unitPath, true);
//dc.CompileAllIfNeed(unit_name);
if (dc.visitor != null && dc.visitor.entry_scope != null)
{
dc.visitor.entry_scope.InitAssemblies();
entry_scope.AddUsedUnit(dc.visitor.entry_scope);
// стандартные типы добавляются в PABCSystem - это не требуется, поскольку они там уже есть после Compile EVA
//if (unitName == StringConstants.pascalSystemUnitName)
// add_standart_types(dc.visitor.entry_scope);
//get_standart_types(dc.stv);
// для SPython, например, не нужно подсказывать стандартные модули в программе, это условие для этого EVA
if (addStandardUnitNameToCurrentScope)
{
entry_scope.AddName(unitName, dc.visitor.entry_scope);
}
else
{
dc.visitor.entry_scope.AddName(unitName, dc.visitor.entry_scope);
}
}
CodeCompletionController.comp_modules[unitPath] = dc;
}
else if (dc.visitor != null && dc.visitor.entry_scope != null)
{
dc.visitor.entry_scope.InitAssemblies();
entry_scope.AddUsedUnit(dc.visitor.entry_scope);
//get_standart_types(dc.stv);
if (addStandardUnitNameToCurrentScope)
{
entry_scope.AddName(unitName, dc.visitor.entry_scope);
}
}
}
}
private void CompileUsedUnitOrNamespace(unit_or_namespace s, string curr_path,
SymScope cur_scope, Hashtable ns_cache, using_namespace_list unl, bool caseSensitiveSearch)
{
try
{
if (s is uses_unit_in uui)
{
string unit_name = CodeCompletionNameHelper.FindSourceFileName(uui.in_file.Value, out _, caseSensitiveSearch, curr_path);
if (unit_name == null) throw new InvalidOperationException($"uses '{uui.in_file.Value}';");
CompileUnit(unit_name, cur_scope);
}
else
{
string usedName = "";
if (s.name.idents.Count == 1)
{
usedName = s.name.idents[0].name;
// на случай имен модулей, отличающихся от имен файла EVA
string realName = GetRealNameForModule(usedName);
string pcu_unit_name = FindPCUFileName(realName, curr_path, caseSensitiveSearch);
string unit_name = CodeCompletionNameHelper.FindSourceFileName(realName, out _, caseSensitiveSearch, curr_path);
/*if (pcu_unit_name != null && unit_name != null && string.Compare(System.IO.Path.GetDirectoryName(_program_module.file_name), System.IO.Path.GetDirectoryName(pcu_unit_name), true) == 0
&& string.Compare(System.IO.Path.GetDirectoryName(_program_module.file_name), System.IO.Path.GetDirectoryName(unit_name), true) != 0)
unit_name = null;*/
if (unit_name != null)
{
CompileUnit(unit_name, cur_scope);
}
else
{
unit_name = pcu_unit_name;
if (unit_name != null)
{
IntellisensePCUReader pcu_rdr = new IntellisensePCUReader();
SymScope ss = pcu_rdr.GetUnit(unit_name);
UnitDocCache.Load(ss, unit_name);
cur_scope.AddUsedUnit(ss);
cur_scope.AddName(usedName, ss);
}
else
{
// У пространств имен Паскаля может быть разделение по точке, но этот случай не учитывается в ветке else EVA
if (CodeCompletionController.pabcNamespaces.ContainsKey(usedName.ToLower()))
{
InterfaceUnitScope un_scope = CodeCompletionController.pabcNamespaces[usedName.ToLower()];
cur_scope.AddUsedUnit(un_scope);
cur_scope.AddName(usedName, un_scope);
}
else if (PascalABCCompiler.NetHelper.NetHelper.IsNetNamespace(usedName))
{
var ns_scope = new NamespaceScope(usedName);
ns_cache[usedName] = usedName;
cur_scope.AddName(usedName, ns_scope);
cur_scope.AddUsedUnit(ns_scope);
}
// Не поддерживается в основном компиляторе EVA
/*else if (PascalABCCompiler.NetHelper.NetHelper.IsType(usedName) && allow_import_types)
{
Type t = PascalABCCompiler.NetHelper.NetHelper.FindType(usedName);
cur_scope.AddUsedUnit(new NamespaceTypeScope(TypeTable.get_compiled_type(new SymInfo(t.Name, SymbolKind.Class, t.FullName), t)));
}*/
}
}
}
else
{
usedName = string.Join(".", s.name.idents.Select(id => id.name));
cur_scope.AddUsedUnit(new NamespaceScope(usedName));
}
unl.AddElement(new using_namespace(usedName));
}
}
catch (Exception e)
{
#if DEBUG
File.AppendAllText("log.txt", e.Message + Environment.NewLine + e.StackTrace + Environment.NewLine);
#endif
}
}
private void CompileUnit(string unit_name, SymScope cur_scope)
{
var dc = (DomConverter)CodeCompletionController.comp_modules[unit_name]
?? new CodeCompletionController().CompileAllIfNeed(unit_name, true);
if (dc.visitor != null)
{
dc.visitor.entry_scope.InitAssemblies();
cur_scope.AddUsedUnit(dc.visitor.entry_scope);
cur_scope.AddName(Path.GetFileNameWithoutExtension(unit_name), dc.visitor.entry_scope);
}
}
private string GetRealNameForModule(string nameInUses)
{
// для такого пока не реализована поддержка в конверторах синтаксического дерева EVA
/*var specialModulesAliases = Languages.Facade.LanguageProvider.Instance.Languages.SelectMany(l =>
l.LanguageInformation.SpecialModulesAliases != null ? l.LanguageInformation.SpecialModulesAliases : new Dictionary<string, string>());
if (specialModulesAliases.Count() > 0)
{
var foundPair = specialModulesAliases.FirstOrDefault(kv => kv.Key == str);
if (!foundPair.Equals(default(KeyValuePair<string, string>)))
{
realName = foundPair.Value;
}
}*/
if (currentUnitLanguage.LanguageInformation.SpecialModulesAliases != null
&& currentUnitLanguage.LanguageInformation.SpecialModulesAliases.TryGetValue(nameInUses, out var realName))
return realName;
return nameInUses;
}
private void CompileImportedUnit(string importedName, statement importStatement, as_statement_list asStatementsList, string curr_path,
SymScope cur_scope, using_namespace_list unl, bool caseSensitiveSearch)
{
try
{
// на случай имен модулей, отличающихся от имен файла EVA
string realName = GetRealNameForModule(importedName);
string pcu_unit_name = FindPCUFileName(realName, curr_path, caseSensitiveSearch);
string unit_name = CodeCompletionNameHelper.FindSourceFileName(realName, out _, caseSensitiveSearch, curr_path);
if (unit_name != null)
{
DomConverter dc = (DomConverter)CodeCompletionController.comp_modules[unit_name]
?? new CodeCompletionController().CompileAllIfNeed(unit_name, true);
if (dc.visitor != null)
{
dc.visitor.entry_scope.InitAssemblies();
AddImportedNamesToCurScope(importStatement, asStatementsList, cur_scope, importedName, dc.visitor.entry_scope);
}
}
else
{
unit_name = pcu_unit_name;
if (unit_name != null)
{
IntellisensePCUReader pcu_rdr = new IntellisensePCUReader();
SymScope ss = pcu_rdr.GetUnit(unit_name);
UnitDocCache.Load(ss, unit_name);
AddImportedNamesToCurScope(importStatement, asStatementsList, cur_scope, importedName, ss);
}
}
unl.AddElement(new using_namespace(importedName));
}
catch (Exception e)
{
#if DEBUG
File.AppendAllText("log.txt", e.Message + Environment.NewLine + e.StackTrace + Environment.NewLine);
#endif
}
}
private static void AddImportedNamesToCurScope(statement importStatement, as_statement_list asStatementsList, SymScope currentScope, string importedModuleName, SymScope importedModuleScope)
{
int fictiveUnitIndex = currentScope.used_units.FindIndex(unit => unit.Name == importedModuleName);
SymScope fictiveUnit = fictiveUnitIndex > -1 ? currentScope.used_units[fictiveUnitIndex] : null;
if (importStatement is import_statement import)
{
if (fictiveUnit == null)
{
fictiveUnit = new InterfaceUnitScope(new SymInfo(importedModuleName, SymbolKind.Namespace, ""), null);
currentScope.AddUsedUnit(fictiveUnit);
}
string aliasName = asStatementsList.as_statements.Find(st => st.real_name.name == importedModuleName).alias.name;
SymScope moduleScope = importedModuleScope.CopyWithNewSymInfo();
fictiveUnit.AddName(aliasName, moduleScope);
// Поправляем реальное имя, которое портится в InterfaceUnitScope.AddName() EVA
moduleScope.si.name = importedModuleName;
moduleScope.si.aliasName = aliasName;
}
else if (importStatement is from_import_statement fromImport)
{
if (fromImport.is_star)
{
if (fictiveUnit != null)
currentScope.used_units.RemoveAt(fictiveUnitIndex);
currentScope.AddUsedUnit(importedModuleScope);
}
else
{
if (fictiveUnit == null)
{
fictiveUnit = new InterfaceUnitScope(new SymInfo(importedModuleName, SymbolKind.Namespace, ""), null);
currentScope.AddUsedUnit(fictiveUnit);
}
foreach (var asStatement in asStatementsList.as_statements)
{
SymScope nameScope = importedModuleScope.FindNameOnlyInType(asStatement.real_name.name)?.CopyWithNewSymInfo();
if (nameScope != null)
{
fictiveUnit.AddName(asStatement.alias.name, nameScope);
// Поправляем реальное имя, которое портится в InterfaceUnitScope.AddName() EVA
nameScope.si.name = asStatement.real_name.name;
nameScope.si.aliasName = asStatement.alias.name;
}
}
}
}
}
public override void visit(program_module _program_module)
{
//Assembly _as = System.Reflection.Assembly.LoadFrom(get_assembly_path("mscorlib.dll",_program_module.file_name));
string path = get_assembly_path("mscorlib.dll", _program_module.file_name);
System.Reflection.Assembly _as = PascalABCCompiler.NetHelper.NetHelper.LoadAssembly(path);
List<string> namespaces = new List<string>();
PascalABCCompiler.NetHelper.NetHelper.init_namespaces(_as);
AssemblyDocCache.Load(_as, path);
currentUnitLanguage = Languages.Facade.LanguageProvider.Instance.SelectLanguageByName(_program_module.Language);
// Пока что добавили возможость грубо отключить добавление NET пространств имен по умолчанию здесь EVA
if (currentUnitLanguage.LanguageInformation.AddStandardNetNamespacesToUserScope)
namespaces.AddRange(PascalABCCompiler.NetHelper.NetHelper.GetNamespaces(_as));
//List<Scope> netScopes = new List<Scope>();
//PascalABCCompiler.NetHelper.NetScope ns=new PascalABCCompiler.NetHelper.NetScope(unl,_as,tcst);
InterfaceUnitScope unit_scope = null;
cur_scope = unit_scope = new InterfaceUnitScope(new SymInfo(_program_module.program_name != null ? _program_module.program_name.prog_name.name : "", SymbolKind.Namespace, "program"), null);
CodeCompletionController.comp_modules[_program_module.file_name] = this.converter;
Stack<Position> regions_stack = new Stack<Position>();
if (CodeCompletionController.comp != null && CodeCompletionController.comp.CompilerOptions.CurrentProject != null && CodeCompletionController.comp.CompilerOptions.CurrentProject.ContainsSourceFile(_program_module.file_name))
{
IReferenceInfo[] refs = CodeCompletionController.comp.CompilerOptions.CurrentProject.References;
if (_program_module.compiler_directives == null)
_program_module.compiler_directives = new List<PascalABCCompiler.SyntaxTree.compiler_directive>();
foreach (IReferenceInfo ri in refs)
{
_program_module.compiler_directives.Add
(new PascalABCCompiler.SyntaxTree.compiler_directive(new token_info("reference"), new token_info(ri.FullAssemblyName)));
}
}
List<string> included_files = new List<string>();
if (_program_module.compiler_directives != null)
foreach (PascalABCCompiler.SyntaxTree.compiler_directive dir in _program_module.compiler_directives)
{
#if DEBUG
// SSM test 05.08.17
if (dir == null)
File.AppendAllText("log.txt", "dir == null" + Environment.NewLine + _program_module.compiler_directives.Count + Environment.NewLine);
#endif
if (dir.Name.text.ToLower() == "reference")
{
try
{
//System.Reflection.Assembly assm = System.Reflection.Assembly.LoadFrom(get_assembly_path(dir.Directive.text,_program_module.file_name));
path = get_assembly_path(dir.Directive.text, _program_module.file_name);
System.Reflection.Assembly assm = PascalABCCompiler.NetHelper.NetHelper.LoadAssembly(path);
if (assm != null)
{
PascalABCCompiler.NetHelper.NetHelper.init_namespaces(assm);
AssemblyDocCache.Load(assm, path);
namespaces.AddRange(PascalABCCompiler.NetHelper.NetHelper.GetNamespaces(assm));
unit_scope.AddReferencedAssembly(assm);
}
}
catch (Exception e)
{
}
}
else
if (dir.Name.text.ToLower() == "region")
{
if (cur_scope.regions == null)
cur_scope.regions = new List<Position>();
regions_stack.Push(new Position(dir.source_context.begin_position.line_num, dir.source_context.begin_position.column_num, dir.source_context.end_position.line_num, dir.source_context.end_position.column_num, dir.source_context.FileName, dir.Directive.text));
}
else if (dir.Name.text.ToLower() == "endregion")
{
if (regions_stack.Count > 0)
{
Position pos = regions_stack.Pop();
if (cur_scope.regions != null)
{
cur_scope.regions.Add(new Position(pos.line, pos.column - 1, dir.source_context.end_position.line_num, dir.source_context.end_position.column_num, pos.file_name, pos.fold_text));
}
}
}
else if (dir.Name.text.ToLower() == "includenamespace")
{
string directive = dir.Directive.text.Replace('/', Path.DirectorySeparatorChar).Replace('\\', Path.DirectorySeparatorChar);
Compiler.TryThrowInvalidPath(directive, dir.source_context);
if (directive == "*.pas" || directive.EndsWith(Path.DirectorySeparatorChar + "*.pas"))
{
string udir = Path.Combine(Path.GetDirectoryName(_program_module.file_name), directive.Replace(Path.DirectorySeparatorChar + "*.pas", ""));
foreach (string file in Directory.EnumerateFiles(udir, "*.pas"))
included_files.Add(file);
}
else
included_files.Add(Path.Combine(Path.GetDirectoryName(_program_module.file_name), directive));
}
}
doc = new document(_program_module.file_name);
cur_scope.loc = get_location(_program_module);
cur_scope.file_name = _program_module.file_name;
entry_scope = cur_scope;
if (_program_module.program_name != null)
{
cur_scope.head_loc = get_location(_program_module.program_name);
cur_scope.AddName(_program_module.program_name.prog_name.name, cur_scope);
}
Hashtable ns_cache = new Hashtable(StringComparer.CurrentCultureIgnoreCase);
foreach (string file in included_files)
{
DomConverter dc = CodeCompletionController.comp_modules[file] as DomConverter;
if (dc == null)
{
dc = new CodeCompletionController().CompileAllIfNeed(file, true);
}
if (dc.visitor != null)
{
}
}
if (currentUnitLanguage.ApplySyntaxTreeConvertersForIntellisense)
{
foreach (ISyntaxTreeConverter converter in currentUnitLanguage.SyntaxTreeConverters)
{
_program_module = (program_module)converter.Convert(_program_module, true);
}
}
List<string> usedUnitsNames = new List<string>();
if (_program_module.used_units != null)
{
usedUnitsNames = _program_module.used_units.units.Select(unit => unit.name.idents[0].name).ToList();
unit_scope.uses_source_range = get_location(_program_module.used_units);
// компиляция зависимостей из секции uses
for (int j = _program_module.used_units.units.Count - 1; j >= 0; j--)
{
unit_or_namespace s = _program_module.used_units.units[j];
CompileUsedUnitOrNamespace(s, Path.GetDirectoryName(_program_module.file_name),
cur_scope, ns_cache, unl, currentUnitLanguage.CaseSensitive);
}
}
// компиляция зависимостей из конструкций import и from import
if (cur_scope != null && _program_module.program_block.program_code != null)
{
CompileImportedDependencies(_program_module.program_block.program_code, _program_module.file_name, ns_cache, usedUnitsNames, currentUnitLanguage.CaseSensitive);
}
StringComparer comparer = currentUnitLanguage.CaseSensitive ? StringComparer.Ordinal : StringComparer.OrdinalIgnoreCase;
// Добавление всех стандартных модулей EVA
foreach (var unitName in currentUnitLanguage.SystemUnitNames.Except(usedUnitsNames, comparer))
{
AddStandardUnit(unitName, currentUnitLanguage.CaseSensitive, currentUnitLanguage.LanguageInformation.AddStandardUnitNamesToUserScope);
}
foreach (string s in namespaces)
{
if (!ns_cache.ContainsKey(s))
{
NamespaceScope ns_scope = new NamespaceScope(s);
cur_scope.AddName(s, ns_scope);
ns_cache[s] = s;
}
}
if (currentUnitLanguage.ApplySyntaxTreeConvertersForIntellisense)
{
var namesFromUsedUnits = CollectNamesFromUsedUnits(cur_scope);
var artifacts = new CompilationArtifactsUsedBySyntaxConverters(namesFromUsedUnits);
foreach (ISyntaxTreeConverter converter in currentUnitLanguage.SyntaxTreeConverters)
{
_program_module = (program_module)converter.ConvertAfterUsedModulesCompilation(_program_module, true, in artifacts);
}
}
//PascalABCCompiler.TreeRealization.common_type_node ctn = new ;
if (_program_module.program_block.defs != null)
foreach (declaration decl in _program_module.program_block.defs.defs)
{
try
{
decl.visit(this);
}
catch (Exception e)
{
#if DEBUG
File.AppendAllText("log.txt", e.Message + Environment.NewLine + e.StackTrace + Environment.NewLine);
#endif
}
}
if (cur_scope != null && _program_module.program_block.program_code != null)
{
var left_line_num = _program_module.program_block.program_code.left_logical_bracket.source_context != null ? _program_module.program_block.program_code.left_logical_bracket.source_context.end_position.line_num : 1;
var left_column_num = _program_module.program_block.program_code.left_logical_bracket.source_context != null ? _program_module.program_block.program_code.left_logical_bracket.source_context.end_position.column_num : 1;
var right_line_num = _program_module.program_block.program_code.source_context.end_position.line_num;
var right_column_num = _program_module.program_block.program_code.source_context.end_position.column_num;
if (_program_module.program_block.program_code.right_logical_bracket == null || _program_module.program_block.program_code.right_logical_bracket.source_context == null)
{
right_line_num += 2;
right_column_num += 2;
_program_module.program_block.program_code.source_context = new SourceContext(_program_module.program_block.program_code.source_context.begin_position.line_num,
_program_module.program_block.program_code.source_context.begin_position.column_num, right_line_num, right_column_num);
}
cur_scope.body_loc = new location(left_line_num,
left_column_num,
right_line_num, right_column_num,
doc);
cur_scope.loc = new location(cur_scope.loc.begin_line_num, cur_scope.loc.begin_column_num, right_line_num, right_column_num, doc);
_program_module.program_block.program_code.visit(this);
}
}
private void CompileImportedDependencies(statement_list statementList, string fileName, Hashtable ns_cache, List<string> usedUnitNames, bool caseSensitiveSearch)
{
var importStatements = statementList.list.Where(st => st is import_statement || st is from_import_statement);
foreach (var importStatement in importStatements.Reverse())
{
if (importStatement is import_statement import)
{
foreach (var unitNode in import.modules_names.as_statements.Select(st => st.real_name).Reverse())
{
CompileImportedUnit(unitNode.name, import, import.modules_names,
Path.GetDirectoryName(fileName),
cur_scope, unl, caseSensitiveSearch);
usedUnitNames.Add(unitNode.name);
}
}
else if (importStatement is from_import_statement fromImport)
{
CompileImportedUnit(fromImport.module_name.name, fromImport, fromImport.imported_names,
Path.GetDirectoryName(fileName),
cur_scope, unl, caseSensitiveSearch);
usedUnitNames.Add(fromImport.module_name.name);
}
}
}
private void add_standart_types(SymScope cur_scope, ILanguageInformation languageInfo)
{
var standardTypesData = new List<Tuple<PascalABCCompiler.Parsers.KeywordKind, CompiledScope>>()
{
Tuple.Create(PascalABCCompiler.Parsers.KeywordKind.ObjectType, TypeTable.obj_type),
Tuple.Create(PascalABCCompiler.Parsers.KeywordKind.IntType, TypeTable.int_type),
Tuple.Create(PascalABCCompiler.Parsers.KeywordKind.DoubleType, TypeTable.real_type),
Tuple.Create(PascalABCCompiler.Parsers.KeywordKind.StringType, TypeTable.string_type),
Tuple.Create(PascalABCCompiler.Parsers.KeywordKind.CharType, TypeTable.char_type),
Tuple.Create(PascalABCCompiler.Parsers.KeywordKind.BoolType, TypeTable.bool_type),
Tuple.Create(PascalABCCompiler.Parsers.KeywordKind.ByteType, TypeTable.byte_type),
Tuple.Create(PascalABCCompiler.Parsers.KeywordKind.ShortType, TypeTable.int16_type),
Tuple.Create(PascalABCCompiler.Parsers.KeywordKind.SByteType, TypeTable.sbyte_type),
Tuple.Create(PascalABCCompiler.Parsers.KeywordKind.UShortType, TypeTable.uint16_type),
Tuple.Create(PascalABCCompiler.Parsers.KeywordKind.UIntType, TypeTable.uint32_type),
Tuple.Create(PascalABCCompiler.Parsers.KeywordKind.Int64Type, TypeTable.int64_type),
Tuple.Create(PascalABCCompiler.Parsers.KeywordKind.UIntType, TypeTable.uint32_type),
Tuple.Create(PascalABCCompiler.Parsers.KeywordKind.UInt64Type, TypeTable.uint64_type),
Tuple.Create(PascalABCCompiler.Parsers.KeywordKind.FloatType, TypeTable.float_type),
Tuple.Create(PascalABCCompiler.Parsers.KeywordKind.PointerType, TypeTable.ptr_type)
};
foreach (var data in standardTypesData)
{
var keywordKind = data.Item1;
var type = data.Item2;
var type_name = languageInfo.GetStandardTypeByKeyword(keywordKind);
if (type_name != null)
{
var typeClone = TypeTable.StandardTypeClone(type);
cur_scope.AddName(type_name, typeClone);
}
}
}
public void AddPascalStandardProcedures()
{
ProcScope ps = new ProcScope(StringConstants.set_length_procedure_name, null);
ps.AddParameter(new ElementScope(new SymInfo("arr", SymbolKind.Parameter, "arr"), new ArrayScope(), null, ps));
ps.parameters[0].param_kind = parametr_kind.var_parametr;
ps.AddParameter(new ElementScope(new SymInfo("length", SymbolKind.Parameter, "length"), TypeTable.int_type, null, ps));
ps.Complete();
cur_scope.AddName(StringConstants.set_length_procedure_name, ps);
cur_scope.AddName(StringConstants.true_const_name, new ElementScope(new SymInfo(StringConstants.true_const_name, SymbolKind.Constant, StringConstants.true_const_name), TypeTable.bool_type, true, null));
cur_scope.AddName(StringConstants.false_const_name, new ElementScope(new SymInfo(StringConstants.false_const_name, SymbolKind.Constant, StringConstants.false_const_name), TypeTable.bool_type, false, null));
ps = new ProcScope(StringConstants.new_procedure_name, null);
ElementScope prm = new ElementScope(new SymInfo("p", SymbolKind.Parameter, "p"), TypeTable.ptr_type, null, ps);
prm.param_kind = parametr_kind.var_parametr;
ps.AddParameter(prm);
ps.Complete();
cur_scope.AddName(StringConstants.new_procedure_name, ps);
ps = new ProcScope(StringConstants.dispose_procedure_name, null);
prm = new ElementScope(new SymInfo("p", SymbolKind.Parameter, "p"), TypeTable.ptr_type, null, ps);
prm.param_kind = parametr_kind.var_parametr;
ps.AddParameter(prm);
ps.Complete();
cur_scope.AddName(StringConstants.dispose_procedure_name, ps);
ps = new ProcScope(StringConstants.IncProcedure, null);
prm = new ElementScope(new SymInfo("i", SymbolKind.Parameter, "i"), TypeTable.int16_type, null, ps);
prm.param_kind = parametr_kind.var_parametr;
ps.AddParameter(prm);
ps.Complete();
ps.si.not_include = true;
cur_scope.AddName(StringConstants.IncProcedure, ps);
ps = new ProcScope(StringConstants.IncProcedure, null);
prm = new ElementScope(new SymInfo("i", SymbolKind.Parameter, "i"), TypeTable.uint16_type, null, ps);
prm.param_kind = parametr_kind.var_parametr;
ps.AddParameter(prm);
ps.Complete();
ps.si.not_include = true;
cur_scope.AddName(StringConstants.IncProcedure, ps);
ps = new ProcScope(StringConstants.IncProcedure, null);
prm = new ElementScope(new SymInfo("i", SymbolKind.Parameter, "i"), TypeTable.sbyte_type, null, ps);
prm.param_kind = parametr_kind.var_parametr;
ps.AddParameter(prm);
ps.Complete();
ps.si.not_include = true;
cur_scope.AddName(StringConstants.IncProcedure, ps);
ps = new ProcScope(StringConstants.IncProcedure, null);
prm = new ElementScope(new SymInfo("i", SymbolKind.Parameter, "i"), TypeTable.int64_type, null, ps);
prm.param_kind = parametr_kind.var_parametr;
ps.AddParameter(prm);
ps.Complete();
ps.si.not_include = true;
cur_scope.AddName(StringConstants.IncProcedure, ps);
ps = new ProcScope(StringConstants.IncProcedure, null);
prm = new ElementScope(new SymInfo("i", SymbolKind.Parameter, "i"), TypeTable.uint64_type, null, ps);
prm.param_kind = parametr_kind.var_parametr;
ps.AddParameter(prm);
ps.Complete();
ps.si.not_include = true;
cur_scope.AddName(StringConstants.IncProcedure, ps);
ps = new ProcScope(StringConstants.IncProcedure, null);
prm = new ElementScope(new SymInfo("i", SymbolKind.Parameter, "i"), TypeTable.uint32_type, null, ps);
prm.param_kind = parametr_kind.var_parametr;
ps.AddParameter(prm);
ps.Complete();
ps.si.not_include = true;
cur_scope.AddName(StringConstants.IncProcedure, ps);
}
public override void visit(hex_constant _hex_constant)
{
//throw new Exception("The method or operation is not implemented.");
returned_scope = TypeTable.uint64_type;//entry_scope.FindName(StringConstants.ulong_type_name);
cnst_val.prim_val = _hex_constant.val;
}
public override void visit(get_address _get_address)
{
//throw new Exception("The method or operation is not implemented.");
_get_address.address_of.visit(this);
if (returned_scope != null && returned_scope is TypeScope)
{
returned_scope = new PointerScope(returned_scope as TypeScope);
}
else returned_scope = null;
}
public override void visit(case_variant _case_variant)
{
//throw new Exception("The method or operation is not implemented.");
}
public override void visit(compiler_directive_if _compiler_directive_if)
{
}
public override void visit(compiler_directive_list _compiler_directive_list)
{
}
public override void visit(case_node _case_node)
{
if (_case_node.conditions != null)
for (int i = 0; i < _case_node.conditions.variants.Count; i++)
_case_node.conditions.variants[i].exec_if_true.visit(this);
if (_case_node.else_statement != null)
_case_node.else_statement.visit(this);
}
public override void visit(method_name _method_name)
{
if (_method_name.meth_name is operator_name_ident)
_method_name.meth_name.visit(this);
else
meth_name = _method_name.meth_name.name;
}
public override void visit(dot_node _dot_node)
{
bool tmp = search_all;
search_all = false;
_dot_node.left.visit(this);
search_all = tmp;
if (returned_scope != null)
{
if (_dot_node.right is ident)
{
if (!search_all)
{
if (returned_scope is NamespaceScope)
{
returned_scope = returned_scope.FindNameOnlyInType((_dot_node.right as ident).name);
return;
}
if (returned_scope is InterfaceUnitScope)
{
returned_scope = returned_scope.FindNameOnlyInType((_dot_node.right as ident).name);
}
else
{
TypeScope ts = returned_scope as TypeScope;
if (returned_scope is ProcScope)
ts = (returned_scope as ProcScope).return_type;
if (ts != null)
returned_scope = ts.FindNameOnlyInType((_dot_node.right as ident).name);
if (returned_scope == null)
{
List<ProcScope> meths = entry_scope.GetExtensionMethods((_dot_node.right as ident).name, ts);
if (meths.Count > 0)
{
method_call mc = new method_call(_dot_node, new expression_list());
search_all = true;
mc.visit(this);
return;
}
}
else if (returned_scope is ProcScope)
{
method_call mc = new method_call(_dot_node, new expression_list());
search_all = true;
mc.visit(this);
return;
}
}
if (returned_scope != null && returned_scope is ProcScope && (returned_scope as ProcScope).return_type != null)
{
ProcScope ps = returned_scope as ProcScope;
if (ps.parameters.Count == 0 || ps.is_extension || ps.parameters[0].param_kind == parametr_kind.params_parametr || ps.parameters[0].cnst_val != null)
returned_scope = ps.return_type;
return;
}
else if (returned_scope is ElementScope)
{
ElementScope es = returned_scope as ElementScope;
this.cnst_val.prim_val = es.cnst_val;
returned_scope = es.sc;
if (es.IsIndexedProperty)
returned_scope = new IndexedPropertyType(es.sc as TypeScope);
return;
}
else if (returned_scope is TypeScope)
is_type = true;
else if (returned_scope is ProcScope && (returned_scope as ProcScope).is_constructor)
{
returned_scope = (returned_scope as ProcScope).declaringType;
return;
}
}
else
{
TypeScope ts = returned_scope as TypeScope;
if (returned_scope is ProcScope)
ts = (returned_scope as ProcScope).return_type;
returned_scopes = returned_scope.FindOverloadNamesOnlyInType((_dot_node.right as ident).name);
if (ts != null)
{
List<ProcScope> meths = entry_scope.GetExtensionMethods((_dot_node.right as ident).name, ts);
if (meths.Count > 0)
{
if (returned_scopes == null)
returned_scopes = new List<SymScope>();
foreach (ProcScope meth in meths)
returned_scopes.Add(meth);
}
}
search_all = false;
}
}
}
}
public override void visit(PascalABCCompiler.SyntaxTree.empty_statement _empty_statement)
{
//throw new Exception("The method or operation is not implemented.");
}
public override void visit(PascalABCCompiler.SyntaxTree.goto_statement _goto_statement)
{
//throw new Exception("The method or operation is not implemented.");
}
public override void visit(PascalABCCompiler.SyntaxTree.labeled_statement _labeled_statement)
{
//throw new Exception("The method or operation is not implemented.");
if (_labeled_statement.to_statement != null)
_labeled_statement.to_statement.visit(this);
}
private bool is_type = false;
public override void visit(with_statement _with_statement)
{
//throw new Exception("The method or operation is not implemented.");
SymScope tmp = cur_scope;
WithScope ws = new WithScope(cur_scope);
for (int i=_with_statement.do_with.expressions.Count-1; i>=0; i--)
{
is_type = false;
_with_statement.do_with.expressions[i].visit(this);
if (returned_scope != null)
{
ws.AddWithScope(returned_scope,is_type);
}
is_type = false;
}
cur_scope.AddName("$with_block",ws);
ws.loc = get_location(_with_statement);
cur_scope = ws;
_with_statement.what_do.visit(this);
cur_scope = tmp;
}
internal static bool is_good_overload(ProcScope ps, List<SymScope> args)
{
if (ps.parameters == null || ps.parameters.Count == 0)
if (args.Count == 0)
return true;
else
return false;
if (args.Count == 0)
if (ps.parameters.Count == 1 && ps.parameters[0].param_kind == parametr_kind.params_parametr)
return true;
else if (ps.IsExtension && ps.parameters.Count == 1)
return true;
else
return false;
if (args.Count == ps.parameters.Count || ps.IsExtension && args.Count == ps.parameters.Count - 1)
{
int off = 0;
if (ps.IsExtension && args.Count == ps.parameters.Count - 1)
off = 1;
for (int i = 0; i < args.Count; i++)
{
if (args[i] is UnknownScope)
continue;
if (!(args[i] is TypeScope))
return false;
TypeScope ts = args[i] as TypeScope;
ElementScope parameter = ps.parameters[i + off];
if (!ts.IsConvertable(parameter.sc as TypeScope))
{
if (parameter.param_kind == parametr_kind.params_parametr)
{
if (!(parameter.sc is TypeScope && (parameter.sc as TypeScope).IsArray && ts.IsConvertable((parameter.sc as TypeScope).elementType)))
return false;
}
else
return false;
}
if (parameter.param_kind == parametr_kind.var_parametr || parameter.param_kind == parametr_kind.const_parametr)
{
TypeScope param_ts = parameter.sc as TypeScope;
if (param_ts is CompiledScope && ps is CompiledMethodScope)
param_ts = param_ts.GetElementType();
if (param_ts == null || !ts.IsEqual(param_ts))
return false;
}
}
return true;
}
else
{
//if (args.Count < ps.parameters.Count)
// return false;
int min_arg_cnt = Math.Min(args.Count, ps.parameters.Count);
for (int i = 0; i < min_arg_cnt; i++)
{
if (!(args[i] is TypeScope))
return false;
TypeScope ts = args[i] as TypeScope;
if (!ts.IsConvertable(ps.parameters[i].sc as TypeScope))
{
if (ps.parameters[i].param_kind == parametr_kind.params_parametr)
{
TypeScope pts = ps.parameters[i].sc as TypeScope;
if (!(pts != null && pts.elementType != null && ts.IsConvertable(pts.elementType)))
return false;
}
else
return false;
}
//else if (args.Count > ps.parameters.Count && i == min_arg_cnt - 1 && ps.parameters[i].param_kind != parametr_kind.params_parametr)
// return false;
}
if (args.Count < ps.parameters.Count)
{
for (int i = min_arg_cnt; i < ps.parameters.Count; i++)
{
if (ps.parameters[i].cnst_val != null || ps.parameters[i].param_kind == parametr_kind.params_parametr && i == ps.parameters.Count - 1)
return true;
else
return false;
}
}
else if (args.Count > ps.parameters.Count)
{
for (int i = min_arg_cnt; i < args.Count; i++)
{
if (ps.parameters[min_arg_cnt - 1].param_kind == parametr_kind.params_parametr)
{
if (!(args[i] is TypeScope))
return false;
TypeScope ts = args[i] as TypeScope;
TypeScope pts = ps.parameters[min_arg_cnt - 1].sc as TypeScope;
if (!(pts != null && pts.elementType != null && ts.IsConvertable(pts.elementType)))
return false;
}
else
return false;
}
}
return true;
}
}
internal static bool is_good_exact_overload(ProcScope ps, List<SymScope> args)
{
if (ps.parameters == null || ps.parameters.Count == 0)
if (args.Count == 0)
return true;
else
return false;
if (args.Count == 0)
if (ps.parameters.Count == 1 && ps.parameters[0].param_kind == parametr_kind.params_parametr)
return true;
else
return false;
if (args.Count == ps.parameters.Count || ps.IsExtension && args.Count == ps.parameters.Count - 1)
{
int off = 0;
if (ps.IsExtension && args.Count == ps.parameters.Count - 1)
off = 1;
for (int i = 0; i < args.Count; i++)
{
if (!(args[i] is TypeScope))
return false;
TypeScope ts = args[i] as TypeScope;
ElementScope parameter = ps.parameters[i + off];
if (ps.IsExtension && i == 0 && ts.IsEqual((parameter.sc as TypeScope).GetElementType()))
continue;
if (!ts.IsEqual(parameter.sc as TypeScope))
{
if (parameter.param_kind == parametr_kind.params_parametr)
{
TypeScope pts = parameter.sc as TypeScope;
if (!(pts != null && pts.elementType != null && ts.IsEqual(pts.elementType)))
return false;
}
else
return false;
}
}
return true;
}
else
{
if (args.Count < ps.parameters.Count)
return false;
int min_arg_cnt = Math.Min(args.Count, ps.parameters.Count);
for (int i = 0; i < min_arg_cnt; i++)
{
if (!(args[i] is TypeScope))
return false;
TypeScope ts = args[i] as TypeScope;
if (!ts.IsEqual(ps.parameters[i].sc as TypeScope))
{
if (ps.parameters[i].param_kind == parametr_kind.params_parametr)
{
TypeScope pts = ps.parameters[i].sc as TypeScope;
if (!(pts != null && pts.elementType != null && ts.IsEqual(pts.elementType)))
return false;
}
else
return false;
}
else if (i == ps.parameters.Count - 1 && ps.parameters[i].param_kind != parametr_kind.params_parametr)
return false;
}
return true;
}
}
private SymScope[] selected_methods = null;
private bool disable_lambda_compilation = false;
private ProcScope select_method(SymScope[] meths, TypeScope tleft, TypeScope tright, TypeScope obj, bool obj_instanced, List<SymScope> arg_types, params expression[] args)
{
if (arg_types == null)
arg_types = new List<SymScope>();
List<TypeScope> arg_types2 = new List<TypeScope>();
SymScope[] saved_selected_methods = selected_methods;
selected_methods = meths;
if (arg_types.Count > 0)
{
foreach (TypeScope ts in arg_types)
arg_types2.Add(ts);
}
else if (tleft != null || tright != null)
{
if (tleft != null)
{
arg_types.Add(tleft);
arg_types2.Add(tleft);
}
if (tright != null)
{
arg_types.Add(tright);
arg_types2.Add(tright);
}
}
else if (args != null)
{
bool tmp_disable_lambda_compilation = disable_lambda_compilation;
disable_lambda_compilation = true;
foreach (expression e in args)
{
e.visit(this);
returned_scopes.Clear();
arg_types.Add(returned_scope);
arg_types2.Add(returned_scope as TypeScope);
}
disable_lambda_compilation = false;
disable_lambda_compilation = tmp_disable_lambda_compilation;
}
selected_methods = saved_selected_methods;
List<ProcScope> good_procs = new List<ProcScope>();
for (int i = 0; i < meths.Length; i++)
{
if (meths[i] is ProcScope)
{
if (is_good_overload(meths[i] as ProcScope, arg_types))
good_procs.Add(meths[i] as ProcScope);
}
else if (meths[i] is ProcType)
{
if (is_good_overload((meths[i] as ProcType).target, arg_types))
good_procs.Add((meths[i] as ProcType).target);
}
}
if (good_procs.Count > 1)
for (int i = 0; i < good_procs.Count; i++)
if (DomSyntaxTreeVisitor.is_good_exact_overload(good_procs[i] as ProcScope, arg_types))
return good_procs[i].GetInstance(arg_types2);
if (good_procs.Count == 0)
{
for (int i = 0; i < meths.Length; i++)
{
if (meths[i] is ProcScope)
{
if (obj != null && !(meths[i] as ProcScope).IsStatic)
{
good_procs.Add(meths[i] as ProcScope);
}
}
}
}
/*if (good_procs.Count == 0)
{
for (int i = 0; i < meths.Length; i++)
{
if (meths[i] is ProcScope)
{
if ((meths[i] as ProcScope).parameters.Count == arg_types.Count)
{
good_procs.Add(meths[i] as ProcScope);
break;
}
}
}
}*/
if (good_procs.Count > 0)
{
if (obj != null)
{
if (!obj_instanced && obj.GetElementType() != null && good_procs[0].IsExtension && !(good_procs[0].parameters[0].sc is TemplateParameterScope))
obj = obj.GetElementType();
arg_types2.Insert(0, obj);
arg_types.Insert(0, obj);
for (int i = 0; i < good_procs.Count; i++)
if (DomSyntaxTreeVisitor.is_good_exact_overload(good_procs[i] as ProcScope, arg_types))
return good_procs[i].GetInstance(arg_types2);
}
return good_procs[0].GetInstance(arg_types2);
}
return null;
}
public override void visit(method_call _method_call)
{
if (method_call_cache.ContainsKey(_method_call))
{
returned_scope = method_call_cache[_method_call];
return;
}
search_all = true;
returned_scope = null;
_method_call.dereferencing_value.visit(this);
search_all = false;
this.cnst_val.prim_val = null;
SymScope[] names = returned_scopes.ToArray();
List<expression> parameters = new List<expression>();
TypeScope obj = null;
bool obj_instanced = false;
if (names.Length > 0 && names[0] is TypeScope)
{
returned_scope = names[0];
method_call_cache.Add(_method_call, returned_scope);
return;
}
foreach (SymScope ss in names)
{
if (ss is ProcScope && (ss as ProcScope).is_extension)
{
ProcScope proc = ss as ProcScope;
if (_method_call.dereferencing_value is dot_node)
{
(_method_call.dereferencing_value as dot_node).left.visit(this);
obj = returned_scope as TypeScope;
if (obj != null && proc.parameters != null && proc.parameters.Count > 0 && !(proc.parameters[0].sc is TemplateParameterScope || proc.parameters[0].sc is UnknownScope))
{
TypeScope param_type = proc.parameters[0].sc as TypeScope;
if (obj.implemented_interfaces != null)
{
foreach (TypeScope interf in obj.implemented_interfaces)
{
if (interf.original_type != null && param_type.original_type != null && interf.original_type == param_type.original_type)
{
List<TypeScope> generic_args = interf.GetInstances();
if (generic_args != null && generic_args.Count > 0)
{
obj = generic_args[0];
obj_instanced = true;
}
}
}
}
}
}
}
}
if (_method_call.parameters != null)
{
parameters.AddRange(_method_call.parameters.expressions);
}
List<TypeScope> lambda_types = new List<TypeScope>();
List<SymScope> param_types = new List<SymScope>();
ProcScope ps = select_method(names, null, null, obj, obj_instanced, param_types, parameters.ToArray());
bool has_lambda = false;
if (_method_call.parameters != null && ps != null)
for (int i = 0; i < _method_call.parameters.expressions.Count; i++)
{
expression e = _method_call.parameters.expressions[i];
if (e is function_lambda_definition)
{
TypeScope tmp_awaitedProcType = awaitedProcType;
if (ps.parameters != null && ps.parameters.Count > i + (ps.IsExtension ? 1 : 0))
awaitedProcType = ps.parameters[i + (ps.IsExtension ? 1 : 0)].sc as TypeScope;
bool tmp_disable_lambda_compilation = disable_lambda_compilation;
disable_lambda_compilation = false;
e.visit(this);
disable_lambda_compilation = tmp_disable_lambda_compilation;
awaitedProcType = tmp_awaitedProcType;
has_lambda = true;
param_types[obj == null ? i : i + 1] = returned_scope;
}
}
if (has_lambda)
ps = select_method(names, null, null, obj, obj_instanced, param_types, parameters.ToArray());
returned_scopes.Clear();
if (ps != null)
{
if (ps.return_type != null)
{
if (ps.name == "Copy" && ps.return_type.Name == "Array" && _method_call.parameters.expressions.Count > 0)
{
_method_call.parameters.expressions[0].visit(this);
}
else
{
returned_scope = ps.return_type;
if (ps.return_type.lazy_instance)
returned_scope = ps.return_type.original_type.GetInstance(ps.return_type.instances);
}
}
else if (ps.is_constructor)
returned_scope = ps.declaringType;
else
returned_scope = null;
}
else if (names.Length > 0)
{
returned_scope = null;
foreach (SymScope ss in names)
if (ss is ProcScope)
{
ps = ss as ProcScope;
if (ps.return_type != null)
{
returned_scope = ps.return_type;
if (ps.IsExtension && ps.IsGeneric() && obj != null)
{
TypeScope elem_ts = obj.GetElementType();
if (elem_ts == null)
elem_ts = obj;
returned_scope = ps.return_type.GetInstance(new List<TypeScope>() { elem_ts });
}
break;
}
else
returned_scope = null;
}
else if (ss is TypeScope)
{
returned_scope = ss;
}
}
method_call_cache.Add(_method_call, returned_scope);
cnst_val.prim_val = null;
}
public override void visit(pascal_set_constant _pascal_set_constant)
{
TypeScope element_type = null;
List<TypeScope> element_types = new List<TypeScope>();
if (_pascal_set_constant.values != null)
foreach (expression ex in _pascal_set_constant.values.expressions)
{
ex.visit(this);
if (returned_scope != null && returned_scope is TypeScope)
element_types.Add(returned_scope as TypeScope);
}
if (element_types.Count > 0)
{
element_type = element_types[0];
for (int i = 1; i < element_types.Count; i++)
{
if (element_type.IsConvertable(element_types[i], true))
element_type = element_types[i];
else if (!element_types[i].IsConvertable(element_type, true))
{
element_type = TypeTable.obj_type;
break;
}
//else element_type = TypeTable.obj_type;
}
}
if (element_type != null)
returned_scope = new SetScope(element_type);
else
returned_scope = cur_scope.FindName(StringConstants.set_name);
cnst_val.prim_val = null;
}
public override void visit(PascalABCCompiler.SyntaxTree.array_const _array_const)
{
//throw new Exception("The method or operation is not implemented.");
cnst_val.prim_val = null;
}
public override void visit(write_accessor_name _write_accessor_name)
{
//throw new Exception("The method or operation is not implemented.");
}
public override void visit(read_accessor_name _read_accessor_name)
{
//throw new Exception("The method or operation is not implemented.");
}
public override void visit(property_accessors _property_accessors)
{
//throw new Exception("The method or operation is not implemented.");
}
public override void visit(simple_property _simple_property)
{
//throw new Exception("The method or operation is not implemented.");
_simple_property.property_type.visit(this);
if (returned_scope == null)
return;
ElementScope es = new ElementScope(new SymInfo(_simple_property.property_name.name, SymbolKind.Property, _simple_property.property_name.name),
returned_scope, cur_scope);
es.declaringUnit = entry_scope;
if (_simple_property.array_default != null)
{
TypeScope ts = cur_scope as TypeScope;
if (_simple_property.parameter_list != null)
{
ts.elementType = returned_scope as TypeScope;
for (int i = 0; i < _simple_property.parameter_list.parameters.Count; i++)
{
_simple_property.parameter_list.parameters[i].type.visit(this);
if (returned_scope == null || !(returned_scope is TypeScope)) return;
for (int j = 0; j < _simple_property.parameter_list.parameters[i].names.idents.Count; j++)
ts.AddIndexer(returned_scope as TypeScope, _simple_property.attr == definition_attribute.Static);
}
}
}
if (_simple_property.parameter_list != null)
{
es.elementType = returned_scope as TypeScope;
ProcScope ps = new ProcScope("#getset" + _simple_property.property_name.name, cur_scope);
ps.procRealization = new ProcRealization(ps, ps.topScope);
ps.already_defined = true;
cur_scope.AddName("#getset" + _simple_property.property_name.name, ps);
for (int i = 0; i < _simple_property.parameter_list.parameters.Count; i++)
{
_simple_property.parameter_list.parameters[i].type.visit(this);
if (returned_scope == null || !(returned_scope is TypeScope))
return;
for (int j = 0; j < _simple_property.parameter_list.parameters[i].names.idents.Count; j++)
{
ps.loc = get_location(_simple_property);
ps.si.not_include = true;
string param_name = _simple_property.parameter_list.parameters[i].names.idents[j].name;
ps.AddName(param_name, new ElementScope(new SymInfo(param_name, SymbolKind.Parameter, null),returned_scope, ps));
es.AddIndexer(returned_scope as TypeScope);
}
}
es.MakeDescription();
}
es.loc = get_location(_simple_property);
if (add_doc_from_text && this.converter.controller.docs != null && this.converter.controller.docs.ContainsKey(_simple_property))
es.AddDocumentation(this.converter.controller.docs[_simple_property]);
if (_simple_property.attr == definition_attribute.Static)
es.is_static = true;
es.acc_mod = cur_access_mod;
es.si.acc_mod = cur_access_mod;
if (_simple_property.accessors != null && _simple_property.accessors.write_accessor == null)
{
es.is_readonly = true;
es.MakeDescription();
}
cur_scope.AddName(_simple_property.property_name.name, es);
//if (_simple_property.accessors != null && _simple_property.accessors.write_accessor != null && _simple_property.accessors.write_accessor.pr != null)
// _simple_property.accessors.write_accessor.pr.visit(this);
}
public override void visit(index_property _index_property)
{
//throw new Exception("The method or operation is not implemented.");
if (_index_property.is_default != null)
{
TypeScope ts = cur_scope as TypeScope;
if (_index_property.parameter_list != null)
{
for (int i = 0; i < _index_property.parameter_list.parameters.Count; i++)
{
_index_property.parameter_list.parameters[i].type.visit(this);
if (returned_scope == null || !(returned_scope is TypeScope))
return;
for (int j = 0; j < _index_property.parameter_list.parameters[i].names.idents.Count; j++)
ts.AddIndexer(returned_scope as TypeScope, _index_property.attr == definition_attribute.Static);
}
}
}
}
public override void visit(class_members _class_members)
{
//throw new Exception("The method or operation is not implemented.");
}
public override void visit(access_modifer_node _access_modifer_node)
{
//throw new Exception("The method or operation is not implemented.");
}
private access_modifer cur_access_mod = access_modifer.none;
private bool parse_only_method_header = false;
private bool parse_only_method_body = false;
private bool parse_only_class_headers = false;
private bool parse_only_method_headers = false;
private bool parse_only_method_bodies = false;
private Dictionary<declaration, SymScope> class_members = new Dictionary<declaration, SymScope>();
public override void visit(class_body_list _class_body)
{
Dictionary<declaration, SymScope> scopes = new Dictionary<declaration, SymScope>();
if (!parse_only_method_bodies)
{
parse_only_method_header = true;
foreach (class_members mems in _class_body.class_def_blocks)
{
if (mems.access_mod != null)
cur_access_mod = mems.access_mod.access_level;
foreach (declaration decl in mems.members)
{
try
{
decl.visit(this);
scopes.Add(decl, returned_scope);
if (parse_only_method_headers)
class_members.Add(decl, returned_scope);
}
catch (Exception e)
{
}
}
cur_access_mod = access_modifer.none;
}
}
parse_only_method_header = false;
parse_only_method_body = true;
if (!parse_only_method_headers)
{
foreach (class_members mems in _class_body.class_def_blocks)
{
if (mems.access_mod != null)
cur_access_mod = mems.access_mod.access_level;
foreach (declaration decl in mems.members)
{
try
{
if (decl is procedure_definition)
{
if (parse_only_method_bodies)
cur_scope = class_members[decl];
else
cur_scope = scopes[decl];
decl.visit(this);
}
}
catch (Exception e)
{
}
}
cur_access_mod = access_modifer.none;
}
}
parse_only_method_body = false;
}
private bool has_cyclic_inheritance(TypeScope ts)
{
TypeScope tmp = ts.baseScope;
while (tmp != null)
if (tmp == ts)
return true;
else tmp = tmp.baseScope;
return false;
}
public override void visit(class_definition _class_definition)
{
//throw new Exception("The method or operation is not implemented.");
SymScope tmp = cur_scope;
TypeScope ss = null;
returned_scope = null;
if (_class_definition.class_parents != null && _class_definition.class_parents.types.Count > 0)
_class_definition.class_parents.types[0].visit(this);
if (returned_scope is TypeScope && has_cyclic_inheritance(returned_scope as TypeScope))
returned_scope = null;
if (cur_type_name != null)
{
ss = cur_scope.FindNameOnlyInType(cur_type_name) as TypeScope;
if (parse_only_class_headers && ss != null)
{
ss.Clear();
//ss.declaringUnit.members.Remove(ss);
ss.declaringUnit = cur_scope;
ss.topScope = cur_scope;
cur_scope.members.Add(ss);
}
}
if (ss == null || !(ss.members != null && ss.members.Count == 0) && !parse_only_class_headers && !parse_only_method_bodies)
{
if (_class_definition.keyword == class_keyword.Record)
{
ss = new TypeScope(SymbolKind.Struct, cur_scope, returned_scope);
if (cur_type_name == null)
cur_type_name = "$record";
}
else if (_class_definition.keyword == class_keyword.Class)
{
ss = new TypeScope(SymbolKind.Class, cur_scope, returned_scope);
if ((_class_definition.attribute & class_attribute.Sealed) == class_attribute.Sealed)
ss.is_final = true;
if ((_class_definition.attribute & class_attribute.Abstract) == class_attribute.Abstract)
ss.is_abstract = true;
if (cur_type_name == null)
cur_type_name = "$class";
}
else if (_class_definition.keyword == class_keyword.Interface || _class_definition.keyword == class_keyword.TemplateInterface)
{
ss = new TypeScope(SymbolKind.Interface, cur_scope, returned_scope);
if (cur_type_name == null) cur_type_name = "$interface";
}
else if (_class_definition.keyword == class_keyword.TemplateClass)
{
ss = new TypeScope(SymbolKind.Class, cur_scope, returned_scope);
if (cur_type_name == null) cur_type_name = "$class";
}
else if (_class_definition.keyword == class_keyword.TemplateRecord)
{
ss = new TypeScope(SymbolKind.Struct, cur_scope, returned_scope);
if (cur_type_name == null) cur_type_name = "$record";
}
if (ss != null)
{
if (template_args != null && template_args.Count > 0)
cur_scope.AddName(cur_type_name+"`"+ template_args.Count, ss);
else
cur_scope.AddName(cur_type_name, ss);
}
}
else
{
ss.baseScope = returned_scope as TypeScope;
if ((_class_definition.attribute & class_attribute.Sealed) == class_attribute.Sealed)
ss.is_final = true;
if ((_class_definition.attribute & class_attribute.Abstract) == class_attribute.Abstract)
ss.is_abstract = true;
if (ss.baseScope == null)
ss.baseScope = TypeTable.obj_type;
}
if ((_class_definition.attribute & class_attribute.Static) == class_attribute.Static)
{
ss.is_static = true;
ss.si.is_static = true;
}
int num = 0;
if (_class_definition.keyword != class_keyword.Interface)
num = 1;
else
ss.baseScope = null;
if (parse_only_class_headers)
{
returned_scope = ss;
return;
}
if (_class_definition.class_parents != null && _class_definition.class_parents.types.Count > num)
{
for (int i = num; i < _class_definition.class_parents.types.Count; i++)
{
_class_definition.class_parents.types[i].visit(this);
if (returned_scope != null && returned_scope is TypeScope && has_cyclic_inheritance(returned_scope as TypeScope))
returned_scope = null;
if (returned_scope != null && returned_scope is TypeScope && (returned_scope as TypeScope).si.kind == SymbolKind.Interface)
ss.AddImplementedInterface(returned_scope as TypeScope);
}
}
if (has_cyclic_inheritance(ss))
ss.baseScope = null;
if (ss.loc != null)
ss.predef_loc = ss.loc;
ss.loc = get_location(_class_definition);
cur_scope = ss;
if (!parse_only_method_bodies)
{
if (_class_definition.template_args != null)
{
foreach (ident id in _class_definition.template_args.idents)
ss.AddGenericParameter(id.name, get_location(id));
}
else if (template_args != null)
{
foreach (ident id in template_args.idents)
ss.AddGenericParameter(id.name, get_location(id));
}
}
string tmp_name = cur_type_name;
cur_type_name = null;
if (_class_definition.body != null)
{
_class_definition.body.visit(this);
ss.body_loc = get_location(_class_definition);
ss.real_body_loc = get_location(_class_definition.body);
ss.AddDefaultConstructorIfNeed();
if (((_class_definition.attribute & PascalABCCompiler.SyntaxTree.class_attribute.Auto) == class_attribute.Auto))
{
ProcScope ps = new ProcScope(StringConstants.default_constructor_name, ss, true);
foreach (class_members members in _class_definition.body.class_def_blocks)
{
foreach (declaration decl in members.members)
{
var_def_statement vds = decl as var_def_statement;
if (vds == null)
continue;
if (vds.vars_type != null)
vds.vars_type.visit(this);
else
vds.inital_value.visit(this);
foreach (ident id in vds.vars.list)
{
ps.parameters.Add(new ElementScope(new SymInfo(id.name, SymbolKind.Parameter, id.name), returned_scope, ps));
}
}
}
ps.return_type = ss;
ps.Complete();
ss.AddName(StringConstants.default_constructor_name, ps);
}
}
mark_as_possible_abstract(ss);
cur_type_name = tmp_name;
returned_scope = ss;
cur_scope = tmp;
}
private void mark_as_possible_abstract(TypeScope ts)
{
if (ts.is_abstract)
return;
if (ts.baseScope == null || !ts.baseScope.is_abstract)
return;
List<ProcScope> meths = ts.baseScope.GetAbstractMethods();
foreach (ProcScope abstr_meth in meths)
{
bool has_override = false;
foreach (ProcScope meth in ts.GetMethods())
{
if (meth.name == abstr_meth.name && meth.IsParamsEquals(abstr_meth))
{
has_override = true;
break;
}
}
if (!has_override)
{
ts.is_abstract = true;
break;
}
}
}
public override void visit(default_indexer_property_node _default_indexer_property_node)
{
//throw new Exception("The method or operation is not implemented.");
}
public override void visit(known_type_definition _known_type_definition)
{
//throw new Exception("The method or operation is not implemented.");
}
public override void visit(set_type_definition _set_type_definition)
{
//throw new Exception("The method or operation is not implemented.");
_set_type_definition.of_type.visit(this);
TypeScope ts = returned_scope as TypeScope;
if (returned_scope is ProcScope)
ts = new ProcType(returned_scope as ProcScope);
returned_scope = new SetScope(ts);
returned_scope.topScope = cur_scope;
}
public override void visit(record_const_definition _record_const_definition)
{
//throw new Exception("The method or operation is not implemented.");
}
public override void visit(record_const _record_const)
{
// throw new Exception("The method or operation is not implemented.");
}
public override void visit(record_type _record_type)
{
//throw new Exception("The method or operation is not implemented.");
SymScope tmp = cur_scope;
RecordScope rs = new RecordScope();
rs.loc = get_location(_record_type);
cur_scope.AddName("$record",rs);
cur_scope = rs;
if (_record_type.parts.fixed_part != null)
foreach (var_def_statement vds in _record_type.parts.fixed_part.vars)
{
vds.visit(this);
}
returned_scope = cur_scope;
cur_scope = tmp;
}
public override void visit(enum_type_definition _enum_type_definition)
{
bool is_tuple = false;
template_type_reference tuple = new template_type_reference();
tuple.name = new named_type_reference(new ident_list(new ident("System"), new ident("Tuple")).idents);
template_param_list tpl = new template_param_list();
tuple.params_list = tpl;
if (_enum_type_definition.enumerators != null)
foreach (enumerator en in _enum_type_definition.enumerators.enumerators)
{
if (!(en.name is named_type_reference))
{
is_tuple = true;
}
else
{
named_type_reference ntr = en.name as named_type_reference;
if (ntr.names.Count > 1 || ntr.names.Count == 0)
{
is_tuple = true;
}
else
{
SymScope ss = cur_scope.FindName(ntr.FirstIdent.name);
if (ss != null && ss is TypeScope)
{
is_tuple = true;
}
}
}
tpl.Add(en.name);
}
if (is_tuple)
{
tuple.visit(this);
return;
}
//throw new Exception("The method or operation is not implemented.");
EnumScope enum_scope = new EnumScope(SymbolKind.Enum, cur_scope,
TypeTable.get_compiled_type(new SymInfo(typeof(Enum).Name, SymbolKind.Enum, typeof(Enum).FullName), typeof(Enum)));
enum_scope.loc = get_location(_enum_type_definition);
enum_scope.topScope = cur_scope;
List<ElementScope> elems = new List<ElementScope>();
if (_enum_type_definition.enumerators != null)
foreach (enumerator en in _enum_type_definition.enumerators.enumerators)
{
var name = (en.name as named_type_reference).FirstIdent.name;
ElementScope ss = new ElementScope(new SymInfo(name, SymbolKind.Constant, name),/*cur_scope.FindName(StringConstants.integer_type_name)*/enum_scope, cur_scope);
ss.is_static = true;
ss.cnst_val = name;
elems.Add(ss);
ss.loc = get_location(en);
cur_scope.AddName(name, ss);
enum_scope.AddName(name, ss);
enum_scope.AddEnumConstant(name);
if (this.converter.controller.docs.ContainsKey(en))
ss.AddDocumentation(this.converter.controller.docs[en]);
}
for (int i = 0; i < elems.Count; i++)
elems[i].MakeDescription();
returned_scope = enum_scope;
}
public override void visit(char_const _char_const)
{
returned_scope = TypeTable.char_type;//entry_scope.FindName(StringConstants.char_type_name);
if (in_kav)
cnst_val.prim_val = this.converter.controller.Parser.LanguageInformation.GetStringForChar(_char_const.cconst);
//cnst_val.prim_val = "'"+_char_const.cconst.ToString()+"'";
else cnst_val.prim_val = _char_const.cconst;
}
public override void visit(raise_statement _raise_statement)
{
//throw new Exception("The method or operation is not implemented.");
}
public override void visit(sharp_char_const _sharp_char_const)
{
returned_scope = TypeTable.char_type;//entry_scope.FindName(StringConstants.char_type_name);
cnst_val.prim_val = this.converter.controller.Parser.LanguageInformation.GetStringForSharpChar(_sharp_char_const.char_num);
}
private bool in_kav=true;
public override void visit(literal_const_line _literal_const_line)
{
//entry_scope.FindName(StringConstants.string_type_name);
StringBuilder sb = new StringBuilder();
in_kav = false;
for (int i = 0; i < _literal_const_line.literals.Count; i++)
{
_literal_const_line.literals[i].visit(this);
if (cnst_val.prim_val != null && cnst_val.prim_val is char)
sb.Append((char)cnst_val.prim_val);
else if (cnst_val.prim_val != null && cnst_val.prim_val is string)
sb.Append((string)cnst_val.prim_val);
}
in_kav = true;
returned_scope = TypeTable.string_type;
cnst_val.prim_val = sb.ToString();
}
public override void visit(string_num_definition _string_num_definition)
{
//throw new Exception("The method or operation is not implemented.");
try
{
_string_num_definition.num_of_symbols.visit(this);
}
catch(Exception e)
{
}
returned_scope = new ShortStringScope(TypeTable.string_type,cnst_val.prim_val);//entry_scope.FindName(StringConstants.string_type_name);
returned_scope.topScope = cur_scope;
returned_scope.loc = get_location(_string_num_definition);
}
public override void visit(variant _variant)
{
//throw new Exception("The method or operation is not implemented.");
}
public override void visit(variant_list _variant_list)
{
//throw new Exception("The method or operation is not implemented.");
}
public override void visit(variant_type _variant_type)
{
//throw new Exception("The method or operation is not implemented.");
}
public override void visit(variant_types _variant_types)
{
//throw new Exception("The method or operation is not implemented.");
}
public override void visit(variant_record_type _variant_record_type)
{
//throw new Exception("The method or operation is not implemented.");
}
public override void visit(procedure_call _procedure_call)
{
//throw new Exception("The method or operation is not implemented.");
if (has_lambdas(_procedure_call.func_name))
{
_procedure_call.func_name.visit(this);
}
}
public override void visit(class_predefinition _class_predefinition)
{
//throw new Exception("The method or operation is not implemented.");
}
public override void visit(nil_const _nil_const)
{
returned_scope = new NullTypeScope();
}
public override void visit(file_type_definition _file_type_definition)
{
//throw new Exception("The method or operation is not implemented.");
if (_file_type_definition.elem_type != null)
_file_type_definition.elem_type.visit(this);
returned_scope = new FileScope(returned_scope as TypeScope, cur_scope);
}
public override void visit(constructor _constructor)
{
SymScope topScope = cur_scope;
ProcScope ps = null;
location loc = get_location(_constructor);
bool is_realization = false;
if (_constructor.name != null)
{
_constructor.name.visit(this);
if (_constructor.name.class_name != null)
{
topScope = cur_scope.FindName(_constructor.name.class_name.name);
if (topScope != null)
{
ps = topScope.FindNameOnlyInThisType(meth_name) as ProcScope;
if (ps == null)
{
ps = new ProcScope(StringConstants.default_constructor_name, cur_scope, true);
ps.head_loc = loc;
}
else
ps = select_function_definition(ps, _constructor.parameters, topScope as TypeScope, topScope as TypeScope, false, _constructor.class_keyword);
//while (ps != null && ps.already_defined) ps = ps.nextProc;
if (ps == null)
{
ps = new ProcScope(meth_name, cur_scope);
ps.head_loc = loc;
}
if (ps.parameters.Count != 0 && _constructor.parameters != null)
{
ps.parameters.Clear();
ps.already_defined = true;
}
if (impl_scope == null)
{
ProcRealization pr = new ProcRealization(ps, cur_scope);
pr.already_defined = true;
ps.procRealization = pr;
pr.loc = cur_loc;
pr.head_loc = loc;
is_realization = true;
entry_scope.AddName("$method", pr);
}
else
{
ProcRealization pr = new ProcRealization(ps, impl_scope);
pr.already_defined = true;
ps.procRealization = pr;
pr.loc = cur_loc;
pr.head_loc = loc;
is_realization = true;
impl_scope.AddName("$method", pr);
}
}
else
{
ps = new ProcScope(StringConstants.default_constructor_name, cur_scope, true);
ps.head_loc = loc;
}
}
else
{
ps = new ProcScope(StringConstants.default_constructor_name, cur_scope, true);
ps.head_loc = loc;
SymScope ss = cur_scope.FindNameOnlyInThisType(StringConstants.default_constructor_name);
if (ss != null && ss is ProcScope)
{
if (ps.topScope == ss.topScope)
{
while ((ss as ProcScope).nextProc != null) ss = (ss as ProcScope).nextProc;
(ss as ProcScope).nextProc = ps;
}
else
ps.nextProc = ss as ProcScope;
cur_scope.AddName("$method", ps);
ps.si.name = StringConstants.default_constructor_name;
}
else
{
cur_scope.AddName(meth_name, ps);
}
ps.return_type = cur_scope as TypeScope;
}
}
else
{
ps = new ProcScope(StringConstants.default_constructor_name, cur_scope, true);
ps.head_loc = loc;
SymScope ss = cur_scope.FindNameOnlyInType(StringConstants.default_constructor_name);
if (ss != null && ss is ProcScope)
{
while ((ss as ProcScope).nextProc != null) ss = (ss as ProcScope).nextProc;
(ss as ProcScope).nextProc = ps;
cur_scope.AddName("$method", ps);
ps.si.name = StringConstants.default_constructor_name;
}
else
{
cur_scope.AddName(StringConstants.default_constructor_name, ps);
}
ps.return_type = cur_scope as TypeScope;
}
if (!is_realization && ps.loc == null)
{
ps.loc = cur_loc;
}
//ps.head_loc = loc;
ps.declaringUnit = entry_scope;
ps.is_static = _constructor.class_keyword;
SetAttributes(ps, _constructor.proc_attributes);
if (add_doc_from_text && this.converter.controller.docs != null && this.converter.controller.docs.ContainsKey(_constructor))
ps.AddDocumentation(this.converter.controller.docs[_constructor]);
if (is_proc_realization) ps.already_defined = true;
else ps.loc = loc;
if (_constructor.name == null || _constructor.name.class_name == null)
{
ps.acc_mod = cur_access_mod;
ps.si.acc_mod = cur_access_mod;
}
if (_constructor.parameters != null)
foreach (typed_parameters pars in _constructor.parameters.params_list)
{
pars.vars_type.visit(this);
if (returned_scope != null)
{
if (returned_scope is ProcScope)
returned_scope = new ProcType(returned_scope as ProcScope);
foreach (ident id in pars.idents.idents)
{
ElementScope si = new ElementScope(new SymInfo(id.name, SymbolKind.Parameter, id.name), returned_scope, ps);
si.loc = get_location(id);
ps.AddName(id.name, si);
if (pars.inital_value != null)
{
pars.inital_value.visit(this);
if (returned_scope is NullTypeScope)
si.cnst_val = "nil";
else
si.cnst_val = cnst_val.prim_val;
}
si.param_kind = pars.param_kind;
si.MakeDescription();
ps.AddParameter(si);
}
}
}
if (cur_scope is TypeScope && !ps.is_static)
ps.AddName("self", new ElementScope(new SymInfo("self", SymbolKind.Parameter, "self"), cur_scope, ps));
//cur_scope = ps;
returned_scope = ps;
ps.Complete();
}
public override void visit(destructor _destructor)
{
//throw new Exception("The method or operation is not implemented.");
SymScope topScope = cur_scope;
ProcScope ps = null;
location loc = get_location(_destructor);
bool is_realization = false;
_destructor.name.visit(this);
if (_destructor.name.class_name != null)
{
topScope = cur_scope.FindName(_destructor.name.class_name.name);
if (topScope != null)
{
ps = topScope.FindNameOnlyInThisType(meth_name) as ProcScope;
if (ps == null)
{
ps = new ProcScope(meth_name, cur_scope);
ps.head_loc = loc;
}
else ps = select_function_definition(ps, _destructor.parameters, null, topScope as TypeScope);
//while (ps != null && ps.already_defined) ps = ps.nextProc;
if (ps == null)
{
ps = new ProcScope(meth_name, cur_scope);
ps.head_loc = loc;
}
if (ps.parameters.Count != 0 && _destructor.parameters != null)
{
ps.parameters.Clear();
ps.already_defined = true;
}
if (impl_scope == null)
{
ProcRealization pr = new ProcRealization(ps, cur_scope);
pr.already_defined = true;
pr.loc = cur_loc;
pr.head_loc = loc;
is_realization = true;
entry_scope.AddName("$method", pr);
}
else
{
ProcRealization pr = new ProcRealization(ps, impl_scope);
pr.already_defined = true;
pr.loc = cur_loc;
pr.head_loc = loc;
is_realization = true;
impl_scope.AddName("$method", pr);
}
}
else
{
ps = new ProcScope(meth_name, cur_scope);
ps.head_loc = loc;
}
}
else
{
ps = new ProcScope(meth_name, cur_scope);
ps.head_loc = loc;
SymScope ss = cur_scope.FindNameOnlyInThisType(meth_name);
if (ss != null && ss is ProcScope)
{
while ((ss as ProcScope).nextProc != null) ss = (ss as ProcScope).nextProc;
(ss as ProcScope).nextProc = ps;
cur_scope.AddName("$method", ps);
ps.si.name = meth_name;
}
else
{
cur_scope.AddName(meth_name, ps);
}
}
if (!is_realization && ps.loc == null)
ps.loc = cur_loc;
//ps.head_loc = loc;
ps.declaringUnit = entry_scope;
SetAttributes(ps, _destructor.proc_attributes);
if (add_doc_from_text && this.converter.controller.docs != null && this.converter.controller.docs.ContainsKey(_destructor))
ps.AddDocumentation(this.converter.controller.docs[_destructor]);
if (is_proc_realization) ps.already_defined = true;
else ps.loc = loc;
if (_destructor.name == null || _destructor.name.class_name == null)
{
ps.acc_mod = cur_access_mod;
ps.si.acc_mod = cur_access_mod;
}
if (_destructor.parameters != null)
foreach (typed_parameters pars in _destructor.parameters.params_list)
{
pars.vars_type.visit(this);
if (returned_scope != null)
{
if (returned_scope is ProcScope)
returned_scope = new ProcType(returned_scope as ProcScope);
foreach (ident id in pars.idents.idents)
{
ElementScope si = new ElementScope(new SymInfo(id.name, SymbolKind.Parameter, id.name), returned_scope, ps);
si.loc = get_location(id);
ps.AddName(id.name, si);
si.param_kind = pars.param_kind;
si.MakeDescription();
ps.AddParameter(si);
}
}
}
if (cur_scope is TypeScope)
ps.AddName("self", new ElementScope(new SymInfo("self", SymbolKind.Parameter, "self"), cur_scope, ps));
//cur_scope = ps;
returned_scope = ps;
ps.Complete();
}
public override void visit(inherited_method_call _inherited_method_call)
{
//throw new Exception("The method or operation is not implemented.");
}
public override void visit(typecast_node _typecast_node)
{
if (_typecast_node.cast_op == op_typecast.is_op)
{
returned_scope = TypeTable.bool_type;
}
else
_typecast_node.type_def.visit(this);
}
public override void visit(interface_node _interface_node)
{
if (_interface_node.interface_definitions != null)
foreach (declaration decl in _interface_node.interface_definitions.defs)
{
try
{
decl.visit(this);
}
catch (Exception e)
{
#if DEBUG
File.AppendAllText("log.txt", e.Message + Environment.NewLine + e.StackTrace + Environment.NewLine);
#endif
}
}
}
public override void visit(implementation_node _implementation_node)
{
var currentLanguage = Languages.Facade.LanguageProvider.Instance.SelectLanguageByExtension(this.cur_unit_file_name);
SymScope tmp = cur_scope;
unl.Clear();
cur_scope = new ImplementationUnitScope(new SymInfo("$implementation", SymbolKind.Namespace, "implementation"), cur_scope);
tmp.AddName("$implementation", cur_scope);
(tmp as InterfaceUnitScope).impl_scope = cur_scope as ImplementationUnitScope;
cur_scope.loc = get_location(_implementation_node);
if (_implementation_node.uses_modules != null)
{
(cur_scope as ImplementationUnitScope).uses_source_range = get_location(_implementation_node.uses_modules);
for (int j = _implementation_node.uses_modules.units.Count - 1; j >= 0; j--)
{
unit_or_namespace s = _implementation_node.uses_modules.units[j];
CompileUsedUnitOrNamespace(s, Path.GetDirectoryName(this.cur_unit_file_name),
cur_scope, ns_cache, unl, currentLanguage.CaseSensitive);
}
}
impl_scope = cur_scope;
if (_implementation_node.implementation_definitions != null)
foreach (declaration decl in _implementation_node.implementation_definitions.defs)
{
try
{
if (parse_only_interface && !need_to_parse(decl))
continue;
decl.visit(this);
}
catch (Exception e)
{
#if DEBUG
File.AppendAllText("log.txt", e.Message + Environment.NewLine + e.StackTrace + Environment.NewLine);
#endif
cur_scope = impl_scope;
}
}
}
private bool need_to_parse(declaration _declaration)
{
if (!(_declaration is procedure_definition))
return false;
procedure_definition proc = _declaration as procedure_definition;
if (proc.proc_header.name.class_name != null)
return true;
if (proc.proc_header.proc_attributes == null)
return false;
if (has_extensionmethod_attr(proc.proc_header.proc_attributes.proc_attributes))
return true;
return false;
}
public override void visit(diap_expr _diap_expr)
{
//throw new Exception("The method or operation is not implemented.");
}
public override void visit(block _block)
{
//throw new Exception("The method or operation is not implemented.");
if (_block.defs != null)
_block.defs.visit(this);
if (_block.program_code != null)
_block.program_code.visit(this);
//cur_scope.loc = get_location(_block.program_code);
}
public override void visit(proc_block _proc_block)
{
//throw new Exception("The method or operation is not implemented.");
}
public override void visit(array_of_named_type_definition _array_of_named_type_definition)
{
//throw new Exception("The method or operation is not implemented.");
}
public override void visit(array_of_const_type_definition _array_of_const_type_definition)
{
//throw new Exception("The method or operation is not implemented.");
}
public override void visit(literal _literal)
{
//throw new Exception("The method or operation is not implemented.");
}
public override void visit(case_variants _case_variants)
{
//throw new Exception("The method or operation is not implemented.");
}
public override void visit(diapason_expr _diapason_expr)
{
_diapason_expr.left.visit(this);
}
public override void visit(var_def_list_for_record _var_def_list)
{
//throw new Exception("The method or operation is not implemented.");
}
public override void visit(record_type_parts _record_type_parts)
{
//throw new Exception("The method or operation is not implemented.");
}
public override void visit(property_array_default _property_array_default)
{
//throw new Exception("The method or operation is not implemented.");
}
public override void visit(property_interface _property_interface)
{
// throw new Exception("The method or operation is not implemented.");
}
public override void visit(property_parameter _property_parameter)
{
//throw new Exception("The method or operation is not implemented.");
}
public override void visit(property_parameter_list _property_parameter_list)
{
//throw new Exception("The method or operation is not implemented.");
}
public override void visit(inherited_ident _inherited_ident)
{
//throw new Exception("The method or operation is not implemented.");
}
public override void visit(format_expr _format_expr)
{
//throw new Exception("The method or operation is not implemented.");
returned_scope = TypeTable.string_type;
}
public override void visit(initfinal_part _initfinal_part)
{
//throw new Exception("The method or operation is not implemented.");
}
public override void visit(token_info _token_info)
{
throw new Exception("The method or operation is not implemented.");
}
public override void visit(raise_stmt _raise_stmt)
{
//throw new Exception("The method or operation is not implemented.");
}
public override void visit(op_type_node _op_type_node)
{
throw new Exception("The method or operation is not implemented.");
}
public override void visit(file_type _file_type)
{
if (_file_type.file_of_type != null)
_file_type.file_of_type.visit(this);
returned_scope = new FileScope(returned_scope as TypeScope, cur_scope);
}
public override void visit(known_type_ident _known_type_ident)
{
throw new Exception("The method or operation is not implemented.");
}
public override void visit(exception_handler _exception_handler)
{
SymScope tmp = cur_scope;
SymScope stmt_scope = new BlockScope(cur_scope);
cur_scope.AddName("$block_scope", stmt_scope);
stmt_scope.loc = get_location(_exception_handler);
if (_exception_handler.statements.source_context != null)
stmt_scope.loc = new location(stmt_scope.loc.begin_line_num, stmt_scope.loc.begin_column_num,
_exception_handler.statements.source_context.end_position.line_num,
_exception_handler.statements.source_context.end_position.column_num, stmt_scope.loc.doc);
returned_scope = null;
if (_exception_handler.variable == null) return;
if (_exception_handler.type_name != null)
_exception_handler.type_name.visit(this);
else returned_scope = cur_scope.FindName(_exception_handler.variable.name);
if (returned_scope != null)
{
cur_scope = stmt_scope;
ElementScope es = new ElementScope(new SymInfo(_exception_handler.variable.name, SymbolKind.Variable, _exception_handler.variable.name), returned_scope, cur_scope);
es.loc = get_location(_exception_handler.variable);
stmt_scope.AddName(_exception_handler.variable.name, es);
}
_exception_handler.statements.visit(this);
cur_scope = tmp;
}
public override void visit(exception_ident _exception_ident)
{
//throw new Exception("The method or operation is not implemented.");
}
public override void visit(exception_handler_list _exception_handler_list)
{
foreach (exception_handler eh in _exception_handler_list.handlers)
eh.visit(this);
}
public override void visit(exception_block _exception_block)
{
if (_exception_block.handlers != null)
_exception_block.handlers.visit(this);
if (_exception_block.stmt_list != null)
_exception_block.stmt_list.visit(this);
if (_exception_block.else_stmt_list != null)
_exception_block.else_stmt_list.visit(this);
}
public override void visit(try_handler _try_handler)
{
}
public override void visit(try_handler_finally _try_handler_finally)
{
_try_handler_finally.stmt_list.visit(this);
}
public override void visit(try_handler_except _try_handler_except)
{
_try_handler_except.except_block.visit(this);
}
public override void visit(try_stmt _try_stmt)
{
if (_try_stmt.stmt_list != null)
_try_stmt.stmt_list.visit(this);
if (_try_stmt.handler != null)
_try_stmt.handler.visit(this);
}
public override void visit(inherited_message _inherited_message)
{
//throw new Exception("The method or operation is not implemented.");
}
public override void visit(external_directive _external_directive)
{
}
public override void visit(using_list _using_list)
{
throw new Exception("The method or operation is not implemented.");
}
public override void visit(jump_stmt _jump_stmt)
{
throw new Exception("The method or operation is not implemented.");
}
public override void visit(loop_stmt _loop_stmt)
{
SymScope tmp = cur_scope;
SymScope stmt_scope = new BlockScope(cur_scope);
cur_scope.AddName("$block_scope", stmt_scope);
stmt_scope.loc = get_location(_loop_stmt);
cur_scope = stmt_scope;
if (_loop_stmt.stmt != null)
_loop_stmt.stmt.visit(this);
cur_scope = tmp;
}
public override void visit(foreach_stmt _foreach_stmt)
{
//throw new Exception("The method or operation is not implemented.");
SymScope tmp = cur_scope;
if (_foreach_stmt.type_name != null)
{
SymScope stmt_scope = new BlockScope(cur_scope);
cur_scope.AddName("$block_scope", stmt_scope);
stmt_scope.loc = get_location(_foreach_stmt);
if (_foreach_stmt.type_name is no_type_foreach)
{
cur_scope = stmt_scope;
_foreach_stmt.in_what.visit(this);
if (returned_scope != null)
returned_scope = returned_scope.GetElementType();
if (returned_scope == null)
returned_scope = TypeTable.obj_type;
}
else
{
if (has_lambdas(_foreach_stmt.in_what))
{
cur_scope = stmt_scope;
_foreach_stmt.in_what.visit(this);
}
_foreach_stmt.type_name.visit(this);
}
if (returned_scope != null)
{
cur_scope = stmt_scope;
if (returned_scope is ProcScope)
returned_scope = new ProcType(returned_scope as ProcScope);
ElementScope es = new ElementScope(new SymInfo(_foreach_stmt.identifier.name, SymbolKind.Variable, _foreach_stmt.identifier.name), returned_scope, cur_scope);
es.loc = get_location(_foreach_stmt.identifier);
stmt_scope.AddName(_foreach_stmt.identifier.name, es);
}
}
if (_foreach_stmt.stmt != null)
_foreach_stmt.stmt.visit(this);
cur_scope = tmp;
}
public override void visit(addressed_value_funcname _addressed_value_funcname)
{
throw new Exception("The method or operation is not implemented.");
}
public override void visit(named_type_reference_list _named_type_reference_list)
{
throw new Exception("The method or operation is not implemented.");
}
public override void visit(template_param_list _template_param_list)
{
throw new Exception("The method or operation is not implemented.");
}
public override void visit(template_type_reference _template_type_reference)
{
returned_scope = null;
converted_template_type = _template_type_reference;
_template_type_reference.name.visit(this);
converted_template_type = null;
List<TypeScope> gen_args = new List<TypeScope>();
if (returned_scope != null && returned_scope is TypeScope)
{
TypeScope ts = returned_scope as TypeScope;
if (_template_type_reference.params_list != null)
{
List<TypeScope> instances = new List<TypeScope>();
foreach (type_definition td in _template_type_reference.params_list.params_list)
{
returned_scope = null;
td.visit(this);
if (returned_scope is TypeScope)
//instances.Add(ret_tn as TypeScope);
//ts.AddGenericInstanciation(ret_tn as TypeScope);
gen_args.Add(returned_scope as TypeScope);
else if (returned_scope is ProcScope)
gen_args.Add(new ProcType(returned_scope as ProcScope));
}
}
if (gen_args.Count > 0)
ts = ts.GetInstance(gen_args, true);
//ts.MakeInstance();
//ret_tn = ts.GetGenericInstance(gen_args);
//ts.si.describe = ts.ToString();
//else
returned_scope = ts;
}
}
public override void visit(int64_const _int64_const)
{
//throw new Exception("The method or operation is not implemented.");
returned_scope = TypeTable.int64_type;//entry_scope.FindName(StringConstants.long_type_name);
cnst_val.prim_val = _int64_const.val;
}
public override void visit(uint64_const _uint64_const)
{
returned_scope = TypeTable.uint64_type;//entry_scope.FindName(StringConstants.ulong_type_name);
cnst_val.prim_val = _uint64_const.val;
}
public override void visit(new_expr _new_expr)
{
_new_expr.type.visit(this);
if (_new_expr.new_array && returned_scope != null && returned_scope is TypeScope)
{
List<TypeScope> indexes = new List<TypeScope>();
indexes.Add(TypeTable.int_type);
for (int i = 1; i < _new_expr.params_list.expressions.Count; i++)
indexes.Add(TypeTable.int_type);
if (indexes.Count > 1)
{
for (int i = 0; i < indexes.Count; i++)
{
indexes[i] = null;
}
}
returned_scope = new ArrayScope(returned_scope as TypeScope, indexes.ToArray());
if (indexes.Count == 1)
(returned_scope as ArrayScope).is_dynamic_arr = true;
}
save_return_value();
if (_new_expr.params_list != null)
foreach (expression ex in _new_expr.params_list.expressions)
{
if (ex is function_lambda_definition)
ex.visit(this);
}
restore_return_value();
/*if (ret_tn != null && ret_tn is TypeScope)
{
TypeScope ts = ret_tn as TypeScope;
ret_tn = ts.GetConstructor();
}*/
}
public override void visit(where_type_specificator_list _type_definition_list)
{
throw new Exception("The method or operation is not implemented.");
}
public override void visit(where_definition _where_definition)
{
//throw new Exception("The method or operation is not implemented.");
}
public override void visit(where_definition_list _where_definition_list)
{
//throw new Exception("The method or operation is not implemented.");
}
public override void visit(PascalABCCompiler.SyntaxTree.sizeof_operator _sizeof_operator)
{
returned_scope = TypeTable.int_type;
}
public override void visit(PascalABCCompiler.SyntaxTree.typeof_operator _typeof_operator)
{
//throw new Exception("The method or operation is not implemented.");
returned_scope = TypeTable.get_compiled_type(new SymInfo(null, SymbolKind.Class,null),typeof(Type));
}
public override void visit(PascalABCCompiler.SyntaxTree.compiler_directive _compiler_directive)
{
//throw new Exception("The method or operation is not implemented.");
}
private string get_operator_sign(Operators op)
{
switch(op)
{
case Operators.Plus : return StringConstants.plus_name;
case Operators.Minus : return StringConstants.minus_name;
case Operators.Division : return StringConstants.div_name;
case Operators.IntegerDivision: return StringConstants.div_name;
case Operators.Multiplication : return StringConstants.mul_name;
case Operators.ModulusRemainder : return StringConstants.mod_name;
case Operators.Less : return StringConstants.sm_name;
case Operators.LessEqual : return StringConstants.smeq_name;
case Operators.Greater : return StringConstants.gr_name;
case Operators.GreaterEqual : return StringConstants.greq_name;
case Operators.Equal : return StringConstants.eq_name;
case Operators.NotEqual : return StringConstants.noteq_name;
case Operators.AssignmentAddition : return StringConstants.plusassign_name;
case Operators.AssignmentMultiplication : return StringConstants.multassign_name;
case Operators.AssignmentSubtraction : return StringConstants.minusassign_name;
case Operators.AssignmentDivision : return StringConstants.divassign_name;
case Operators.Implicit : return "implicit";
case Operators.Explicit : return "explicit";
case Operators.In: return StringConstants.in_name;
case Operators.Power: return StringConstants.power_name;
case Operators.LogicalOR: return StringConstants.or_name;
case Operators.LogicalAND: return StringConstants.and_name;
case Operators.BitwiseXOR: return StringConstants.xor_name;
case Operators.LogicalNOT: return StringConstants.not_name;
}
return "";
}
public override void visit(operator_name_ident _operator_name_ident)
{
//throw new Exception("The method or operation is not implemented.");
string sign = get_operator_sign(_operator_name_ident.operator_type);
if (sign.Length > 0 && char.IsLetter(sign[0]))
sign = " " + sign;
meth_name = "operator"+sign;
}
public override void visit(var_statement _var_statement)
{
//throw new Exception("The method or operation is not implemented.");
_var_statement.var_def.visit(this);
foreach (var_def_statement vds in pending_is_pattern_vars)
{
vds.visit(this);
}
}
public override void visit(PascalABCCompiler.SyntaxTree.question_colon_expression _question_colon_expression)
{
_question_colon_expression.ret_if_true.visit(this);
TypeScope type1 = returned_scope as TypeScope;
_question_colon_expression.ret_if_false.visit(this);
TypeScope type2 = returned_scope as TypeScope;
if (type1 == null)
{
returned_scope = type2;
return;
}
if (type2 == null)
{
returned_scope = type1;
return;
}
if (type1.IsConvertable(type2, true))
{
if (!(type2 is NullTypeScope))
returned_scope = type2;
else
returned_scope = type1;
return;
}
returned_scope = type1;
}
public override void visit(expression_as_statement _expression_as_statement)
{
//throw new Exception("The method or operation is not implemented.");
if (has_lambdas(_expression_as_statement.expr) || _expression_as_statement.expr is unnamed_type_object)
_expression_as_statement.expr.visit(this);
}
public override void visit(declarations_as_statement _declarations_as_statement)
{
foreach (declaration decl in _declarations_as_statement.defs.defs)
decl.visit(this);
}
public override void visit(array_size _array_size)
{
throw new Exception("The method or operation is not implemented.");
}
public override void visit(enumerator _enumerator)
{
throw new Exception("The method or operation is not implemented.");
}
public override void visit(enumerator_list _enumerator_list)
{
throw new Exception("The method or operation is not implemented.");
}
public override void visit(switch_stmt _switch_stmt)
{
throw new Exception("The method or operation is not implemented.");
}
public override void visit(type_definition_attr_list _type_definition_attr_list)
{
throw new Exception("The method or operation is not implemented.");
}
public override void visit(type_definition_attr _type_definition_attr)
{
throw new Exception("The method or operation is not implemented.");
}
public override void visit(lock_stmt _lock_stmt)
{
if (_lock_stmt != null)
_lock_stmt.stmt.visit(this);
}
public override void visit(documentation_comment_list node)
{
throw new NotImplementedException();
}
public override void visit(documentation_comment_section node)
{
throw new NotImplementedException();
}
public override void visit(documentation_comment_tag node)
{
throw new NotImplementedException();
}
public override void visit(documentation_comment_tag_param node)
{
throw new NotImplementedException();
}
public override void visit(ident_with_templateparams node)
{
bool tmp_search_all = search_all;
node.name.visit(this);
if ((tmp_search_all || returned_scope == null) && returned_scopes.Count > 0)
{
List<TypeScope> template_params = new List<TypeScope>();
foreach (type_definition td in node.template_params.params_list)
{
td.visit(this);
if (returned_scope is TypeScope)
template_params.Add(returned_scope as TypeScope);
else
{
return;
}
}
for (int i = 0; i < returned_scopes.Count; i++)
{
ProcScope ps = returned_scopes[i] as ProcScope;
TypeScope ts = returned_scopes[i] as TypeScope;
if (ps != null)
returned_scopes[i] = ps.GetInstance(template_params);
else
returned_scopes[i] = ts.GetInstance(template_params, true);
}
}
else if (returned_scope is ProcScope)
{
ProcScope ps = returned_scope as ProcScope;
List<TypeScope> template_params = new List<TypeScope>();
foreach (type_definition td in node.template_params.params_list)
{
td.visit(this);
if (returned_scope is TypeScope)
template_params.Add(returned_scope as TypeScope);
else
{
returned_scope = ps;
return;
}
}
returned_scope = ps.GetInstance(template_params);
}
else if (returned_scope is TypeScope)
{
TypeScope ts = returned_scope as TypeScope;
List<TypeScope> template_params = new List<TypeScope>();
foreach (type_definition td in node.template_params.params_list)
{
td.visit(this);
if (returned_scope is TypeScope)
template_params.Add(returned_scope as TypeScope);
else if (returned_scope is ProcScope)
template_params.Add(new ProcType(returned_scope as ProcScope));
else
{
returned_scope = ts;
return;
}
}
returned_scope = ts.GetInstance(template_params, true);
}
}
public override void visit(bracket_expr _bracket_expr)
{
_bracket_expr.expr.visit(this);
}
public override void visit(attribute _attribute)
{
}
public override void visit(attribute_list _attribute_list)
{
}
public override void visit(simple_attribute_list _simple_attribute_list)
{
}
public override void visit(function_lambda_definition _function_lambda_definition)
{
ProcScope ps = new ProcScope(_function_lambda_definition.lambda_name, this.cur_scope);
ps.loc = get_location(_function_lambda_definition);
ps.si.not_include = true;
if (!disable_lambda_compilation)
cur_scope.AddName(_function_lambda_definition.lambda_name, ps);
if (_function_lambda_definition.ident_list != null)
for (int i=0; i<_function_lambda_definition.ident_list.idents.Count; i++)
{
ident id = _function_lambda_definition.ident_list.idents[i];
TypeScope param_type = new UnknownScope(new SymInfo("T", SymbolKind.Type, "T"));
if (awaitedProcType != null)
{
if (awaitedProcType is TypeSynonim)
awaitedProcType = (awaitedProcType as TypeSynonim).GetLeafActType();
if (awaitedProcType is ProcType)
{
if ((awaitedProcType as ProcType).target.parameters.Count > 0)
param_type = (awaitedProcType as ProcType).target.parameters[i].sc as TypeScope;
}
else if (awaitedProcType.IsDelegate && awaitedProcType.instances != null && awaitedProcType.instances.Count > 0)
{
param_type = awaitedProcType.instances[Math.Min(i, awaitedProcType.instances.Count - 1)];
}
else if (awaitedProcType.IsDelegate)
{
var invokeMeth = awaitedProcType.FindNameOnlyInType("Invoke") as ProcScope;
if (invokeMeth != null && invokeMeth.parameters != null && invokeMeth.parameters.Count > i)
{
param_type = invokeMeth.parameters[i].sc as TypeScope;
}
}
}
/*if (selected_methods != null)
{
foreach (ProcScope meth in selected_methods)
{
if (meth.parameters != null && meth.parameters.Count > 0 && (meth.parameters[1].sc as TypeScope).IsDelegate
&& (meth.parameters[1].sc as TypeScope).IsGeneric)
{
}
}
}*/
ElementScope es = new ElementScope(new SymInfo(id.name, SymbolKind.Parameter, ""), param_type, ps);
ps.AddName(id.name, es);
ps.AddParameter(es);
es.loc = get_location(id);
}
SymScope tmp = cur_scope;
cur_scope = ps;
TypeScope saved_return_type = ps.return_type;
if (!disable_lambda_compilation)
{
string resultName = currentUnitLanguage.LanguageInformation.ResultVariableName;
if (awaitedProcType != null)
{
var invokeMeth = awaitedProcType.FindNameOnlyInType("Invoke") as ProcScope;
if (invokeMeth != null && invokeMeth.return_type != null && resultName != null)
{
cur_scope.AddName(resultName, new ElementScope(new SymInfo(resultName,SymbolKind.Variable,resultName), invokeMeth.return_type, cur_scope));
}
}
statement_list sl = _function_lambda_definition.proc_body as statement_list;
if (sl != null && sl.list.Count == 1 && sl.list[0] is assign && (sl.list[0] as assign).to is ident
&& ((sl.list[0] as assign).to as ident).name.Equals(resultName, currentUnitLanguage.CaseSensitive ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase))
{
(sl.list[0] as assign).from.visit(this);
ps.return_type = returned_scope as TypeScope;
}
else
_function_lambda_definition.proc_body.visit(this);
}
cur_scope = tmp;
if (_function_lambda_definition.usedkeyword == 2)
ps.return_type = null;
else if (saved_return_type == ps.return_type)
ps.return_type = new UnknownScope(new SymInfo("",SymbolKind.Class,""));// returned_scope as TypeScope;
returned_scope = new ProcType(ps);
}
public override void visit(function_lambda_call _function_lambda_call)
{
//
}
public override void visit(semantic_check _semantic_check)
{
}
public override void visit(lambda_inferred_type lit) //lroman//
{
}
public override void visit(same_type_node stn) //SS 22/06/13//
{
}
public override void visit(name_assign_expr _name_assign_expr) // SSM 27.06.13
{
returned_scope = null;
if (_name_assign_expr.expr == null)
_name_assign_expr.expr = new ident(_name_assign_expr.name.name);
_name_assign_expr.expr.visit(this);
if (returned_scope != null)
{
ElementScope es = new ElementScope(new SymInfo(_name_assign_expr.name.name, SymbolKind.Property, ""), returned_scope, cur_scope);
cur_scope.AddName(_name_assign_expr.name.name, es);
}
else
{
ElementScope es = new ElementScope(new SymInfo(_name_assign_expr.name.name, SymbolKind.Property, ""), new UnknownScope(new SymInfo("",SymbolKind.Type,"")), cur_scope);
cur_scope.AddName(_name_assign_expr.name.name, es);
}
}
public override void visit(name_assign_expr_list _name_assign_expr_list) // SSM 27.06.13
{
foreach (name_assign_expr expr in _name_assign_expr_list.name_expr)
expr.visit(this);
}
public override void visit(unnamed_type_object _unnamed_type_object) // SSM 27.06.13
{
SymScope tmp = cur_scope;
TypeScope ts = null;
cur_scope = ts = new TypeScope(SymbolKind.Class, cur_scope, null);
tmp.AddName("class", cur_scope);
ts.loc = get_location(_unnamed_type_object);
ts.si = new SymInfo("class", SymbolKind.Class, "");
if (_unnamed_type_object.ne_list != null)
_unnamed_type_object.ne_list.visit(this);
returned_scope = cur_scope;
cur_scope = tmp;
}
public override void visit(semantic_type_node stn) // SSM
{
}
public override void visit(sequence_type _sequence_type)
{
template_type_reference ttr = new template_type_reference();
List<ident> names = new List<ident>();
names.Add(new ident("System"));
names.Add(new ident("Collections"));
names.Add(new ident("Generic"));
names.Add(new ident("IEnumerable"));
ttr.name = new named_type_reference(names);
ttr.source_context = _sequence_type.source_context;
ttr.params_list = new template_param_list();
ttr.params_list.params_list.Add(_sequence_type.elements_type);
visit(ttr);
}
public override void visit(assign_var_tuple _assign_var_tuple)
{
_assign_var_tuple.expr.visit(this);
TypeScope ts = returned_scope as TypeScope;
if (ts != null && ts.instances != null && ts.instances.Count > 0)
{
for (int i = 0; i < _assign_var_tuple.idents.idents.Count; i++)
{
ident id = _assign_var_tuple.idents.idents[i];
if (id != null)
{
SymInfo si = new SymInfo(id.name, SymbolKind.Variable, id.name);
ElementScope es = new ElementScope(si, ts.instances[Math.Min(i, ts.instances.Count-1)], cur_scope);
es.acc_mod = cur_access_mod;
es.si.acc_mod = cur_access_mod;
es.loc = get_location(id);
cur_scope.AddName(id.name, es);
es.declaringUnit = cur_scope;
}
}
}
}
public override void visit(tuple_node _tuple_node)
{
method_call mc = new method_call();
mc.parameters = _tuple_node.el;
mc.dereferencing_value = new dot_node(new ident("Tuple"), new ident(StringConstants.default_constructor_name));
mc.visit(this);
}
public override void visit(slice_expr _slice_expr)
{
_slice_expr.v.visit(this);
}
public override void visit(slice_expr_question _slice_expr_question)
{
_slice_expr_question.v.visit(this);
}
public override void visit(dot_question_node _dot_question_node)
{
dot_node dn = new dot_node(_dot_question_node.left, _dot_question_node.right, _dot_question_node.source_context);
dn.visit(this);
}
public override void visit(modern_proc_type _modern_proc_type)
{
template_type_reference ttr = new template_type_reference();
List<ident> names = new List<ident>();
if (_modern_proc_type.res != null)
{
names.Add(new ident("System"));
names.Add(new ident("Func"));
}
else
{
names.Add(new ident("System"));
names.Add(new ident("Action"));
}
ttr.name = new named_type_reference(names);
ttr.source_context = _modern_proc_type.source_context;
ttr.params_list = new template_param_list();
if (_modern_proc_type.aloneparam != null)
{
ttr.params_list.params_list.Add(_modern_proc_type.aloneparam);
if (_modern_proc_type.res != null)
ttr.params_list.params_list.Add(_modern_proc_type.res);
}
else
{
if (_modern_proc_type.el != null)
foreach (enumerator en in _modern_proc_type.el.enumerators)
{
ttr.params_list.params_list.Add(en.name); // Здесь исправил SSM 15.1.16
}
if (_modern_proc_type.res != null)
ttr.params_list.params_list.Add(_modern_proc_type.res);
}
if (ttr.params_list.params_list.Count > 0)
visit(ttr);
else
visit(ttr.name);
}
public override void visit(diapason_expr_new _diapason_expr_new)
{
method_call mc = new method_call();
mc.parameters = new expression_list(new List<expression> { _diapason_expr_new.left, _diapason_expr_new.right });
mc.dereferencing_value = new dot_node(new ident(StringConstants.pascalSystemUnitName), new ident("InternalRange"));
mc.visit(this);
}
public override void visit(array_const_new acn)
{
TypeScope element_type = null;
List<TypeScope> element_types = new List<TypeScope>();
foreach (expression ex in acn.elements.expressions)
{
ex.visit(this);
if (returned_scope != null && returned_scope is TypeScope)
element_types.Add(returned_scope as TypeScope);
}
element_type = element_types[0];
for (int i = 1; i < element_types.Count; i++)
{
if (element_type.IsConvertable(element_types[i], true))
element_type = element_types[i];
else if (!element_types[i].IsConvertable(element_type, true))
{
element_type = TypeTable.obj_type;
break;
}
}
returned_scope = new ArrayScope(element_type,null);
cnst_val.prim_val = null;
}
public override void visit(bigint_const bi)
{
/*method_call mc = new method_call();
mc.parameters = new expression_list(new uint64_const(bi.val, bi.source_context),bi.source_context);
mc.dereferencing_value = new dot_node(new ident("System"), new ident("Numerics"), new ident("BigInteger"), new ident("Create"));
mc.visit(this);*/
var names = new List<ident> { new ident("System"), new ident("Numerics"), new ident("BigInteger") };
var ntr = new named_type_reference(names, bi.source_context);
var ne = new new_expr(ntr, new expression_list(new uint64_const(bi.val)), bi.source_context);
ne.visit(this);
}
public override void visit(let_var_expr _let_var_expr)
{
var_def_statement vds = new var_def_statement(_let_var_expr.id, _let_var_expr.ex, _let_var_expr.source_context);
vds.visit(this);
}
}
}