* Fix spython semantic error * fixed bat, compiler and resources * Переделали на кафедральном компе * Post merge clean up * Adapt code to new changes from master * Squashed commit of the following: commita6f6d8a90bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Sep 7 23:11:54 2024 +0300 Правки рейтинга в TeacherPlugin commit2365eb3633Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Sep 7 15:54:15 2024 +0300 LinkLabel в TeacherControlPlugin commit1835b811efAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Sep 3 23:51:44 2024 +0300 MathNet Signed commitb23d6df9e9Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Sep 3 23:16:15 2024 +0300 MathNet.Numerics.dll commit790fba67b8Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Aug 27 17:56:09 2024 +0300 3.10.0 commit1ec4204fd2Author: Sun Serega <sunserega2@gmail.com> Date: Mon Aug 26 09:20:27 2024 +0300 `.Batch` cleanup (#3108) commitb5e674c311Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Mon Aug 26 09:12:14 2024 +0300 3_10_0 commit7face043cfAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Mon Aug 26 09:11:08 2024 +0300 ToSet commite456ad528eAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Aug 24 23:13:57 2024 +0300 3.9.0.3530 commit3247469e6dAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Aug 24 22:55:27 2024 +0300 Добавлен DrawPoints в Turtle Исправлена ошибка с отображением подписей в Y-координате commit7548142623Author: 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 := ',') commitd94885b950Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Aug 24 12:13:09 2024 +0300 randomElement для строк .ToReals - разделителями могут быть пробел табуляция и переход на новую строку NumberFormat - функция, возвращающая nfi commitae2e26acf8Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Fri Aug 23 19:33:55 2024 +0300 PT4 - новые dll файлы старых заданий серий A commit0f8aa6fa3cAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Aug 18 17:28:05 2024 +0300 SetOf как основной синоним HSet commitdb4b53be20Merge:86852e0a5b9fd59a84Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Aug 18 16:05:42 2024 +0300 Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet commit86852e0a59Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Aug 18 16:05:14 2024 +0300 School - ToBase(number: int64 commitb9fd59a840Author: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Aug 13 15:08:44 2024 +0200 #2830 commit4f0b0f8ba0Author: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Aug 13 14:43:49 2024 +0200 #3194 commite3ee0fed4cAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Aug 13 13:49:30 2024 +0200 #3097 commitd396c4a9feAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Aug 13 10:40:23 2024 +0200 #3178 commit0d846d2335Merge:e91e35398a65a86921Author: 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 commita65a869211Author: samuraiGH <anonimajzer3@mail.ru> Date: Mon Aug 12 15:50:42 2024 +0300 increasing pcu file version commite91e353984Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Aug 11 15:21:29 2024 +0300 Обновленный модуль Turtle.pas commitc18238df39Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Aug 6 20:18:57 2024 +0300 3.9.0.3523 commit1da2b524a6Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Aug 6 19:34:10 2024 +0300 School PrimeDivisors commit47c61d8b14Author: 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 commitfc3ab96caeAuthor: 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 commit64acde6460Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Jul 31 18:21:04 2024 +0300 Сделал возможным неявное приведение некоторого типа к array of T (при описании оператора в виде статической функции класса) School - IsPrime(n) commit3db5709101Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Jul 31 10:56:18 2024 +0300 ZipCartesianFuncs.pas commitc4fd47128bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Jul 30 22:56:03 2024 +0300 Zip, Cartesian - сделаны внешние функции до 5 параметров, в т.ч. с проекцией Zip, Cartesian - методы расширения дополнены чтобы было как во внешних Перегенерирована справка commit7d66f26d4fAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Mon Jul 1 00:16:43 2024 +0300 cleanup and more tests commit464dc794a8Author: samuraiGH <anonimajzer3@mail.ru> Date: Sun Jun 30 23:31:28 2024 +0300 cleanup and more comments commit32f126370cAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Sun Jun 30 21:35:06 2024 +0300 attempt to fix GetEnumerator resolving for Pascal types commitfb3eeeb28bAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Sat Jun 29 16:26:35 2024 +0300 fix tests commit84b0dfe537Author: samuraiGH <anonimajzer3@mail.ru> Date: Sat Jun 29 15:49:13 2024 +0300 fix getting MethodInfo commit5fa4d9fce7Author: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 22:45:07 2024 +0300 cold fix set of T resolving commit460ce636abAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 22:21:06 2024 +0300 hot fix set of T resolving commit83c2f29ac6Author: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 21:53:11 2024 +0300 fix method filtering again commitc840a1a47aAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 21:32:41 2024 +0300 fix type recovery commit2436627fddAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 19:18:32 2024 +0300 fixing method filtering commit15a05360a4Author: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 17:25:39 2024 +0300 attempt to fix GetEnumerator resolving for compiled types commit4fd020d084Author: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 17:21:00 2024 +0300 adding tests * Add Test for Global Keyword * Add global_statement syntax tree node * Move Tests * Add SPythonGlobalStatementVisitor * Add SyntaxVisitorError to SPythonGlobalVariableVisitor * Squashed commit of the following: commit 2cd248f986ecdd4c27337939539471a70e728a16 Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com> Date: Sun Sep 29 14:05:36 2024 +0300 Update StandardSyntaxTreeConverter.cs commit 6ca1c377f1d1be82176a89f0d1cdf627dc595e75 Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com> Date: Sun Sep 29 13:54:30 2024 +0300 Update ListGeneratorNodesVisitor.cs commit 64501e671207f09203fb3d92cd464e4196fa847b Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com> Date: Sun Sep 29 13:49:44 2024 +0300 Add ListGeneratorNodesVisitor commit 469e38b298b076befa9650d3191a52858b40135f Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com> Date: Sun Sep 29 13:07:56 2024 +0300 Add list_generator node commit 8c065cbea88b75b44711516c6c7627ef0da9d03b Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com> Date: Sun Sep 29 12:56:04 2024 +0300 Fix List Assign commit ca3b11ec247ed8d92b6866c505cd6f8ba035492e Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com> Date: Sun Sep 29 12:06:03 2024 +0300 Fix Global Variables in Functions commit f6c9f76346155e6611b118ab8bdaaecd41c2d7f0 Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com> Date: Sun Sep 29 11:27:14 2024 +0300 Fix Assign with Type commit 1b41dfed70dd94551457375832bea465d8b49d26 Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com> Date: Sun Sep 29 11:17:21 2024 +0300 Fix Global Variables commit 36d83320682079ad1b8a254eb2180998912e9464 Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com> Date: Sat Sep 28 20:59:29 2024 +0300 Update AssignToVarConverterVisitor.cs commit 660a33565af24a2fc56842a99a3c7bb4feda5408 Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com> Date: Sat Sep 28 20:20:44 2024 +0300 Add Var and Assign Distinction to Visitor commit 1098e5bf0072d3aef9c7a82af98a741b46f7f6bd Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com> Date: Sat Sep 28 18:29:16 2024 +0300 Create t1.pys commit a8747cc41e55b2e4e28cda5ffc0c052c908a5c99 Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com> Date: Sat Sep 28 18:24:37 2024 +0300 Move SymbolTable to AssignToVarConverterVisitor commit b31fd297e6187998f9d21e238b39e674fab5021e Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com> Date: Sat Sep 28 17:46:05 2024 +0300 Add EraseGlobalNodeVisitor commit c22a0342fad9a3d40823a0f3a94f067772b92db4 Author: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com> Date: Mon Sep 16 20:05:44 2024 +0300 Squashed commit of the following: commit8f7e92d418Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Mon Sep 16 08:25:43 2024 +0300 Turtle переделал на паттерн Команда commita6f6d8a90bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Sep 7 23:11:54 2024 +0300 Правки рейтинга в TeacherPlugin commit2365eb3633Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Sep 7 15:54:15 2024 +0300 LinkLabel в TeacherControlPlugin commit1835b811efAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Sep 3 23:51:44 2024 +0300 MathNet Signed commitb23d6df9e9Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Sep 3 23:16:15 2024 +0300 MathNet.Numerics.dll commit790fba67b8Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Aug 27 17:56:09 2024 +0300 3.10.0 commit1ec4204fd2Author: Sun Serega <sunserega2@gmail.com> Date: Mon Aug 26 09:20:27 2024 +0300 `.Batch` cleanup (#3108) commitb5e674c311Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Mon Aug 26 09:12:14 2024 +0300 3_10_0 commit7face043cfAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Mon Aug 26 09:11:08 2024 +0300 ToSet commite456ad528eAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Aug 24 23:13:57 2024 +0300 3.9.0.3530 commit3247469e6dAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Aug 24 22:55:27 2024 +0300 Добавлен DrawPoints в Turtle Исправлена ошибка с отображением подписей в Y-координате commit7548142623Author: 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 := ',') commitd94885b950Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Aug 24 12:13:09 2024 +0300 randomElement для строк .ToReals - разделителями могут быть пробел табуляция и переход на новую строку NumberFormat - функция, возвращающая nfi commitae2e26acf8Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Fri Aug 23 19:33:55 2024 +0300 PT4 - новые dll файлы старых заданий серий A commit0f8aa6fa3cAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Aug 18 17:28:05 2024 +0300 SetOf как основной синоним HSet commitdb4b53be20Merge:86852e0a5b9fd59a84Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Aug 18 16:05:42 2024 +0300 Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet commit86852e0a59Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Aug 18 16:05:14 2024 +0300 School - ToBase(number: int64 commitb9fd59a840Author: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Aug 13 15:08:44 2024 +0200 #2830 commit4f0b0f8ba0Author: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Aug 13 14:43:49 2024 +0200 #3194 commite3ee0fed4cAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Aug 13 13:49:30 2024 +0200 #3097 commitd396c4a9feAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Aug 13 10:40:23 2024 +0200 #3178 commit0d846d2335Merge:e91e35398a65a86921Author: 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 commita65a869211Author: samuraiGH <anonimajzer3@mail.ru> Date: Mon Aug 12 15:50:42 2024 +0300 increasing pcu file version commite91e353984Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Aug 11 15:21:29 2024 +0300 Обновленный модуль Turtle.pas commitc18238df39Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Aug 6 20:18:57 2024 +0300 3.9.0.3523 commit1da2b524a6Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Aug 6 19:34:10 2024 +0300 School PrimeDivisors commit47c61d8b14Author: 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 commitfc3ab96caeAuthor: 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 commit64acde6460Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Jul 31 18:21:04 2024 +0300 Сделал возможным неявное приведение некоторого типа к array of T (при описании оператора в виде статической функции класса) School - IsPrime(n) commit3db5709101Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Jul 31 10:56:18 2024 +0300 ZipCartesianFuncs.pas commitc4fd47128bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Jul 30 22:56:03 2024 +0300 Zip, Cartesian - сделаны внешние функции до 5 параметров, в т.ч. с проекцией Zip, Cartesian - методы расширения дополнены чтобы было как во внешних Перегенерирована справка commit7d66f26d4fAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Mon Jul 1 00:16:43 2024 +0300 cleanup and more tests commit464dc794a8Author: samuraiGH <anonimajzer3@mail.ru> Date: Sun Jun 30 23:31:28 2024 +0300 cleanup and more comments commit32f126370cAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Sun Jun 30 21:35:06 2024 +0300 attempt to fix GetEnumerator resolving for Pascal types commitfb3eeeb28bAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Sat Jun 29 16:26:35 2024 +0300 fix tests commit84b0dfe537Author: samuraiGH <anonimajzer3@mail.ru> Date: Sat Jun 29 15:49:13 2024 +0300 fix getting MethodInfo commit5fa4d9fce7Author: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 22:45:07 2024 +0300 cold fix set of T resolving commit460ce636abAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 22:21:06 2024 +0300 hot fix set of T resolving commit83c2f29ac6Author: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 21:53:11 2024 +0300 fix method filtering again commitc840a1a47aAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 21:32:41 2024 +0300 fix type recovery commit2436627fddAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 19:18:32 2024 +0300 fixing method filtering commit15a05360a4Author: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 17:25:39 2024 +0300 attempt to fix GetEnumerator resolving for compiled types commit4fd020d084Author: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 17:21:00 2024 +0300 adding tests * Add result Variable Name to Local Variables * Add node for SPython method call * Add SPythonMethodCallVisitor * Fix usage of currentFileName field * Squashed commit of the following: commit53b3fd0881Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Oct 9 14:09:01 2024 +0300 Добавил временное преобразование от array of T в set of T commit271d5792ceAuthor: 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 commit79f9ab73a0Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Oct 5 15:33:20 2024 +0300 PT4_32 commit0a20c8d32cAuthor: Sun Serega <sunserega2@gmail.com> Date: Thu Sep 26 09:02:31 2024 +0200 Add `.DistinctBy` (#3122) commit11981dbf47Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Sep 25 11:53:02 2024 +0300 IndexMinBy, IndexMaxBy MinBy, MaxBy - более эффективная реализация GraphWPF - SaveToClipboard commit3eb1d2bd85Author: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Sep 22 17:42:09 2024 +0200 #3197 commit20edd487e3Author: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Sep 22 12:39:03 2024 +0200 #3204 commit7261231c9cMerge:7debbe7029ab932977Author: 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 commit9ab9329771Author: AlexanderZemlyak <zemlyaksanya@mail.ru> Date: Sun Sep 22 10:23:18 2024 +0300 Add new projects in PascalACBNETLinux.sln commit7debbe702aAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Sep 21 14:29:38 2024 +0300 Критическое обновление LightPT commit40335b873eAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Fri Sep 20 22:58:46 2024 +0300 LightPT - OutputListIsClearedFromSpaces := False; Coords - DrawLine commit078281db17Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Thu Sep 19 22:42:44 2024 +0300 coords suite commit8d51f999a5Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Thu Sep 19 20:28:28 2024 +0300 Автоклассы - разрешение наследования от классов без полей Модуль Coords commit8f7e92d418Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Mon Sep 16 08:25:43 2024 +0300 Turtle переделал на паттерн Команда commita6f6d8a90bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Sep 7 23:11:54 2024 +0300 Правки рейтинга в TeacherPlugin commit2365eb3633Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Sep 7 15:54:15 2024 +0300 LinkLabel в TeacherControlPlugin commit1835b811efAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Sep 3 23:51:44 2024 +0300 MathNet Signed commitb23d6df9e9Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Sep 3 23:16:15 2024 +0300 MathNet.Numerics.dll commit790fba67b8Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Aug 27 17:56:09 2024 +0300 3.10.0 commit1ec4204fd2Author: Sun Serega <sunserega2@gmail.com> Date: Mon Aug 26 09:20:27 2024 +0300 `.Batch` cleanup (#3108) commitb5e674c311Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Mon Aug 26 09:12:14 2024 +0300 3_10_0 commit7face043cfAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Mon Aug 26 09:11:08 2024 +0300 ToSet commite456ad528eAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Aug 24 23:13:57 2024 +0300 3.9.0.3530 commit3247469e6dAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Aug 24 22:55:27 2024 +0300 Добавлен DrawPoints в Turtle Исправлена ошибка с отображением подписей в Y-координате commit7548142623Author: 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 := ',') commitd94885b950Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Aug 24 12:13:09 2024 +0300 randomElement для строк .ToReals - разделителями могут быть пробел табуляция и переход на новую строку NumberFormat - функция, возвращающая nfi commitae2e26acf8Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Fri Aug 23 19:33:55 2024 +0300 PT4 - новые dll файлы старых заданий серий A commit0f8aa6fa3cAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Aug 18 17:28:05 2024 +0300 SetOf как основной синоним HSet commitdb4b53be20Merge:86852e0a5b9fd59a84Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Aug 18 16:05:42 2024 +0300 Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet commit86852e0a59Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Aug 18 16:05:14 2024 +0300 School - ToBase(number: int64 commitb9fd59a840Author: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Aug 13 15:08:44 2024 +0200 #2830 commit4f0b0f8ba0Author: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Aug 13 14:43:49 2024 +0200 #3194 commite3ee0fed4cAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Aug 13 13:49:30 2024 +0200 #3097 commitd396c4a9feAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Aug 13 10:40:23 2024 +0200 #3178 commit0d846d2335Merge:e91e35398a65a86921Author: 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 commita65a869211Author: samuraiGH <anonimajzer3@mail.ru> Date: Mon Aug 12 15:50:42 2024 +0300 increasing pcu file version commite91e353984Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Aug 11 15:21:29 2024 +0300 Обновленный модуль Turtle.pas commitc18238df39Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Aug 6 20:18:57 2024 +0300 3.9.0.3523 commit1da2b524a6Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Aug 6 19:34:10 2024 +0300 School PrimeDivisors commit47c61d8b14Author: 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 commitfc3ab96caeAuthor: 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 commit64acde6460Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Jul 31 18:21:04 2024 +0300 Сделал возможным неявное приведение некоторого типа к array of T (при описании оператора в виде статической функции класса) School - IsPrime(n) commit3db5709101Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Jul 31 10:56:18 2024 +0300 ZipCartesianFuncs.pas commitc4fd47128bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Jul 30 22:56:03 2024 +0300 Zip, Cartesian - сделаны внешние функции до 5 параметров, в т.ч. с проекцией Zip, Cartesian - методы расширения дополнены чтобы было как во внешних Перегенерирована справка commit7d66f26d4fAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Mon Jul 1 00:16:43 2024 +0300 cleanup and more tests commit464dc794a8Author: samuraiGH <anonimajzer3@mail.ru> Date: Sun Jun 30 23:31:28 2024 +0300 cleanup and more comments commit32f126370cAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Sun Jun 30 21:35:06 2024 +0300 attempt to fix GetEnumerator resolving for Pascal types commitfb3eeeb28bAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Sat Jun 29 16:26:35 2024 +0300 fix tests commit84b0dfe537Author: samuraiGH <anonimajzer3@mail.ru> Date: Sat Jun 29 15:49:13 2024 +0300 fix getting MethodInfo commit5fa4d9fce7Author: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 22:45:07 2024 +0300 cold fix set of T resolving commit460ce636abAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 22:21:06 2024 +0300 hot fix set of T resolving commit83c2f29ac6Author: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 21:53:11 2024 +0300 fix method filtering again commitc840a1a47aAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 21:32:41 2024 +0300 fix type recovery commit2436627fddAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 19:18:32 2024 +0300 fixing method filtering commit15a05360a4Author: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 17:25:39 2024 +0300 attempt to fix GetEnumerator resolving for compiled types commit4fd020d084Author: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 17:21:00 2024 +0300 adding tests * Add time dot time handle Visitor * Move time dot time handeling to visitor only * Delete test_indented.txt * Create random1.pys * Add Examples * 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: commita484b0e82dAuthor: Sun Serega <sunserega2@gmail.com> Date: Thu Dec 12 13:49:17 2024 +0200 fix (#3231) commit6ef11f249cAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 10 11:05:45 2024 +0300 3.10.2 commitdb9679d89fAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 10 10:59:20 2024 +0300 Закончил превращение синтаксиса [] по умолчанию в массивы commit45fdde24b4Author: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Dec 8 18:08:00 2024 +0100 #3229 commit494b47624dMerge:5875b99297906d73daAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Dec 8 10:42:07 2024 +0100 Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet commit5875b99296Author: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Dec 8 10:41:53 2024 +0100 platformtarget native - .NET 9.0 commit7906d73da3Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 3 14:25:37 2024 +0300 Небольшие изменения в реализации операций с множествами commit087591c7b6Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Nov 27 11:37:07 2024 +0300 3.10.1 Coords - доработки Distance, Middle, DrawText с фоном и рамкой. Глобальные переменные настройки commitd268d4f83bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Thu Nov 21 22:24:07 2024 +0300 NSToBytes переделал с исключением commit2bacdc8c28Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Nov 20 13:20:33 2024 +0300 Комментарии к NewSet commite917ac8ecaAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Nov 20 12:42:15 2024 +0300 TypeName для set commit206289c6a7Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Nov 19 20:23:03 2024 +0300 Везде заменил _hs на hs в NewSet Убрал вызовы методов расширений NewSet в PABCSystem.pas Убрал var в operator + commitd8262078f6Author: 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 надо бы сделать исключение commitf8819665baAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Nov 16 10:56:11 2024 +0300 NS2 commit591d9ebe60Author: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Nov 13 21:34:10 2024 +0100 fix commitc6505634f4Author: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Nov 13 21:12:33 2024 +0100 fix commita6564df23cAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Nov 13 20:52:29 2024 +0100 fix in new sets commit03be5bd931Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Nov 13 22:13:41 2024 +0300 Переставил operator:= в NewSet commit96c68f1666Author: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Nov 12 21:38:07 2024 +0100 #3223 commit82776f3c77Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Nov 9 12:18:19 2024 +0300 NewSet - много мелких исправлений. Все тесты проходят кроме Tests 5 - видимо с pabcrtl.dll commitfbd63efa89Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Nov 3 16:59:48 2024 +0300 NewSets Некоторые тесты надо исправить commit746c4ae2c2Author: Ivan Bondarev <ibond84@googlemail.com> Date: Thu Oct 31 21:00:42 2024 +0100 #3221 commit350d07326dAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Thu Oct 31 18:35:51 2024 +0100 #3221 commitaae9ab408bAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Thu Oct 31 18:25:06 2024 +0100 #3221 commit1e4a811e04Author: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Oct 30 20:42:59 2024 +0100 test for #3219 commitd1a1247ecdAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Oct 30 20:24:16 2024 +0100 #3219 commit13b3071d80Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Mon Oct 28 22:42:17 2024 +0300 закомментировал extensions преобразования arr to set. Надеюсь в новой реализации всё исправить commit6d5c18f457Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Thu Oct 24 10:17:48 2024 +0300 SF XLSX.pas commit0c773a7ecbAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Oct 16 12:04:33 2024 +0300 tree.xml с парой новых узлов для Питона commit53b3fd0881Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Oct 9 14:09:01 2024 +0300 Добавил временное преобразование от array of T в set of T commit271d5792ceAuthor: 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 commit79f9ab73a0Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Oct 5 15:33:20 2024 +0300 PT4_32 commit0a20c8d32cAuthor: Sun Serega <sunserega2@gmail.com> Date: Thu Sep 26 09:02:31 2024 +0200 Add `.DistinctBy` (#3122) commit11981dbf47Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Sep 25 11:53:02 2024 +0300 IndexMinBy, IndexMaxBy MinBy, MaxBy - более эффективная реализация GraphWPF - SaveToClipboard commit3eb1d2bd85Author: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Sep 22 17:42:09 2024 +0200 #3197 commit20edd487e3Author: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Sep 22 12:39:03 2024 +0200 #3204 commit7261231c9cMerge:7debbe7029ab932977Author: 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 commit9ab9329771Author: AlexanderZemlyak <zemlyaksanya@mail.ru> Date: Sun Sep 22 10:23:18 2024 +0300 Add new projects in PascalACBNETLinux.sln commit7debbe702aAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Sep 21 14:29:38 2024 +0300 Критическое обновление LightPT commit40335b873eAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Fri Sep 20 22:58:46 2024 +0300 LightPT - OutputListIsClearedFromSpaces := False; Coords - DrawLine commit078281db17Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Thu Sep 19 22:42:44 2024 +0300 coords suite commit8d51f999a5Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Thu Sep 19 20:28:28 2024 +0300 Автоклассы - разрешение наследования от классов без полей Модуль Coords commit8f7e92d418Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Mon Sep 16 08:25:43 2024 +0300 Turtle переделал на паттерн Команда commita6f6d8a90bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Sep 7 23:11:54 2024 +0300 Правки рейтинга в TeacherPlugin commit2365eb3633Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Sep 7 15:54:15 2024 +0300 LinkLabel в TeacherControlPlugin commit1835b811efAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Sep 3 23:51:44 2024 +0300 MathNet Signed commitb23d6df9e9Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Sep 3 23:16:15 2024 +0300 MathNet.Numerics.dll commit790fba67b8Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Aug 27 17:56:09 2024 +0300 3.10.0 commit1ec4204fd2Author: Sun Serega <sunserega2@gmail.com> Date: Mon Aug 26 09:20:27 2024 +0300 `.Batch` cleanup (#3108) commitb5e674c311Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Mon Aug 26 09:12:14 2024 +0300 3_10_0 commit7face043cfAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Mon Aug 26 09:11:08 2024 +0300 ToSet commite456ad528eAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Aug 24 23:13:57 2024 +0300 3.9.0.3530 commit3247469e6dAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Aug 24 22:55:27 2024 +0300 Добавлен DrawPoints в Turtle Исправлена ошибка с отображением подписей в Y-координате commit7548142623Author: 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 := ',') commitd94885b950Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Aug 24 12:13:09 2024 +0300 randomElement для строк .ToReals - разделителями могут быть пробел табуляция и переход на новую строку NumberFormat - функция, возвращающая nfi commitae2e26acf8Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Fri Aug 23 19:33:55 2024 +0300 PT4 - новые dll файлы старых заданий серий A commit0f8aa6fa3cAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Aug 18 17:28:05 2024 +0300 SetOf как основной синоним HSet commitdb4b53be20Merge:86852e0a5b9fd59a84Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Aug 18 16:05:42 2024 +0300 Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet commit86852e0a59Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Aug 18 16:05:14 2024 +0300 School - ToBase(number: int64 commitb9fd59a840Author: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Aug 13 15:08:44 2024 +0200 #2830 commit4f0b0f8ba0Author: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Aug 13 14:43:49 2024 +0200 #3194 commite3ee0fed4cAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Aug 13 13:49:30 2024 +0200 #3097 commitd396c4a9feAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Aug 13 10:40:23 2024 +0200 #3178 commit0d846d2335Merge:e91e35398a65a86921Author: 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 commita65a869211Author: samuraiGH <anonimajzer3@mail.ru> Date: Mon Aug 12 15:50:42 2024 +0300 increasing pcu file version commite91e353984Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Aug 11 15:21:29 2024 +0300 Обновленный модуль Turtle.pas commitc18238df39Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Aug 6 20:18:57 2024 +0300 3.9.0.3523 commit1da2b524a6Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Aug 6 19:34:10 2024 +0300 School PrimeDivisors commit47c61d8b14Author: 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 commitfc3ab96caeAuthor: 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 commit64acde6460Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Jul 31 18:21:04 2024 +0300 Сделал возможным неявное приведение некоторого типа к array of T (при описании оператора в виде статической функции класса) School - IsPrime(n) commit3db5709101Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Jul 31 10:56:18 2024 +0300 ZipCartesianFuncs.pas commitc4fd47128bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Jul 30 22:56:03 2024 +0300 Zip, Cartesian - сделаны внешние функции до 5 параметров, в т.ч. с проекцией Zip, Cartesian - методы расширения дополнены чтобы было как во внешних Перегенерирована справка commit7d66f26d4fAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Mon Jul 1 00:16:43 2024 +0300 cleanup and more tests commit464dc794a8Author: samuraiGH <anonimajzer3@mail.ru> Date: Sun Jun 30 23:31:28 2024 +0300 cleanup and more comments commit32f126370cAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Sun Jun 30 21:35:06 2024 +0300 attempt to fix GetEnumerator resolving for Pascal types commitfb3eeeb28bAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Sat Jun 29 16:26:35 2024 +0300 fix tests commit84b0dfe537Author: samuraiGH <anonimajzer3@mail.ru> Date: Sat Jun 29 15:49:13 2024 +0300 fix getting MethodInfo commit5fa4d9fce7Author: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 22:45:07 2024 +0300 cold fix set of T resolving commit460ce636abAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 22:21:06 2024 +0300 hot fix set of T resolving commit83c2f29ac6Author: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 21:53:11 2024 +0300 fix method filtering again commitc840a1a47aAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 21:32:41 2024 +0300 fix type recovery commit2436627fddAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 19:18:32 2024 +0300 fixing method filtering commit15a05360a4Author: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 17:25:39 2024 +0300 attempt to fix GetEnumerator resolving for compiled types commit4fd020d084Author: 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: commitb68b8da970Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 17 15:52:18 2024 +0300 Примеры Coords1.pas Coords2.pas.pas commit8a9788e6f9Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 17 15:06:57 2024 +0300 Перенес проверку set array на уровень парсера Немного поправил Intellisense по наведению для NewSet По точке там что то другое работает commit874ddebad3Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Dec 14 21:00:38 2024 +0300 Поправил грамматику [] Теперь нельзя в режиме ## использовать атрибуты Зато можно [1,2,3].Print commit080fb487e1Merge:a53dcd9eda484b0e82Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Dec 14 15:25:24 2024 +0300 Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet commita53dcd9ed2Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Dec 14 15:25:16 2024 +0300 SF Prm Cmb для строк commita484b0e82dAuthor: Sun Serega <sunserega2@gmail.com> Date: Thu Dec 12 13:49:17 2024 +0200 fix (#3231) commit6ef11f249cAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 10 11:05:45 2024 +0300 3.10.2 commitdb9679d89fAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 10 10:59:20 2024 +0300 Закончил превращение синтаксиса [] по умолчанию в массивы commit45fdde24b4Author: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Dec 8 18:08:00 2024 +0100 #3229 commit494b47624dMerge:5875b99297906d73daAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Dec 8 10:42:07 2024 +0100 Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet commit5875b99296Author: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Dec 8 10:41:53 2024 +0100 platformtarget native - .NET 9.0 commit7906d73da3Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 3 14:25:37 2024 +0300 Небольшие изменения в реализации операций с множествами commit087591c7b6Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Nov 27 11:37:07 2024 +0300 3.10.1 Coords - доработки Distance, Middle, DrawText с фоном и рамкой. Глобальные переменные настройки commitd268d4f83bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Thu Nov 21 22:24:07 2024 +0300 NSToBytes переделал с исключением commit2bacdc8c28Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Nov 20 13:20:33 2024 +0300 Комментарии к NewSet commite917ac8ecaAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Nov 20 12:42:15 2024 +0300 TypeName для set commit206289c6a7Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Nov 19 20:23:03 2024 +0300 Везде заменил _hs на hs в NewSet Убрал вызовы методов расширений NewSet в PABCSystem.pas Убрал var в operator + commitd8262078f6Author: 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 надо бы сделать исключение commitf8819665baAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Nov 16 10:56:11 2024 +0300 NS2 commit591d9ebe60Author: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Nov 13 21:34:10 2024 +0100 fix commitc6505634f4Author: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Nov 13 21:12:33 2024 +0100 fix commita6564df23cAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Nov 13 20:52:29 2024 +0100 fix in new sets commit03be5bd931Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Nov 13 22:13:41 2024 +0300 Переставил operator:= в NewSet commit96c68f1666Author: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Nov 12 21:38:07 2024 +0100 #3223 commit82776f3c77Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Nov 9 12:18:19 2024 +0300 NewSet - много мелких исправлений. Все тесты проходят кроме Tests 5 - видимо с pabcrtl.dll commitfbd63efa89Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Nov 3 16:59:48 2024 +0300 NewSets Некоторые тесты надо исправить commit746c4ae2c2Author: Ivan Bondarev <ibond84@googlemail.com> Date: Thu Oct 31 21:00:42 2024 +0100 #3221 commit350d07326dAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Thu Oct 31 18:35:51 2024 +0100 #3221 commitaae9ab408bAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Thu Oct 31 18:25:06 2024 +0100 #3221 commit1e4a811e04Author: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Oct 30 20:42:59 2024 +0100 test for #3219 commitd1a1247ecdAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Oct 30 20:24:16 2024 +0100 #3219 commit13b3071d80Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Mon Oct 28 22:42:17 2024 +0300 закомментировал extensions преобразования arr to set. Надеюсь в новой реализации всё исправить commit6d5c18f457Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Thu Oct 24 10:17:48 2024 +0300 SF XLSX.pas commit0c773a7ecbAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Oct 16 12:04:33 2024 +0300 tree.xml с парой новых узлов для Питона commit53b3fd0881Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Oct 9 14:09:01 2024 +0300 Добавил временное преобразование от array of T в set of T commit271d5792ceAuthor: 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 commit79f9ab73a0Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Oct 5 15:33:20 2024 +0300 PT4_32 commit0a20c8d32cAuthor: Sun Serega <sunserega2@gmail.com> Date: Thu Sep 26 09:02:31 2024 +0200 Add `.DistinctBy` (#3122) commit11981dbf47Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Sep 25 11:53:02 2024 +0300 IndexMinBy, IndexMaxBy MinBy, MaxBy - более эффективная реализация GraphWPF - SaveToClipboard commit3eb1d2bd85Author: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Sep 22 17:42:09 2024 +0200 #3197 commit20edd487e3Author: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Sep 22 12:39:03 2024 +0200 #3204 commit7261231c9cMerge:7debbe7029ab932977Author: 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 commit9ab9329771Author: AlexanderZemlyak <zemlyaksanya@mail.ru> Date: Sun Sep 22 10:23:18 2024 +0300 Add new projects in PascalACBNETLinux.sln commit7debbe702aAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Sep 21 14:29:38 2024 +0300 Критическое обновление LightPT commit40335b873eAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Fri Sep 20 22:58:46 2024 +0300 LightPT - OutputListIsClearedFromSpaces := False; Coords - DrawLine commit078281db17Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Thu Sep 19 22:42:44 2024 +0300 coords suite commit8d51f999a5Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Thu Sep 19 20:28:28 2024 +0300 Автоклассы - разрешение наследования от классов без полей Модуль Coords commit8f7e92d418Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Mon Sep 16 08:25:43 2024 +0300 Turtle переделал на паттерн Команда commita6f6d8a90bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Sep 7 23:11:54 2024 +0300 Правки рейтинга в TeacherPlugin commit2365eb3633Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Sep 7 15:54:15 2024 +0300 LinkLabel в TeacherControlPlugin commit1835b811efAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Sep 3 23:51:44 2024 +0300 MathNet Signed commitb23d6df9e9Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Sep 3 23:16:15 2024 +0300 MathNet.Numerics.dll commit790fba67b8Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Aug 27 17:56:09 2024 +0300 3.10.0 commit1ec4204fd2Author: Sun Serega <sunserega2@gmail.com> Date: Mon Aug 26 09:20:27 2024 +0300 `.Batch` cleanup (#3108) commitb5e674c311Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Mon Aug 26 09:12:14 2024 +0300 3_10_0 commit7face043cfAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Mon Aug 26 09:11:08 2024 +0300 ToSet commite456ad528eAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Aug 24 23:13:57 2024 +0300 3.9.0.3530 commit3247469e6dAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Aug 24 22:55:27 2024 +0300 Добавлен DrawPoints в Turtle Исправлена ошибка с отображением подписей в Y-координате commit7548142623Author: 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 := ',') commitd94885b950Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Aug 24 12:13:09 2024 +0300 randomElement для строк .ToReals - разделителями могут быть пробел табуляция и переход на новую строку NumberFormat - функция, возвращающая nfi commitae2e26acf8Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Fri Aug 23 19:33:55 2024 +0300 PT4 - новые dll файлы старых заданий серий A commit0f8aa6fa3cAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Aug 18 17:28:05 2024 +0300 SetOf как основной синоним HSet commitdb4b53be20Merge:86852e0a5b9fd59a84Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Aug 18 16:05:42 2024 +0300 Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet commit86852e0a59Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Aug 18 16:05:14 2024 +0300 School - ToBase(number: int64 commitb9fd59a840Author: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Aug 13 15:08:44 2024 +0200 #2830 commit4f0b0f8ba0Author: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Aug 13 14:43:49 2024 +0200 #3194 commite3ee0fed4cAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Aug 13 13:49:30 2024 +0200 #3097 commitd396c4a9feAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Aug 13 10:40:23 2024 +0200 #3178 commit0d846d2335Merge:e91e35398a65a86921Author: 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 commita65a869211Author: samuraiGH <anonimajzer3@mail.ru> Date: Mon Aug 12 15:50:42 2024 +0300 increasing pcu file version commite91e353984Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Aug 11 15:21:29 2024 +0300 Обновленный модуль Turtle.pas commitc18238df39Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Aug 6 20:18:57 2024 +0300 3.9.0.3523 commit1da2b524a6Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Aug 6 19:34:10 2024 +0300 School PrimeDivisors commit47c61d8b14Author: 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 commitfc3ab96caeAuthor: 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 commit64acde6460Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Jul 31 18:21:04 2024 +0300 Сделал возможным неявное приведение некоторого типа к array of T (при описании оператора в виде статической функции класса) School - IsPrime(n) commit3db5709101Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Jul 31 10:56:18 2024 +0300 ZipCartesianFuncs.pas commitc4fd47128bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Jul 30 22:56:03 2024 +0300 Zip, Cartesian - сделаны внешние функции до 5 параметров, в т.ч. с проекцией Zip, Cartesian - методы расширения дополнены чтобы было как во внешних Перегенерирована справка commit7d66f26d4fAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Mon Jul 1 00:16:43 2024 +0300 cleanup and more tests commit464dc794a8Author: samuraiGH <anonimajzer3@mail.ru> Date: Sun Jun 30 23:31:28 2024 +0300 cleanup and more comments commit32f126370cAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Sun Jun 30 21:35:06 2024 +0300 attempt to fix GetEnumerator resolving for Pascal types commitfb3eeeb28bAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Sat Jun 29 16:26:35 2024 +0300 fix tests commit84b0dfe537Author: samuraiGH <anonimajzer3@mail.ru> Date: Sat Jun 29 15:49:13 2024 +0300 fix getting MethodInfo commit5fa4d9fce7Author: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 22:45:07 2024 +0300 cold fix set of T resolving commit460ce636abAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 22:21:06 2024 +0300 hot fix set of T resolving commit83c2f29ac6Author: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 21:53:11 2024 +0300 fix method filtering again commitc840a1a47aAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 21:32:41 2024 +0300 fix type recovery commit2436627fddAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 19:18:32 2024 +0300 fixing method filtering commit15a05360a4Author: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 17:25:39 2024 +0300 attempt to fix GetEnumerator resolving for compiled types commit4fd020d084Author: 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: commit41dfb6f187Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Fri Feb 7 21:41:01 2025 +0300 [] - преобразование во все контейнеры GraphABCHelper - теперь ABCObjects работает под Линукс School исправлен согласно последним веяниям [] commit79bbbd10ffAuthor: samuraiGH <87191377+samuraiGH@users.noreply.github.com> Date: Wed Jan 29 20:18:37 2025 +0300 removing files for support fx4.0 (#3240) commit88d5c409ebAuthor: 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 commit8fbd7fdfc3Author: 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) commitbba132bd5dAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Jan 22 09:14:44 2025 +0300 Поправил справку по функции commit1bd21857ccAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Jan 8 18:46:51 2025 +0300 Teacher Control Plugin - возможность задать server.dat commit0848a1b796Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Jan 4 22:54:38 2025 +0300 Исправление автоформатирования [] commitd45b782a7bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Jan 4 18:45:07 2025 +0300 Rename PABCSistem in test suite commitc2347e604bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Jan 4 14:44:51 2025 +0300 Примеры - устранил неточности LightPT - имя сервера вынес в публичную секцию commitb68b8da970Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 17 15:52:18 2024 +0300 Примеры Coords1.pas Coords2.pas.pas commit8a9788e6f9Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 17 15:06:57 2024 +0300 Перенес проверку set array на уровень парсера Немного поправил Intellisense по наведению для NewSet По точке там что то другое работает commit874ddebad3Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Dec 14 21:00:38 2024 +0300 Поправил грамматику [] Теперь нельзя в режиме ## использовать атрибуты Зато можно [1,2,3].Print commit080fb487e1Merge:a53dcd9eda484b0e82Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Dec 14 15:25:24 2024 +0300 Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet commita53dcd9ed2Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Dec 14 15:25:16 2024 +0300 SF Prm Cmb для строк commita484b0e82dAuthor: Sun Serega <sunserega2@gmail.com> Date: Thu Dec 12 13:49:17 2024 +0200 fix (#3231) commit6ef11f249cAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 10 11:05:45 2024 +0300 3.10.2 commitdb9679d89fAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 10 10:59:20 2024 +0300 Закончил превращение синтаксиса [] по умолчанию в массивы commit45fdde24b4Author: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Dec 8 18:08:00 2024 +0100 #3229 commit494b47624dMerge:5875b99297906d73daAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Dec 8 10:42:07 2024 +0100 Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet commit5875b99296Author: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Dec 8 10:41:53 2024 +0100 platformtarget native - .NET 9.0 commit7906d73da3Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 3 14:25:37 2024 +0300 Небольшие изменения в реализации операций с множествами commit087591c7b6Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Nov 27 11:37:07 2024 +0300 3.10.1 Coords - доработки Distance, Middle, DrawText с фоном и рамкой. Глобальные переменные настройки commitd268d4f83bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Thu Nov 21 22:24:07 2024 +0300 NSToBytes переделал с исключением commit2bacdc8c28Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Nov 20 13:20:33 2024 +0300 Комментарии к NewSet commite917ac8ecaAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Nov 20 12:42:15 2024 +0300 TypeName для set commit206289c6a7Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Nov 19 20:23:03 2024 +0300 Везде заменил _hs на hs в NewSet Убрал вызовы методов расширений NewSet в PABCSystem.pas Убрал var в operator + commitd8262078f6Author: 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 надо бы сделать исключение commitf8819665baAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Nov 16 10:56:11 2024 +0300 NS2 commit591d9ebe60Author: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Nov 13 21:34:10 2024 +0100 fix commitc6505634f4Author: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Nov 13 21:12:33 2024 +0100 fix commita6564df23cAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Nov 13 20:52:29 2024 +0100 fix in new sets commit03be5bd931Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Nov 13 22:13:41 2024 +0300 Переставил operator:= в NewSet commit96c68f1666Author: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Nov 12 21:38:07 2024 +0100 #3223 commit82776f3c77Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Nov 9 12:18:19 2024 +0300 NewSet - много мелких исправлений. Все тесты проходят кроме Tests 5 - видимо с pabcrtl.dll commitfbd63efa89Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Nov 3 16:59:48 2024 +0300 NewSets Некоторые тесты надо исправить commit746c4ae2c2Author: Ivan Bondarev <ibond84@googlemail.com> Date: Thu Oct 31 21:00:42 2024 +0100 #3221 commit350d07326dAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Thu Oct 31 18:35:51 2024 +0100 #3221 commitaae9ab408bAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Thu Oct 31 18:25:06 2024 +0100 #3221 commit1e4a811e04Author: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Oct 30 20:42:59 2024 +0100 test for #3219 commitd1a1247ecdAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Oct 30 20:24:16 2024 +0100 #3219 commit13b3071d80Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Mon Oct 28 22:42:17 2024 +0300 закомментировал extensions преобразования arr to set. Надеюсь в новой реализации всё исправить commit6d5c18f457Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Thu Oct 24 10:17:48 2024 +0300 SF XLSX.pas commit0c773a7ecbAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Oct 16 12:04:33 2024 +0300 tree.xml с парой новых узлов для Питона commit53b3fd0881Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Oct 9 14:09:01 2024 +0300 Добавил временное преобразование от array of T в set of T commit271d5792ceAuthor: 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 commit79f9ab73a0Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Oct 5 15:33:20 2024 +0300 PT4_32 commit0a20c8d32cAuthor: Sun Serega <sunserega2@gmail.com> Date: Thu Sep 26 09:02:31 2024 +0200 Add `.DistinctBy` (#3122) commit11981dbf47Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Sep 25 11:53:02 2024 +0300 IndexMinBy, IndexMaxBy MinBy, MaxBy - более эффективная реализация GraphWPF - SaveToClipboard commit3eb1d2bd85Author: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Sep 22 17:42:09 2024 +0200 #3197 commit20edd487e3Author: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Sep 22 12:39:03 2024 +0200 #3204 commit7261231c9cMerge:7debbe7029ab932977Author: 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 commit9ab9329771Author: AlexanderZemlyak <zemlyaksanya@mail.ru> Date: Sun Sep 22 10:23:18 2024 +0300 Add new projects in PascalACBNETLinux.sln commit7debbe702aAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Sep 21 14:29:38 2024 +0300 Критическое обновление LightPT commit40335b873eAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Fri Sep 20 22:58:46 2024 +0300 LightPT - OutputListIsClearedFromSpaces := False; Coords - DrawLine commit078281db17Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Thu Sep 19 22:42:44 2024 +0300 coords suite commit8d51f999a5Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Thu Sep 19 20:28:28 2024 +0300 Автоклассы - разрешение наследования от классов без полей Модуль Coords commit8f7e92d418Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Mon Sep 16 08:25:43 2024 +0300 Turtle переделал на паттерн Команда commita6f6d8a90bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Sep 7 23:11:54 2024 +0300 Правки рейтинга в TeacherPlugin commit2365eb3633Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Sep 7 15:54:15 2024 +0300 LinkLabel в TeacherControlPlugin commit1835b811efAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Sep 3 23:51:44 2024 +0300 MathNet Signed commitb23d6df9e9Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Sep 3 23:16:15 2024 +0300 MathNet.Numerics.dll commit790fba67b8Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Aug 27 17:56:09 2024 +0300 3.10.0 commit1ec4204fd2Author: Sun Serega <sunserega2@gmail.com> Date: Mon Aug 26 09:20:27 2024 +0300 `.Batch` cleanup (#3108) commitb5e674c311Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Mon Aug 26 09:12:14 2024 +0300 3_10_0 commit7face043cfAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Mon Aug 26 09:11:08 2024 +0300 ToSet commite456ad528eAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Aug 24 23:13:57 2024 +0300 3.9.0.3530 commit3247469e6dAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Aug 24 22:55:27 2024 +0300 Добавлен DrawPoints в Turtle Исправлена ошибка с отображением подписей в Y-координате commit7548142623Author: 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 := ',') commitd94885b950Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Aug 24 12:13:09 2024 +0300 randomElement для строк .ToReals - разделителями могут быть пробел табуляция и переход на новую строку NumberFormat - функция, возвращающая nfi commitae2e26acf8Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Fri Aug 23 19:33:55 2024 +0300 PT4 - новые dll файлы старых заданий серий A commit0f8aa6fa3cAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Aug 18 17:28:05 2024 +0300 SetOf как основной синоним HSet commitdb4b53be20Merge:86852e0a5b9fd59a84Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Aug 18 16:05:42 2024 +0300 Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet commit86852e0a59Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Aug 18 16:05:14 2024 +0300 School - ToBase(number: int64 commitb9fd59a840Author: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Aug 13 15:08:44 2024 +0200 #2830 commit4f0b0f8ba0Author: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Aug 13 14:43:49 2024 +0200 #3194 commite3ee0fed4cAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Aug 13 13:49:30 2024 +0200 #3097 commitd396c4a9feAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Aug 13 10:40:23 2024 +0200 #3178 commit0d846d2335Merge:e91e35398a65a86921Author: 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 commita65a869211Author: samuraiGH <anonimajzer3@mail.ru> Date: Mon Aug 12 15:50:42 2024 +0300 increasing pcu file version commite91e353984Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Aug 11 15:21:29 2024 +0300 Обновленный модуль Turtle.pas commitc18238df39Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Aug 6 20:18:57 2024 +0300 3.9.0.3523 commit1da2b524a6Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Aug 6 19:34:10 2024 +0300 School PrimeDivisors commit47c61d8b14Author: 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 commitfc3ab96caeAuthor: 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 commit64acde6460Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Jul 31 18:21:04 2024 +0300 Сделал возможным неявное приведение некоторого типа к array of T (при описании оператора в виде статической функции класса) School - IsPrime(n) commit3db5709101Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Jul 31 10:56:18 2024 +0300 ZipCartesianFuncs.pas commitc4fd47128bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Jul 30 22:56:03 2024 +0300 Zip, Cartesian - сделаны внешние функции до 5 параметров, в т.ч. с проекцией Zip, Cartesian - методы расширения дополнены чтобы было как во внешних Перегенерирована справка commit7d66f26d4fAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Mon Jul 1 00:16:43 2024 +0300 cleanup and more tests commit464dc794a8Author: samuraiGH <anonimajzer3@mail.ru> Date: Sun Jun 30 23:31:28 2024 +0300 cleanup and more comments commit32f126370cAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Sun Jun 30 21:35:06 2024 +0300 attempt to fix GetEnumerator resolving for Pascal types commitfb3eeeb28bAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Sat Jun 29 16:26:35 2024 +0300 fix tests commit84b0dfe537Author: samuraiGH <anonimajzer3@mail.ru> Date: Sat Jun 29 15:49:13 2024 +0300 fix getting MethodInfo commit5fa4d9fce7Author: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 22:45:07 2024 +0300 cold fix set of T resolving commit460ce636abAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 22:21:06 2024 +0300 hot fix set of T resolving commit83c2f29ac6Author: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 21:53:11 2024 +0300 fix method filtering again commitc840a1a47aAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 21:32:41 2024 +0300 fix type recovery commit2436627fddAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 19:18:32 2024 +0300 fixing method filtering commit15a05360a4Author: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 17:25:39 2024 +0300 attempt to fix GetEnumerator resolving for compiled types commit4fd020d084Author: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 17:21:00 2024 +0300 adding tests * Squashed commit of the following: commit1fd348ec3cAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Feb 23 20:49:26 2025 +0300 NSIS New 3.10 Ярлык в меню Пуск у всех пользователей commit80b7182dc1Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Feb 19 11:50:00 2025 +0300 _ in names commita2b078960bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Feb 19 10:52:25 2025 +0300 cnfc2 commit58f26d469dAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Feb 18 22:28:13 2025 +0300 перекомпиляция 3.10.3.3611 commitb78a72977fAuthor: 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 commitc3557e388cAuthor: 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 commit9dbac389e1Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com> Date: Wed Feb 12 13:57:14 2025 +0300 Add missing projects to pabcnetc.sln (#3247) commit41dfb6f187Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Fri Feb 7 21:41:01 2025 +0300 [] - преобразование во все контейнеры GraphABCHelper - теперь ABCObjects работает под Линукс School исправлен согласно последним веяниям [] commit79bbbd10ffAuthor: samuraiGH <87191377+samuraiGH@users.noreply.github.com> Date: Wed Jan 29 20:18:37 2025 +0300 removing files for support fx4.0 (#3240) commit88d5c409ebAuthor: 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 commit8fbd7fdfc3Author: 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) commitbba132bd5dAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Jan 22 09:14:44 2025 +0300 Поправил справку по функции commit1bd21857ccAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Jan 8 18:46:51 2025 +0300 Teacher Control Plugin - возможность задать server.dat commit0848a1b796Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Jan 4 22:54:38 2025 +0300 Исправление автоформатирования [] commitd45b782a7bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Jan 4 18:45:07 2025 +0300 Rename PABCSistem in test suite commitc2347e604bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Jan 4 14:44:51 2025 +0300 Примеры - устранил неточности LightPT - имя сервера вынес в публичную секцию commitb68b8da970Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 17 15:52:18 2024 +0300 Примеры Coords1.pas Coords2.pas.pas commit8a9788e6f9Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 17 15:06:57 2024 +0300 Перенес проверку set array на уровень парсера Немного поправил Intellisense по наведению для NewSet По точке там что то другое работает commit874ddebad3Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Dec 14 21:00:38 2024 +0300 Поправил грамматику [] Теперь нельзя в режиме ## использовать атрибуты Зато можно [1,2,3].Print commit080fb487e1Merge:a53dcd9eda484b0e82Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Dec 14 15:25:24 2024 +0300 Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet commita53dcd9ed2Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Dec 14 15:25:16 2024 +0300 SF Prm Cmb для строк commita484b0e82dAuthor: Sun Serega <sunserega2@gmail.com> Date: Thu Dec 12 13:49:17 2024 +0200 fix (#3231) commit6ef11f249cAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 10 11:05:45 2024 +0300 3.10.2 commitdb9679d89fAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 10 10:59:20 2024 +0300 Закончил превращение синтаксиса [] по умолчанию в массивы commit45fdde24b4Author: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Dec 8 18:08:00 2024 +0100 #3229 commit494b47624dMerge:5875b99297906d73daAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Dec 8 10:42:07 2024 +0100 Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet commit5875b99296Author: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Dec 8 10:41:53 2024 +0100 platformtarget native - .NET 9.0 commit7906d73da3Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 3 14:25:37 2024 +0300 Небольшие изменения в реализации операций с множествами commit087591c7b6Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Nov 27 11:37:07 2024 +0300 3.10.1 Coords - доработки Distance, Middle, DrawText с фоном и рамкой. Глобальные переменные настройки commitd268d4f83bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Thu Nov 21 22:24:07 2024 +0300 NSToBytes переделал с исключением commit2bacdc8c28Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Nov 20 13:20:33 2024 +0300 Комментарии к NewSet commite917ac8ecaAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Nov 20 12:42:15 2024 +0300 TypeName для set commit206289c6a7Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Nov 19 20:23:03 2024 +0300 Везде заменил _hs на hs в NewSet Убрал вызовы методов расширений NewSet в PABCSystem.pas Убрал var в operator + commitd8262078f6Author: 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 надо бы сделать исключение commitf8819665baAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Nov 16 10:56:11 2024 +0300 NS2 commit591d9ebe60Author: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Nov 13 21:34:10 2024 +0100 fix commitc6505634f4Author: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Nov 13 21:12:33 2024 +0100 fix commita6564df23cAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Nov 13 20:52:29 2024 +0100 fix in new sets commit03be5bd931Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Nov 13 22:13:41 2024 +0300 Переставил operator:= в NewSet commit96c68f1666Author: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Nov 12 21:38:07 2024 +0100 #3223 commit82776f3c77Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Nov 9 12:18:19 2024 +0300 NewSet - много мелких исправлений. Все тесты проходят кроме Tests 5 - видимо с pabcrtl.dll commitfbd63efa89Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Nov 3 16:59:48 2024 +0300 NewSets Некоторые тесты надо исправить commit746c4ae2c2Author: Ivan Bondarev <ibond84@googlemail.com> Date: Thu Oct 31 21:00:42 2024 +0100 #3221 commit350d07326dAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Thu Oct 31 18:35:51 2024 +0100 #3221 commitaae9ab408bAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Thu Oct 31 18:25:06 2024 +0100 #3221 commit1e4a811e04Author: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Oct 30 20:42:59 2024 +0100 test for #3219 commitd1a1247ecdAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Oct 30 20:24:16 2024 +0100 #3219 commit13b3071d80Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Mon Oct 28 22:42:17 2024 +0300 закомментировал extensions преобразования arr to set. Надеюсь в новой реализации всё исправить commit6d5c18f457Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Thu Oct 24 10:17:48 2024 +0300 SF XLSX.pas commit0c773a7ecbAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Oct 16 12:04:33 2024 +0300 tree.xml с парой новых узлов для Питона commit53b3fd0881Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Oct 9 14:09:01 2024 +0300 Добавил временное преобразование от array of T в set of T commit271d5792ceAuthor: 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 commit79f9ab73a0Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Oct 5 15:33:20 2024 +0300 PT4_32 commit0a20c8d32cAuthor: Sun Serega <sunserega2@gmail.com> Date: Thu Sep 26 09:02:31 2024 +0200 Add `.DistinctBy` (#3122) commit11981dbf47Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Sep 25 11:53:02 2024 +0300 IndexMinBy, IndexMaxBy MinBy, MaxBy - более эффективная реализация GraphWPF - SaveToClipboard commit3eb1d2bd85Author: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Sep 22 17:42:09 2024 +0200 #3197 commit20edd487e3Author: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Sep 22 12:39:03 2024 +0200 #3204 commit7261231c9cMerge:7debbe7029ab932977Author: 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 commit9ab9329771Author: AlexanderZemlyak <zemlyaksanya@mail.ru> Date: Sun Sep 22 10:23:18 2024 +0300 Add new projects in PascalACBNETLinux.sln commit7debbe702aAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Sep 21 14:29:38 2024 +0300 Критическое обновление LightPT commit40335b873eAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Fri Sep 20 22:58:46 2024 +0300 LightPT - OutputListIsClearedFromSpaces := False; Coords - DrawLine commit078281db17Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Thu Sep 19 22:42:44 2024 +0300 coords suite commit8d51f999a5Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Thu Sep 19 20:28:28 2024 +0300 Автоклассы - разрешение наследования от классов без полей Модуль Coords commit8f7e92d418Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Mon Sep 16 08:25:43 2024 +0300 Turtle переделал на паттерн Команда commita6f6d8a90bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Sep 7 23:11:54 2024 +0300 Правки рейтинга в TeacherPlugin commit2365eb3633Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Sep 7 15:54:15 2024 +0300 LinkLabel в TeacherControlPlugin commit1835b811efAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Sep 3 23:51:44 2024 +0300 MathNet Signed commitb23d6df9e9Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Sep 3 23:16:15 2024 +0300 MathNet.Numerics.dll commit790fba67b8Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Aug 27 17:56:09 2024 +0300 3.10.0 commit1ec4204fd2Author: Sun Serega <sunserega2@gmail.com> Date: Mon Aug 26 09:20:27 2024 +0300 `.Batch` cleanup (#3108) commitb5e674c311Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Mon Aug 26 09:12:14 2024 +0300 3_10_0 commit7face043cfAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Mon Aug 26 09:11:08 2024 +0300 ToSet commite456ad528eAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Aug 24 23:13:57 2024 +0300 3.9.0.3530 commit3247469e6dAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Aug 24 22:55:27 2024 +0300 Добавлен DrawPoints в Turtle Исправлена ошибка с отображением подписей в Y-координате commit7548142623Author: 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 := ',') commitd94885b950Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Aug 24 12:13:09 2024 +0300 randomElement для строк .ToReals - разделителями могут быть пробел табуляция и переход на новую строку NumberFormat - функция, возвращающая nfi commitae2e26acf8Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Fri Aug 23 19:33:55 2024 +0300 PT4 - новые dll файлы старых заданий серий A commit0f8aa6fa3cAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Aug 18 17:28:05 2024 +0300 SetOf как основной синоним HSet commitdb4b53be20Merge:86852e0a5b9fd59a84Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Aug 18 16:05:42 2024 +0300 Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet commit86852e0a59Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Aug 18 16:05:14 2024 +0300 School - ToBase(number: int64 commitb9fd59a840Author: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Aug 13 15:08:44 2024 +0200 #2830 commit4f0b0f8ba0Author: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Aug 13 14:43:49 2024 +0200 #3194 commite3ee0fed4cAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Aug 13 13:49:30 2024 +0200 #3097 commitd396c4a9feAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Aug 13 10:40:23 2024 +0200 #3178 commit0d846d2335Merge:e91e35398a65a86921Author: 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 commita65a869211Author: samuraiGH <anonimajzer3@mail.ru> Date: Mon Aug 12 15:50:42 2024 +0300 increasing pcu file version commite91e353984Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Aug 11 15:21:29 2024 +0300 Обновленный модуль Turtle.pas commitc18238df39Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Aug 6 20:18:57 2024 +0300 3.9.0.3523 commit1da2b524a6Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Aug 6 19:34:10 2024 +0300 School PrimeDivisors commit47c61d8b14Author: 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 commitfc3ab96caeAuthor: 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 commit64acde6460Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Jul 31 18:21:04 2024 +0300 Сделал возможным неявное приведение некоторого типа к array of T (при описании оператора в виде статической функции класса) School - IsPrime(n) commit3db5709101Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Jul 31 10:56:18 2024 +0300 ZipCartesianFuncs.pas commitc4fd47128bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Jul 30 22:56:03 2024 +0300 Zip, Cartesian - сделаны внешние функции до 5 параметров, в т.ч. с проекцией Zip, Cartesian - методы расширения дополнены чтобы было как во внешних Перегенерирована справка commit7d66f26d4fAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Mon Jul 1 00:16:43 2024 +0300 cleanup and more tests commit464dc794a8Author: samuraiGH <anonimajzer3@mail.ru> Date: Sun Jun 30 23:31:28 2024 +0300 cleanup and more comments commit32f126370cAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Sun Jun 30 21:35:06 2024 +0300 attempt to fix GetEnumerator resolving for Pascal types commitfb3eeeb28bAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Sat Jun 29 16:26:35 2024 +0300 fix tests commit84b0dfe537Author: samuraiGH <anonimajzer3@mail.ru> Date: Sat Jun 29 15:49:13 2024 +0300 fix getting MethodInfo commit5fa4d9fce7Author: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 22:45:07 2024 +0300 cold fix set of T resolving commit460ce636abAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 22:21:06 2024 +0300 hot fix set of T resolving commit83c2f29ac6Author: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 21:53:11 2024 +0300 fix method filtering again commitc840a1a47aAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 21:32:41 2024 +0300 fix type recovery commit2436627fddAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 19:18:32 2024 +0300 fixing method filtering commit15a05360a4Author: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 17:25:39 2024 +0300 attempt to fix GetEnumerator resolving for compiled types commit4fd020d084Author: 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: commit7751fe7e75Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com> Date: Sun Mar 16 13:28:03 2025 +0300 generating language res file at build time (#3252) commitd1fce63d69Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Mar 4 08:38:09 2025 +0300 Сборка после pr SDK commitd491e88aa7Author: 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 commit1fd348ec3cAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Feb 23 20:49:26 2025 +0300 NSIS New 3.10 Ярлык в меню Пуск у всех пользователей commit80b7182dc1Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Feb 19 11:50:00 2025 +0300 _ in names commita2b078960bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Feb 19 10:52:25 2025 +0300 cnfc2 commit58f26d469dAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Feb 18 22:28:13 2025 +0300 перекомпиляция 3.10.3.3611 commitb78a72977fAuthor: 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 commitc3557e388cAuthor: 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 commit9dbac389e1Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com> Date: Wed Feb 12 13:57:14 2025 +0300 Add missing projects to pabcnetc.sln (#3247) commit41dfb6f187Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Fri Feb 7 21:41:01 2025 +0300 [] - преобразование во все контейнеры GraphABCHelper - теперь ABCObjects работает под Линукс School исправлен согласно последним веяниям [] commit79bbbd10ffAuthor: samuraiGH <87191377+samuraiGH@users.noreply.github.com> Date: Wed Jan 29 20:18:37 2025 +0300 removing files for support fx4.0 (#3240) commit88d5c409ebAuthor: 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 commit8fbd7fdfc3Author: 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) commitbba132bd5dAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Jan 22 09:14:44 2025 +0300 Поправил справку по функции commit1bd21857ccAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Jan 8 18:46:51 2025 +0300 Teacher Control Plugin - возможность задать server.dat commit0848a1b796Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Jan 4 22:54:38 2025 +0300 Исправление автоформатирования [] commitd45b782a7bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Jan 4 18:45:07 2025 +0300 Rename PABCSistem in test suite commitc2347e604bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Jan 4 14:44:51 2025 +0300 Примеры - устранил неточности LightPT - имя сервера вынес в публичную секцию commitb68b8da970Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 17 15:52:18 2024 +0300 Примеры Coords1.pas Coords2.pas.pas commit8a9788e6f9Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 17 15:06:57 2024 +0300 Перенес проверку set array на уровень парсера Немного поправил Intellisense по наведению для NewSet По точке там что то другое работает commit874ddebad3Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Dec 14 21:00:38 2024 +0300 Поправил грамматику [] Теперь нельзя в режиме ## использовать атрибуты Зато можно [1,2,3].Print commit080fb487e1Merge:a53dcd9eda484b0e82Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Dec 14 15:25:24 2024 +0300 Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet commita53dcd9ed2Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Dec 14 15:25:16 2024 +0300 SF Prm Cmb для строк commita484b0e82dAuthor: Sun Serega <sunserega2@gmail.com> Date: Thu Dec 12 13:49:17 2024 +0200 fix (#3231) commit6ef11f249cAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 10 11:05:45 2024 +0300 3.10.2 commitdb9679d89fAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 10 10:59:20 2024 +0300 Закончил превращение синтаксиса [] по умолчанию в массивы commit45fdde24b4Author: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Dec 8 18:08:00 2024 +0100 #3229 commit494b47624dMerge:5875b99297906d73daAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Dec 8 10:42:07 2024 +0100 Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet commit5875b99296Author: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Dec 8 10:41:53 2024 +0100 platformtarget native - .NET 9.0 commit7906d73da3Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 3 14:25:37 2024 +0300 Небольшие изменения в реализации операций с множествами commit087591c7b6Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Nov 27 11:37:07 2024 +0300 3.10.1 Coords - доработки Distance, Middle, DrawText с фоном и рамкой. Глобальные переменные настройки commitd268d4f83bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Thu Nov 21 22:24:07 2024 +0300 NSToBytes переделал с исключением commit2bacdc8c28Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Nov 20 13:20:33 2024 +0300 Комментарии к NewSet commite917ac8ecaAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Nov 20 12:42:15 2024 +0300 TypeName для set commit206289c6a7Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Nov 19 20:23:03 2024 +0300 Везде заменил _hs на hs в NewSet Убрал вызовы методов расширений NewSet в PABCSystem.pas Убрал var в operator + commitd8262078f6Author: 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 надо бы сделать исключение commitf8819665baAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Nov 16 10:56:11 2024 +0300 NS2 commit591d9ebe60Author: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Nov 13 21:34:10 2024 +0100 fix commitc6505634f4Author: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Nov 13 21:12:33 2024 +0100 fix commita6564df23cAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Nov 13 20:52:29 2024 +0100 fix in new sets commit03be5bd931Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Nov 13 22:13:41 2024 +0300 Переставил operator:= в NewSet commit96c68f1666Author: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Nov 12 21:38:07 2024 +0100 #3223 commit82776f3c77Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Nov 9 12:18:19 2024 +0300 NewSet - много мелких исправлений. Все тесты проходят кроме Tests 5 - видимо с pabcrtl.dll commitfbd63efa89Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Nov 3 16:59:48 2024 +0300 NewSets Некоторые тесты надо исправить commit746c4ae2c2Author: Ivan Bondarev <ibond84@googlemail.com> Date: Thu Oct 31 21:00:42 2024 +0100 #3221 commit350d07326dAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Thu Oct 31 18:35:51 2024 +0100 #3221 commitaae9ab408bAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Thu Oct 31 18:25:06 2024 +0100 #3221 commit1e4a811e04Author: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Oct 30 20:42:59 2024 +0100 test for #3219 commitd1a1247ecdAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Oct 30 20:24:16 2024 +0100 #3219 commit13b3071d80Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Mon Oct 28 22:42:17 2024 +0300 закомментировал extensions преобразования arr to set. Надеюсь в новой реализации всё исправить commit6d5c18f457Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Thu Oct 24 10:17:48 2024 +0300 SF XLSX.pas commit0c773a7ecbAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Oct 16 12:04:33 2024 +0300 tree.xml с парой новых узлов для Питона commit53b3fd0881Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Oct 9 14:09:01 2024 +0300 Добавил временное преобразование от array of T в set of T commit271d5792ceAuthor: 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 commit79f9ab73a0Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Oct 5 15:33:20 2024 +0300 PT4_32 commit0a20c8d32cAuthor: Sun Serega <sunserega2@gmail.com> Date: Thu Sep 26 09:02:31 2024 +0200 Add `.DistinctBy` (#3122) commit11981dbf47Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Sep 25 11:53:02 2024 +0300 IndexMinBy, IndexMaxBy MinBy, MaxBy - более эффективная реализация GraphWPF - SaveToClipboard commit3eb1d2bd85Author: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Sep 22 17:42:09 2024 +0200 #3197 commit20edd487e3Author: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Sep 22 12:39:03 2024 +0200 #3204 commit7261231c9cMerge:7debbe7029ab932977Author: 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 commit9ab9329771Author: AlexanderZemlyak <zemlyaksanya@mail.ru> Date: Sun Sep 22 10:23:18 2024 +0300 Add new projects in PascalACBNETLinux.sln commit7debbe702aAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Sep 21 14:29:38 2024 +0300 Критическое обновление LightPT commit40335b873eAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Fri Sep 20 22:58:46 2024 +0300 LightPT - OutputListIsClearedFromSpaces := False; Coords - DrawLine commit078281db17Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Thu Sep 19 22:42:44 2024 +0300 coords suite commit8d51f999a5Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Thu Sep 19 20:28:28 2024 +0300 Автоклассы - разрешение наследования от классов без полей Модуль Coords commit8f7e92d418Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Mon Sep 16 08:25:43 2024 +0300 Turtle переделал на паттерн Команда commita6f6d8a90bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Sep 7 23:11:54 2024 +0300 Правки рейтинга в TeacherPlugin commit2365eb3633Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Sep 7 15:54:15 2024 +0300 LinkLabel в TeacherControlPlugin commit1835b811efAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Sep 3 23:51:44 2024 +0300 MathNet Signed commitb23d6df9e9Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Sep 3 23:16:15 2024 +0300 MathNet.Numerics.dll commit790fba67b8Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Aug 27 17:56:09 2024 +0300 3.10.0 commit1ec4204fd2Author: Sun Serega <sunserega2@gmail.com> Date: Mon Aug 26 09:20:27 2024 +0300 `.Batch` cleanup (#3108) commitb5e674c311Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Mon Aug 26 09:12:14 2024 +0300 3_10_0 commit7face043cfAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Mon Aug 26 09:11:08 2024 +0300 ToSet commite456ad528eAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Aug 24 23:13:57 2024 +0300 3.9.0.3530 commit3247469e6dAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Aug 24 22:55:27 2024 +0300 Добавлен DrawPoints в Turtle Исправлена ошибка с отображением подписей в Y-координате commit7548142623Author: 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 := ',') commitd94885b950Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Aug 24 12:13:09 2024 +0300 randomElement для строк .ToReals - разделителями могут быть пробел табуляция и переход на новую строку NumberFormat - функция, возвращающая nfi commitae2e26acf8Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Fri Aug 23 19:33:55 2024 +0300 PT4 - новые dll файлы старых заданий серий A commit0f8aa6fa3cAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Aug 18 17:28:05 2024 +0300 SetOf как основной синоним HSet commitdb4b53be20Merge:86852e0a5b9fd59a84Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Aug 18 16:05:42 2024 +0300 Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet commit86852e0a59Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Aug 18 16:05:14 2024 +0300 School - ToBase(number: int64 commitb9fd59a840Author: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Aug 13 15:08:44 2024 +0200 #2830 commit4f0b0f8ba0Author: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Aug 13 14:43:49 2024 +0200 #3194 commite3ee0fed4cAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Aug 13 13:49:30 2024 +0200 #3097 commitd396c4a9feAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Aug 13 10:40:23 2024 +0200 #3178 commit0d846d2335Merge:e91e35398a65a86921Author: 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 commita65a869211Author: samuraiGH <anonimajzer3@mail.ru> Date: Mon Aug 12 15:50:42 2024 +0300 increasing pcu file version commite91e353984Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Aug 11 15:21:29 2024 +0300 Обновленный модуль Turtle.pas commitc18238df39Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Aug 6 20:18:57 2024 +0300 3.9.0.3523 commit1da2b524a6Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Aug 6 19:34:10 2024 +0300 School PrimeDivisors commit47c61d8b14Author: 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 commitfc3ab96caeAuthor: 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 commit64acde6460Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Jul 31 18:21:04 2024 +0300 Сделал возможным неявное приведение некоторого типа к array of T (при описании оператора в виде статической функции класса) School - IsPrime(n) commit3db5709101Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Jul 31 10:56:18 2024 +0300 ZipCartesianFuncs.pas commitc4fd47128bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Jul 30 22:56:03 2024 +0300 Zip, Cartesian - сделаны внешние функции до 5 параметров, в т.ч. с проекцией Zip, Cartesian - методы расширения дополнены чтобы было как во внешних Перегенерирована справка commit7d66f26d4fAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Mon Jul 1 00:16:43 2024 +0300 cleanup and more tests commit464dc794a8Author: samuraiGH <anonimajzer3@mail.ru> Date: Sun Jun 30 23:31:28 2024 +0300 cleanup and more comments commit32f126370cAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Sun Jun 30 21:35:06 2024 +0300 attempt to fix GetEnumerator resolving for Pascal types commitfb3eeeb28bAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Sat Jun 29 16:26:35 2024 +0300 fix tests commit84b0dfe537Author: samuraiGH <anonimajzer3@mail.ru> Date: Sat Jun 29 15:49:13 2024 +0300 fix getting MethodInfo commit5fa4d9fce7Author: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 22:45:07 2024 +0300 cold fix set of T resolving commit460ce636abAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 22:21:06 2024 +0300 hot fix set of T resolving commit83c2f29ac6Author: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 21:53:11 2024 +0300 fix method filtering again commitc840a1a47aAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 21:32:41 2024 +0300 fix type recovery commit2436627fddAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 19:18:32 2024 +0300 fixing method filtering commit15a05360a4Author: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 17:25:39 2024 +0300 attempt to fix GetEnumerator resolving for compiled types commit4fd020d084Author: 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: commit7751fe7e75Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com> Date: Sun Mar 16 13:28:03 2025 +0300 generating language res file at build time (#3252) commitd1fce63d69Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Mar 4 08:38:09 2025 +0300 Сборка после pr SDK commitd491e88aa7Author: 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 commit1fd348ec3cAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Feb 23 20:49:26 2025 +0300 NSIS New 3.10 Ярлык в меню Пуск у всех пользователей commit80b7182dc1Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Feb 19 11:50:00 2025 +0300 _ in names commita2b078960bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Feb 19 10:52:25 2025 +0300 cnfc2 commit58f26d469dAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Feb 18 22:28:13 2025 +0300 перекомпиляция 3.10.3.3611 commitb78a72977fAuthor: 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 commitc3557e388cAuthor: 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 commit9dbac389e1Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com> Date: Wed Feb 12 13:57:14 2025 +0300 Add missing projects to pabcnetc.sln (#3247) commit41dfb6f187Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Fri Feb 7 21:41:01 2025 +0300 [] - преобразование во все контейнеры GraphABCHelper - теперь ABCObjects работает под Линукс School исправлен согласно последним веяниям [] commit79bbbd10ffAuthor: samuraiGH <87191377+samuraiGH@users.noreply.github.com> Date: Wed Jan 29 20:18:37 2025 +0300 removing files for support fx4.0 (#3240) commit88d5c409ebAuthor: 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 commit8fbd7fdfc3Author: 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) commitbba132bd5dAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Jan 22 09:14:44 2025 +0300 Поправил справку по функции commit1bd21857ccAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Jan 8 18:46:51 2025 +0300 Teacher Control Plugin - возможность задать server.dat commit0848a1b796Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Jan 4 22:54:38 2025 +0300 Исправление автоформатирования [] commitd45b782a7bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Jan 4 18:45:07 2025 +0300 Rename PABCSistem in test suite commitc2347e604bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Jan 4 14:44:51 2025 +0300 Примеры - устранил неточности LightPT - имя сервера вынес в публичную секцию commitb68b8da970Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 17 15:52:18 2024 +0300 Примеры Coords1.pas Coords2.pas.pas commit8a9788e6f9Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 17 15:06:57 2024 +0300 Перенес проверку set array на уровень парсера Немного поправил Intellisense по наведению для NewSet По точке там что то другое работает commit874ddebad3Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Dec 14 21:00:38 2024 +0300 Поправил грамматику [] Теперь нельзя в режиме ## использовать атрибуты Зато можно [1,2,3].Print commit080fb487e1Merge:a53dcd9eda484b0e82Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Dec 14 15:25:24 2024 +0300 Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet commita53dcd9ed2Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Dec 14 15:25:16 2024 +0300 SF Prm Cmb для строк commita484b0e82dAuthor: Sun Serega <sunserega2@gmail.com> Date: Thu Dec 12 13:49:17 2024 +0200 fix (#3231) commit6ef11f249cAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 10 11:05:45 2024 +0300 3.10.2 commitdb9679d89fAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 10 10:59:20 2024 +0300 Закончил превращение синтаксиса [] по умолчанию в массивы commit45fdde24b4Author: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Dec 8 18:08:00 2024 +0100 #3229 commit494b47624dMerge:5875b99297906d73daAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Dec 8 10:42:07 2024 +0100 Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet commit5875b99296Author: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Dec 8 10:41:53 2024 +0100 platformtarget native - .NET 9.0 commit7906d73da3Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 3 14:25:37 2024 +0300 Небольшие изменения в реализации операций с множествами commit087591c7b6Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Nov 27 11:37:07 2024 +0300 3.10.1 Coords - доработки Distance, Middle, DrawText с фоном и рамкой. Глобальные переменные настройки commitd268d4f83bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Thu Nov 21 22:24:07 2024 +0300 NSToBytes переделал с исключением commit2bacdc8c28Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Nov 20 13:20:33 2024 +0300 Комментарии к NewSet commite917ac8ecaAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Nov 20 12:42:15 2024 +0300 TypeName для set commit206289c6a7Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Nov 19 20:23:03 2024 +0300 Везде заменил _hs на hs в NewSet Убрал вызовы методов расширений NewSet в PABCSystem.pas Убрал var в operator + commitd8262078f6Author: 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 надо бы сделать исключение commitf8819665baAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Nov 16 10:56:11 2024 +0300 NS2 commit591d9ebe60Author: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Nov 13 21:34:10 2024 +0100 fix commitc6505634f4Author: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Nov 13 21:12:33 2024 +0100 fix commita6564df23cAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Nov 13 20:52:29 2024 +0100 fix in new sets commit03be5bd931Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Nov 13 22:13:41 2024 +0300 Переставил operator:= в NewSet commit96c68f1666Author: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Nov 12 21:38:07 2024 +0100 #3223 commit82776f3c77Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Nov 9 12:18:19 2024 +0300 NewSet - много мелких исправлений. Все тесты проходят кроме Tests 5 - видимо с pabcrtl.dll commitfbd63efa89Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Nov 3 16:59:48 2024 +0300 NewSets Некоторые тесты надо исправить commit746c4ae2c2Author: Ivan Bondarev <ibond84@googlemail.com> Date: Thu Oct 31 21:00:42 2024 +0100 #3221 commit350d07326dAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Thu Oct 31 18:35:51 2024 +0100 #3221 commitaae9ab408bAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Thu Oct 31 18:25:06 2024 +0100 #3221 commit1e4a811e04Author: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Oct 30 20:42:59 2024 +0100 test for #3219 commitd1a1247ecdAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Oct 30 20:24:16 2024 +0100 #3219 commit13b3071d80Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Mon Oct 28 22:42:17 2024 +0300 закомментировал extensions преобразования arr to set. Надеюсь в новой реализации всё исправить commit6d5c18f457Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Thu Oct 24 10:17:48 2024 +0300 SF XLSX.pas commit0c773a7ecbAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Oct 16 12:04:33 2024 +0300 tree.xml с парой новых узлов для Питона commit53b3fd0881Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Oct 9 14:09:01 2024 +0300 Добавил временное преобразование от array of T в set of T commit271d5792ceAuthor: 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 commit79f9ab73a0Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Oct 5 15:33:20 2024 +0300 PT4_32 commit0a20c8d32cAuthor: Sun Serega <sunserega2@gmail.com> Date: Thu Sep 26 09:02:31 2024 +0200 Add `.DistinctBy` (#3122) commit11981dbf47Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Sep 25 11:53:02 2024 +0300 IndexMinBy, IndexMaxBy MinBy, MaxBy - более эффективная реализация GraphWPF - SaveToClipboard commit3eb1d2bd85Author: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Sep 22 17:42:09 2024 +0200 #3197 commit20edd487e3Author: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Sep 22 12:39:03 2024 +0200 #3204 commit7261231c9cMerge:7debbe7029ab932977Author: 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 commit9ab9329771Author: AlexanderZemlyak <zemlyaksanya@mail.ru> Date: Sun Sep 22 10:23:18 2024 +0300 Add new projects in PascalACBNETLinux.sln commit7debbe702aAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Sep 21 14:29:38 2024 +0300 Критическое обновление LightPT commit40335b873eAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Fri Sep 20 22:58:46 2024 +0300 LightPT - OutputListIsClearedFromSpaces := False; Coords - DrawLine commit078281db17Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Thu Sep 19 22:42:44 2024 +0300 coords suite commit8d51f999a5Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Thu Sep 19 20:28:28 2024 +0300 Автоклассы - разрешение наследования от классов без полей Модуль Coords commit8f7e92d418Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Mon Sep 16 08:25:43 2024 +0300 Turtle переделал на паттерн Команда commita6f6d8a90bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Sep 7 23:11:54 2024 +0300 Правки рейтинга в TeacherPlugin commit2365eb3633Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Sep 7 15:54:15 2024 +0300 LinkLabel в TeacherControlPlugin commit1835b811efAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Sep 3 23:51:44 2024 +0300 MathNet Signed commitb23d6df9e9Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Sep 3 23:16:15 2024 +0300 MathNet.Numerics.dll commit790fba67b8Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Aug 27 17:56:09 2024 +0300 3.10.0 commit1ec4204fd2Author: Sun Serega <sunserega2@gmail.com> Date: Mon Aug 26 09:20:27 2024 +0300 `.Batch` cleanup (#3108) commitb5e674c311Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Mon Aug 26 09:12:14 2024 +0300 3_10_0 commit7face043cfAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Mon Aug 26 09:11:08 2024 +0300 ToSet commite456ad528eAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Aug 24 23:13:57 2024 +0300 3.9.0.3530 commit3247469e6dAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Aug 24 22:55:27 2024 +0300 Добавлен DrawPoints в Turtle Исправлена ошибка с отображением подписей в Y-координате commit7548142623Author: 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 := ',') commitd94885b950Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Aug 24 12:13:09 2024 +0300 randomElement для строк .ToReals - разделителями могут быть пробел табуляция и переход на новую строку NumberFormat - функция, возвращающая nfi commitae2e26acf8Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Fri Aug 23 19:33:55 2024 +0300 PT4 - новые dll файлы старых заданий серий A commit0f8aa6fa3cAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Aug 18 17:28:05 2024 +0300 SetOf как основной синоним HSet commitdb4b53be20Merge:86852e0a5b9fd59a84Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Aug 18 16:05:42 2024 +0300 Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet commit86852e0a59Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Aug 18 16:05:14 2024 +0300 School - ToBase(number: int64 commitb9fd59a840Author: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Aug 13 15:08:44 2024 +0200 #2830 commit4f0b0f8ba0Author: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Aug 13 14:43:49 2024 +0200 #3194 commite3ee0fed4cAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Aug 13 13:49:30 2024 +0200 #3097 commitd396c4a9feAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Aug 13 10:40:23 2024 +0200 #3178 commit0d846d2335Merge:e91e35398a65a86921Author: 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 commita65a869211Author: samuraiGH <anonimajzer3@mail.ru> Date: Mon Aug 12 15:50:42 2024 +0300 increasing pcu file version commite91e353984Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Aug 11 15:21:29 2024 +0300 Обновленный модуль Turtle.pas commitc18238df39Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Aug 6 20:18:57 2024 +0300 3.9.0.3523 commit1da2b524a6Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Aug 6 19:34:10 2024 +0300 School PrimeDivisors commit47c61d8b14Author: 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 commitfc3ab96caeAuthor: 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 commit64acde6460Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Jul 31 18:21:04 2024 +0300 Сделал возможным неявное приведение некоторого типа к array of T (при описании оператора в виде статической функции класса) School - IsPrime(n) commit3db5709101Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Jul 31 10:56:18 2024 +0300 ZipCartesianFuncs.pas commitc4fd47128bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Jul 30 22:56:03 2024 +0300 Zip, Cartesian - сделаны внешние функции до 5 параметров, в т.ч. с проекцией Zip, Cartesian - методы расширения дополнены чтобы было как во внешних Перегенерирована справка commit7d66f26d4fAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Mon Jul 1 00:16:43 2024 +0300 cleanup and more tests commit464dc794a8Author: samuraiGH <anonimajzer3@mail.ru> Date: Sun Jun 30 23:31:28 2024 +0300 cleanup and more comments commit32f126370cAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Sun Jun 30 21:35:06 2024 +0300 attempt to fix GetEnumerator resolving for Pascal types commitfb3eeeb28bAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Sat Jun 29 16:26:35 2024 +0300 fix tests commit84b0dfe537Author: samuraiGH <anonimajzer3@mail.ru> Date: Sat Jun 29 15:49:13 2024 +0300 fix getting MethodInfo commit5fa4d9fce7Author: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 22:45:07 2024 +0300 cold fix set of T resolving commit460ce636abAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 22:21:06 2024 +0300 hot fix set of T resolving commit83c2f29ac6Author: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 21:53:11 2024 +0300 fix method filtering again commitc840a1a47aAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 21:32:41 2024 +0300 fix type recovery commit2436627fddAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 19:18:32 2024 +0300 fixing method filtering commit15a05360a4Author: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 17:25:39 2024 +0300 attempt to fix GetEnumerator resolving for compiled types commit4fd020d084Author: 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: commit771ea7b445Author: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Apr 6 14:32:17 2025 +0200 #3230 commit28a1a03e8dAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Apr 6 11:35:09 2025 +0200 #3251 commitaf7abc770bAuthor: samuraiGH <87191377+samuraiGH@users.noreply.github.com> Date: Sun Apr 6 08:33:34 2025 +0300 synchronization of namespaces and folders for TeacherControlPlugin (#3262) commitaae723b982Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com> Date: Thu Apr 3 12:00:04 2025 +0300 Create default syntax tree converter class (#3216) Для удобства разработчиков простых языков, которым не требуются дополнительные обходы синтаксического дерева. commitf9cc90e50fAuthor: Sun Serega <sunserega2@gmail.com> Date: Thu Apr 3 11:59:46 2025 +0300 fix errors (#3260) commitf85bfad60fAuthor: 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 commit7751fe7e75Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com> Date: Sun Mar 16 13:28:03 2025 +0300 generating language res file at build time (#3252) commitd1fce63d69Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Mar 4 08:38:09 2025 +0300 Сборка после pr SDK commitd491e88aa7Author: 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 commit1fd348ec3cAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Feb 23 20:49:26 2025 +0300 NSIS New 3.10 Ярлык в меню Пуск у всех пользователей commit80b7182dc1Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Feb 19 11:50:00 2025 +0300 _ in names commita2b078960bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Feb 19 10:52:25 2025 +0300 cnfc2 commit58f26d469dAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Feb 18 22:28:13 2025 +0300 перекомпиляция 3.10.3.3611 commitb78a72977fAuthor: 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 commitc3557e388cAuthor: 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 commit9dbac389e1Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com> Date: Wed Feb 12 13:57:14 2025 +0300 Add missing projects to pabcnetc.sln (#3247) commit41dfb6f187Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Fri Feb 7 21:41:01 2025 +0300 [] - преобразование во все контейнеры GraphABCHelper - теперь ABCObjects работает под Линукс School исправлен согласно последним веяниям [] commit79bbbd10ffAuthor: samuraiGH <87191377+samuraiGH@users.noreply.github.com> Date: Wed Jan 29 20:18:37 2025 +0300 removing files for support fx4.0 (#3240) commit88d5c409ebAuthor: 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 commit8fbd7fdfc3Author: 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) commitbba132bd5dAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Jan 22 09:14:44 2025 +0300 Поправил справку по функции commit1bd21857ccAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Jan 8 18:46:51 2025 +0300 Teacher Control Plugin - возможность задать server.dat commit0848a1b796Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Jan 4 22:54:38 2025 +0300 Исправление автоформатирования [] commitd45b782a7bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Jan 4 18:45:07 2025 +0300 Rename PABCSistem in test suite commitc2347e604bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Jan 4 14:44:51 2025 +0300 Примеры - устранил неточности LightPT - имя сервера вынес в публичную секцию commitb68b8da970Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 17 15:52:18 2024 +0300 Примеры Coords1.pas Coords2.pas.pas commit8a9788e6f9Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 17 15:06:57 2024 +0300 Перенес проверку set array на уровень парсера Немного поправил Intellisense по наведению для NewSet По точке там что то другое работает commit874ddebad3Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Dec 14 21:00:38 2024 +0300 Поправил грамматику [] Теперь нельзя в режиме ## использовать атрибуты Зато можно [1,2,3].Print commit080fb487e1Merge:a53dcd9eda484b0e82Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Dec 14 15:25:24 2024 +0300 Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet commita53dcd9ed2Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Dec 14 15:25:16 2024 +0300 SF Prm Cmb для строк commita484b0e82dAuthor: Sun Serega <sunserega2@gmail.com> Date: Thu Dec 12 13:49:17 2024 +0200 fix (#3231) commit6ef11f249cAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 10 11:05:45 2024 +0300 3.10.2 commitdb9679d89fAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 10 10:59:20 2024 +0300 Закончил превращение синтаксиса [] по умолчанию в массивы commit45fdde24b4Author: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Dec 8 18:08:00 2024 +0100 #3229 commit494b47624dMerge:5875b99297906d73daAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Dec 8 10:42:07 2024 +0100 Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet commit5875b99296Author: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Dec 8 10:41:53 2024 +0100 platformtarget native - .NET 9.0 commit7906d73da3Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 3 14:25:37 2024 +0300 Небольшие изменения в реализации операций с множествами commit087591c7b6Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Nov 27 11:37:07 2024 +0300 3.10.1 Coords - доработки Distance, Middle, DrawText с фоном и рамкой. Глобальные переменные настройки commitd268d4f83bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Thu Nov 21 22:24:07 2024 +0300 NSToBytes переделал с исключением commit2bacdc8c28Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Nov 20 13:20:33 2024 +0300 Комментарии к NewSet commite917ac8ecaAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Nov 20 12:42:15 2024 +0300 TypeName для set commit206289c6a7Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Nov 19 20:23:03 2024 +0300 Везде заменил _hs на hs в NewSet Убрал вызовы методов расширений NewSet в PABCSystem.pas Убрал var в operator + commitd8262078f6Author: 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 надо бы сделать исключение commitf8819665baAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Nov 16 10:56:11 2024 +0300 NS2 commit591d9ebe60Author: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Nov 13 21:34:10 2024 +0100 fix commitc6505634f4Author: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Nov 13 21:12:33 2024 +0100 fix commita6564df23cAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Nov 13 20:52:29 2024 +0100 fix in new sets commit03be5bd931Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Nov 13 22:13:41 2024 +0300 Переставил operator:= в NewSet commit96c68f1666Author: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Nov 12 21:38:07 2024 +0100 #3223 commit82776f3c77Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Nov 9 12:18:19 2024 +0300 NewSet - много мелких исправлений. Все тесты проходят кроме Tests 5 - видимо с pabcrtl.dll commitfbd63efa89Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Nov 3 16:59:48 2024 +0300 NewSets Некоторые тесты надо исправить commit746c4ae2c2Author: Ivan Bondarev <ibond84@googlemail.com> Date: Thu Oct 31 21:00:42 2024 +0100 #3221 commit350d07326dAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Thu Oct 31 18:35:51 2024 +0100 #3221 commitaae9ab408bAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Thu Oct 31 18:25:06 2024 +0100 #3221 commit1e4a811e04Author: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Oct 30 20:42:59 2024 +0100 test for #3219 commitd1a1247ecdAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Oct 30 20:24:16 2024 +0100 #3219 commit13b3071d80Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Mon Oct 28 22:42:17 2024 +0300 закомментировал extensions преобразования arr to set. Надеюсь в новой реализации всё исправить commit6d5c18f457Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Thu Oct 24 10:17:48 2024 +0300 SF XLSX.pas commit0c773a7ecbAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Oct 16 12:04:33 2024 +0300 tree.xml с парой новых узлов для Питона commit53b3fd0881Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Oct 9 14:09:01 2024 +0300 Добавил временное преобразование от array of T в set of T commit271d5792ceAuthor: 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 commit79f9ab73a0Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Oct 5 15:33:20 2024 +0300 PT4_32 commit0a20c8d32cAuthor: Sun Serega <sunserega2@gmail.com> Date: Thu Sep 26 09:02:31 2024 +0200 Add `.DistinctBy` (#3122) commit11981dbf47Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Sep 25 11:53:02 2024 +0300 IndexMinBy, IndexMaxBy MinBy, MaxBy - более эффективная реализация GraphWPF - SaveToClipboard commit3eb1d2bd85Author: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Sep 22 17:42:09 2024 +0200 #3197 commit20edd487e3Author: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Sep 22 12:39:03 2024 +0200 #3204 commit7261231c9cMerge:7debbe7029ab932977Author: 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 commit9ab9329771Author: AlexanderZemlyak <zemlyaksanya@mail.ru> Date: Sun Sep 22 10:23:18 2024 +0300 Add new projects in PascalACBNETLinux.sln commit7debbe702aAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Sep 21 14:29:38 2024 +0300 Критическое обновление LightPT commit40335b873eAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Fri Sep 20 22:58:46 2024 +0300 LightPT - OutputListIsClearedFromSpaces := False; Coords - DrawLine commit078281db17Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Thu Sep 19 22:42:44 2024 +0300 coords suite commit8d51f999a5Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Thu Sep 19 20:28:28 2024 +0300 Автоклассы - разрешение наследования от классов без полей Модуль Coords commit8f7e92d418Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Mon Sep 16 08:25:43 2024 +0300 Turtle переделал на паттерн Команда commita6f6d8a90bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Sep 7 23:11:54 2024 +0300 Правки рейтинга в TeacherPlugin commit2365eb3633Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Sep 7 15:54:15 2024 +0300 LinkLabel в TeacherControlPlugin commit1835b811efAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Sep 3 23:51:44 2024 +0300 MathNet Signed commitb23d6df9e9Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Sep 3 23:16:15 2024 +0300 MathNet.Numerics.dll commit790fba67b8Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Aug 27 17:56:09 2024 +0300 3.10.0 commit1ec4204fd2Author: Sun Serega <sunserega2@gmail.com> Date: Mon Aug 26 09:20:27 2024 +0300 `.Batch` cleanup (#3108) commitb5e674c311Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Mon Aug 26 09:12:14 2024 +0300 3_10_0 commit7face043cfAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Mon Aug 26 09:11:08 2024 +0300 ToSet commite456ad528eAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Aug 24 23:13:57 2024 +0300 3.9.0.3530 commit3247469e6dAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Aug 24 22:55:27 2024 +0300 Добавлен DrawPoints в Turtle Исправлена ошибка с отображением подписей в Y-координате commit7548142623Author: 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 := ',') commitd94885b950Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Aug 24 12:13:09 2024 +0300 randomElement для строк .ToReals - разделителями могут быть пробел табуляция и переход на новую строку NumberFormat - функция, возвращающая nfi commitae2e26acf8Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Fri Aug 23 19:33:55 2024 +0300 PT4 - новые dll файлы старых заданий серий A commit0f8aa6fa3cAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Aug 18 17:28:05 2024 +0300 SetOf как основной синоним HSet commitdb4b53be20Merge:86852e0a5b9fd59a84Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Aug 18 16:05:42 2024 +0300 Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet commit86852e0a59Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Aug 18 16:05:14 2024 +0300 School - ToBase(number: int64 commitb9fd59a840Author: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Aug 13 15:08:44 2024 +0200 #2830 commit4f0b0f8ba0Author: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Aug 13 14:43:49 2024 +0200 #3194 commite3ee0fed4cAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Aug 13 13:49:30 2024 +0200 #3097 commitd396c4a9feAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Aug 13 10:40:23 2024 +0200 #3178 commit0d846d2335Merge:e91e35398a65a86921Author: 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 commita65a869211Author: samuraiGH <anonimajzer3@mail.ru> Date: Mon Aug 12 15:50:42 2024 +0300 increasing pcu file version commite91e353984Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Aug 11 15:21:29 2024 +0300 Обновленный модуль Turtle.pas commitc18238df39Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Aug 6 20:18:57 2024 +0300 3.9.0.3523 commit1da2b524a6Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Aug 6 19:34:10 2024 +0300 School PrimeDivisors commit47c61d8b14Author: 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 commitfc3ab96caeAuthor: 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 commit64acde6460Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Jul 31 18:21:04 2024 +0300 Сделал возможным неявное приведение некоторого типа к array of T (при описании оператора в виде статической функции класса) School - IsPrime(n) commit3db5709101Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Jul 31 10:56:18 2024 +0300 ZipCartesianFuncs.pas commitc4fd47128bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Jul 30 22:56:03 2024 +0300 Zip, Cartesian - сделаны внешние функции до 5 параметров, в т.ч. с проекцией Zip, Cartesian - методы расширения дополнены чтобы было как во внешних Перегенерирована справка commit7d66f26d4fAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Mon Jul 1 00:16:43 2024 +0300 cleanup and more tests commit464dc794a8Author: samuraiGH <anonimajzer3@mail.ru> Date: Sun Jun 30 23:31:28 2024 +0300 cleanup and more comments commit32f126370cAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Sun Jun 30 21:35:06 2024 +0300 attempt to fix GetEnumerator resolving for Pascal types commitfb3eeeb28bAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Sat Jun 29 16:26:35 2024 +0300 fix tests commit84b0dfe537Author: samuraiGH <anonimajzer3@mail.ru> Date: Sat Jun 29 15:49:13 2024 +0300 fix getting MethodInfo commit5fa4d9fce7Author: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 22:45:07 2024 +0300 cold fix set of T resolving commit460ce636abAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 22:21:06 2024 +0300 hot fix set of T resolving commit83c2f29ac6Author: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 21:53:11 2024 +0300 fix method filtering again commitc840a1a47aAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 21:32:41 2024 +0300 fix type recovery commit2436627fddAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 19:18:32 2024 +0300 fixing method filtering commit15a05360a4Author: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 17:25:39 2024 +0300 attempt to fix GetEnumerator resolving for compiled types commit4fd020d084Author: 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: 71261ded1aae723b98Author: 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 commitaae723b982Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com> Date: Thu Apr 3 12:00:04 2025 +0300 Create default syntax tree converter class (#3216) Для удобства разработчиков простых языков, которым не требуются дополнительные обходы синтаксического дерева. commitf9cc90e50fAuthor: Sun Serega <sunserega2@gmail.com> Date: Thu Apr 3 11:59:46 2025 +0300 fix errors (#3260) commitf85bfad60fAuthor: 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: commit7751fe7e75Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com> Date: Sun Mar 16 13:28:03 2025 +0300 generating language res file at build time (#3252) commitd1fce63d69Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Mar 4 08:38:09 2025 +0300 Сборка после pr SDK commitd491e88aa7Author: 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 commit1fd348ec3cAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Feb 23 20:49:26 2025 +0300 NSIS New 3.10 Ярлык в меню Пуск у всех пользователей commit80b7182dc1Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Feb 19 11:50:00 2025 +0300 _ in names commita2b078960bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Feb 19 10:52:25 2025 +0300 cnfc2 commit58f26d469dAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Feb 18 22:28:13 2025 +0300 перекомпиляция 3.10.3.3611 commitb78a72977fAuthor: 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 commitc3557e388cAuthor: 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 commit9dbac389e1Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com> Date: Wed Feb 12 13:57:14 2025 +0300 Add missing projects to pabcnetc.sln (#3247) commit41dfb6f187Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Fri Feb 7 21:41:01 2025 +0300 [] - преобразование во все контейнеры GraphABCHelper - теперь ABCObjects работает под Линукс School исправлен согласно последним веяниям [] commit79bbbd10ffAuthor: samuraiGH <87191377+samuraiGH@users.noreply.github.com> Date: Wed Jan 29 20:18:37 2025 +0300 removing files for support fx4.0 (#3240) commit88d5c409ebAuthor: 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 commit8fbd7fdfc3Author: 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) commitbba132bd5dAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Jan 22 09:14:44 2025 +0300 Поправил справку по функции commit1bd21857ccAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Jan 8 18:46:51 2025 +0300 Teacher Control Plugin - возможность задать server.dat commit0848a1b796Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Jan 4 22:54:38 2025 +0300 Исправление автоформатирования [] commitd45b782a7bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Jan 4 18:45:07 2025 +0300 Rename PABCSistem in test suite commitc2347e604bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Jan 4 14:44:51 2025 +0300 Примеры - устранил неточности LightPT - имя сервера вынес в публичную секцию commitb68b8da970Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 17 15:52:18 2024 +0300 Примеры Coords1.pas Coords2.pas.pas commit8a9788e6f9Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 17 15:06:57 2024 +0300 Перенес проверку set array на уровень парсера Немного поправил Intellisense по наведению для NewSet По точке там что то другое работает commit874ddebad3Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Dec 14 21:00:38 2024 +0300 Поправил грамматику [] Теперь нельзя в режиме ## использовать атрибуты Зато можно [1,2,3].Print commit080fb487e1Merge:a53dcd9eda484b0e82Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Dec 14 15:25:24 2024 +0300 Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet commita53dcd9ed2Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Dec 14 15:25:16 2024 +0300 SF Prm Cmb для строк commita484b0e82dAuthor: Sun Serega <sunserega2@gmail.com> Date: Thu Dec 12 13:49:17 2024 +0200 fix (#3231) commit6ef11f249cAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 10 11:05:45 2024 +0300 3.10.2 commitdb9679d89fAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 10 10:59:20 2024 +0300 Закончил превращение синтаксиса [] по умолчанию в массивы commit45fdde24b4Author: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Dec 8 18:08:00 2024 +0100 #3229 commit494b47624dMerge:5875b99297906d73daAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Dec 8 10:42:07 2024 +0100 Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet commit5875b99296Author: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Dec 8 10:41:53 2024 +0100 platformtarget native - .NET 9.0 commit7906d73da3Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 3 14:25:37 2024 +0300 Небольшие изменения в реализации операций с множествами commit087591c7b6Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Nov 27 11:37:07 2024 +0300 3.10.1 Coords - доработки Distance, Middle, DrawText с фоном и рамкой. Глобальные переменные настройки commitd268d4f83bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Thu Nov 21 22:24:07 2024 +0300 NSToBytes переделал с исключением commit2bacdc8c28Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Nov 20 13:20:33 2024 +0300 Комментарии к NewSet commite917ac8ecaAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Nov 20 12:42:15 2024 +0300 TypeName для set commit206289c6a7Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Nov 19 20:23:03 2024 +0300 Везде заменил _hs на hs в NewSet Убрал вызовы методов расширений NewSet в PABCSystem.pas Убрал var в operator + commitd8262078f6Author: 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 надо бы сделать исключение commitf8819665baAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Nov 16 10:56:11 2024 +0300 NS2 commit591d9ebe60Author: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Nov 13 21:34:10 2024 +0100 fix commitc6505634f4Author: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Nov 13 21:12:33 2024 +0100 fix commita6564df23cAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Nov 13 20:52:29 2024 +0100 fix in new sets commit03be5bd931Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Nov 13 22:13:41 2024 +0300 Переставил operator:= в NewSet commit96c68f1666Author: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Nov 12 21:38:07 2024 +0100 #3223 commit82776f3c77Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Nov 9 12:18:19 2024 +0300 NewSet - много мелких исправлений. Все тесты проходят кроме Tests 5 - видимо с pabcrtl.dll commit7751fe7e75Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com> Date: Sun Mar 16 13:28:03 2025 +0300 generating language res file at build time (#3252) commitd1fce63d69Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Mar 4 08:38:09 2025 +0300 Сборка после pr SDK commitd491e88aa7Author: 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 commit1fd348ec3cAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Feb 23 20:49:26 2025 +0300 NSIS New 3.10 Ярлык в меню Пуск у всех пользователей commit80b7182dc1Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Feb 19 11:50:00 2025 +0300 _ in names commita2b078960bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Feb 19 10:52:25 2025 +0300 cnfc2 commit58f26d469dAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Feb 18 22:28:13 2025 +0300 перекомпиляция 3.10.3.3611 commitb78a72977fAuthor: 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 commitc3557e388cAuthor: 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 commit9dbac389e1Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com> Date: Wed Feb 12 13:57:14 2025 +0300 Add missing projects to pabcnetc.sln (#3247) commit41dfb6f187Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Fri Feb 7 21:41:01 2025 +0300 [] - преобразование во все контейнеры GraphABCHelper - теперь ABCObjects работает под Линукс School исправлен согласно последним веяниям [] commit79bbbd10ffAuthor: samuraiGH <87191377+samuraiGH@users.noreply.github.com> Date: Wed Jan 29 20:18:37 2025 +0300 removing files for support fx4.0 (#3240) commit88d5c409ebAuthor: 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 commit8fbd7fdfc3Author: 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) commitbba132bd5dAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Jan 22 09:14:44 2025 +0300 Поправил справку по функции commit1bd21857ccAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Jan 8 18:46:51 2025 +0300 Teacher Control Plugin - возможность задать server.dat commit0848a1b796Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Jan 4 22:54:38 2025 +0300 Исправление автоформатирования [] commitd45b782a7bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Jan 4 18:45:07 2025 +0300 Rename PABCSistem in test suite commitc2347e604bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Jan 4 14:44:51 2025 +0300 Примеры - устранил неточности LightPT - имя сервера вынес в публичную секцию commitb68b8da970Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 17 15:52:18 2024 +0300 Примеры Coords1.pas Coords2.pas.pas commit8a9788e6f9Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 17 15:06:57 2024 +0300 Перенес проверку set array на уровень парсера Немного поправил Intellisense по наведению для NewSet По точке там что то другое работает commit874ddebad3Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Dec 14 21:00:38 2024 +0300 Поправил грамматику [] Теперь нельзя в режиме ## использовать атрибуты Зато можно [1,2,3].Print commit080fb487e1Merge:a53dcd9eda484b0e82Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Dec 14 15:25:24 2024 +0300 Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet commita53dcd9ed2Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Dec 14 15:25:16 2024 +0300 SF Prm Cmb для строк commita484b0e82dAuthor: Sun Serega <sunserega2@gmail.com> Date: Thu Dec 12 13:49:17 2024 +0200 fix (#3231) commit6ef11f249cAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 10 11:05:45 2024 +0300 3.10.2 commitdb9679d89fAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 10 10:59:20 2024 +0300 Закончил превращение синтаксиса [] по умолчанию в массивы commit45fdde24b4Author: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Dec 8 18:08:00 2024 +0100 #3229 commit494b47624dMerge:5875b99297906d73daAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Dec 8 10:42:07 2024 +0100 Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet commit5875b99296Author: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Dec 8 10:41:53 2024 +0100 platformtarget native - .NET 9.0 commit7906d73da3Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 3 14:25:37 2024 +0300 Небольшие изменения в реализации операций с множествами commit087591c7b6Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Nov 27 11:37:07 2024 +0300 3.10.1 Coords - доработки Distance, Middle, DrawText с фоном и рамкой. Глобальные переменные настройки commitd268d4f83bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Thu Nov 21 22:24:07 2024 +0300 NSToBytes переделал с исключением commit2bacdc8c28Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Nov 20 13:20:33 2024 +0300 Комментарии к NewSet commite917ac8ecaAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Nov 20 12:42:15 2024 +0300 TypeName для set commit206289c6a7Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Nov 19 20:23:03 2024 +0300 Везде заменил _hs на hs в NewSet Убрал вызовы методов расширений NewSet в PABCSystem.pas Убрал var в operator + commitd8262078f6Author: 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 надо бы сделать исключение commitf8819665baAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Nov 16 10:56:11 2024 +0300 NS2 commit591d9ebe60Author: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Nov 13 21:34:10 2024 +0100 fix commitc6505634f4Author: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Nov 13 21:12:33 2024 +0100 fix commita6564df23cAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Nov 13 20:52:29 2024 +0100 fix in new sets commit03be5bd931Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Nov 13 22:13:41 2024 +0300 Переставил operator:= в NewSet commit96c68f1666Author: 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 commit82776f3c77Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Nov 9 12:18:19 2024 +0300 NewSet - много мелких исправлений. Все тесты проходят кроме Tests 5 - видимо с pabcrtl.dll commit 8e9e7f94d094e528aeb9bd0db322005b08e31ee3 Merge: ea3c878ebfbd63efa8Author: AlexanderZemlyak <zemlyaksanya@mail.ru> Date: Fri Nov 8 14:47:33 2024 +0300 Merge branch 'master' into intellisense_refactoring commitfbd63efa89Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Nov 3 16:59:48 2024 +0300 NewSets Некоторые тесты надо исправить commit746c4ae2c2Author: Ivan Bondarev <ibond84@googlemail.com> Date: Thu Oct 31 21:00:42 2024 +0100 #3221 commit350d07326dAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Thu Oct 31 18:35:51 2024 +0100 #3221 commitaae9ab408bAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Thu Oct 31 18:25:06 2024 +0100 #3221 commit1e4a811e04Author: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Oct 30 20:42:59 2024 +0100 test for #3219 commitd1a1247ecdAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Oct 30 20:24:16 2024 +0100 #3219 commit13b3071d80Author: 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 commit6d5c18f457Author: 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: d95eab7900c773a7ecAuthor: AlexanderZemlyak <zemlyaksanya@mail.ru> Date: Sun Oct 20 17:33:07 2024 +0300 Merge branch 'master' into intellisense_refactoring commit0c773a7ecbAuthor: 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 commit53b3fd0881Author: 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 commit271d5792ceAuthor: 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 commit79f9ab73a0Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Oct 5 15:33:20 2024 +0300 PT4_32 commit0a20c8d32cAuthor: Sun Serega <sunserega2@gmail.com> Date: Thu Sep 26 09:02:31 2024 +0200 Add `.DistinctBy` (#3122) commit11981dbf47Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Sep 25 11:53:02 2024 +0300 IndexMinBy, IndexMaxBy MinBy, MaxBy - более эффективная реализация GraphWPF - SaveToClipboard commit3eb1d2bd85Author: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Sep 22 17:42:09 2024 +0200 #3197 commit20edd487e3Author: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Sep 22 12:39:03 2024 +0200 #3204 commit7261231c9cMerge:7debbe7029ab932977Author: 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 commit9ab9329771Author: AlexanderZemlyak <zemlyaksanya@mail.ru> Date: Sun Sep 22 10:23:18 2024 +0300 Add new projects in PascalACBNETLinux.sln commit7debbe702aAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Sep 21 14:29:38 2024 +0300 Критическое обновление LightPT commit40335b873eAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Fri Sep 20 22:58:46 2024 +0300 LightPT - OutputListIsClearedFromSpaces := False; Coords - DrawLine commit078281db17Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Thu Sep 19 22:42:44 2024 +0300 coords suite commit8d51f999a5Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Thu Sep 19 20:28:28 2024 +0300 Автоклассы - разрешение наследования от классов без полей Модуль Coords commit8f7e92d418Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Mon Sep 16 08:25:43 2024 +0300 Turtle переделал на паттерн Команда commita6f6d8a90bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Sep 7 23:11:54 2024 +0300 Правки рейтинга в TeacherPlugin commit2365eb3633Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Sep 7 15:54:15 2024 +0300 LinkLabel в TeacherControlPlugin commit1835b811efAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Sep 3 23:51:44 2024 +0300 MathNet Signed commitb23d6df9e9Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Sep 3 23:16:15 2024 +0300 MathNet.Numerics.dll commit790fba67b8Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Aug 27 17:56:09 2024 +0300 3.10.0 commit1ec4204fd2Author: Sun Serega <sunserega2@gmail.com> Date: Mon Aug 26 09:20:27 2024 +0300 `.Batch` cleanup (#3108) commitb5e674c311Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Mon Aug 26 09:12:14 2024 +0300 3_10_0 commit7face043cfAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Mon Aug 26 09:11:08 2024 +0300 ToSet commite456ad528eAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Aug 24 23:13:57 2024 +0300 3.9.0.3530 commit3247469e6dAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Aug 24 22:55:27 2024 +0300 Добавлен DrawPoints в Turtle Исправлена ошибка с отображением подписей в Y-координате commit7548142623Author: 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 := ',') commitd94885b950Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Aug 24 12:13:09 2024 +0300 randomElement для строк .ToReals - разделителями могут быть пробел табуляция и переход на новую строку NumberFormat - функция, возвращающая nfi commitae2e26acf8Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Fri Aug 23 19:33:55 2024 +0300 PT4 - новые dll файлы старых заданий серий A commit0f8aa6fa3cAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Aug 18 17:28:05 2024 +0300 SetOf как основной синоним HSet commitdb4b53be20Merge:86852e0a5b9fd59a84Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Aug 18 16:05:42 2024 +0300 Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet commit86852e0a59Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Aug 18 16:05:14 2024 +0300 School - ToBase(number: int64 commitb9fd59a840Author: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Aug 13 15:08:44 2024 +0200 #2830 commit4f0b0f8ba0Author: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Aug 13 14:43:49 2024 +0200 #3194 commite3ee0fed4cAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Aug 13 13:49:30 2024 +0200 #3097 commitd396c4a9feAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Aug 13 10:40:23 2024 +0200 #3178 commit0d846d2335Merge:e91e35398a65a86921Author: 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 commita65a869211Author: samuraiGH <anonimajzer3@mail.ru> Date: Mon Aug 12 15:50:42 2024 +0300 increasing pcu file version commite91e353984Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Aug 11 15:21:29 2024 +0300 Обновленный модуль Turtle.pas commitc18238df39Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Aug 6 20:18:57 2024 +0300 3.9.0.3523 commit1da2b524a6Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Aug 6 19:34:10 2024 +0300 School PrimeDivisors commit47c61d8b14Author: 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 commitfc3ab96caeAuthor: 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 commit64acde6460Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Jul 31 18:21:04 2024 +0300 Сделал возможным неявное приведение некоторого типа к array of T (при описании оператора в виде статической функции класса) School - IsPrime(n) commit3db5709101Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Jul 31 10:56:18 2024 +0300 ZipCartesianFuncs.pas commitc4fd47128bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Jul 30 22:56:03 2024 +0300 Zip, Cartesian - сделаны внешние функции до 5 параметров, в т.ч. с проекцией Zip, Cartesian - методы расширения дополнены чтобы было как во внешних Перегенерирована справка commit7d66f26d4fAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Mon Jul 1 00:16:43 2024 +0300 cleanup and more tests commit464dc794a8Author: samuraiGH <anonimajzer3@mail.ru> Date: Sun Jun 30 23:31:28 2024 +0300 cleanup and more comments commit32f126370cAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Sun Jun 30 21:35:06 2024 +0300 attempt to fix GetEnumerator resolving for Pascal types commitfb3eeeb28bAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Sat Jun 29 16:26:35 2024 +0300 fix tests commit84b0dfe537Author: samuraiGH <anonimajzer3@mail.ru> Date: Sat Jun 29 15:49:13 2024 +0300 fix getting MethodInfo commit5fa4d9fce7Author: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 22:45:07 2024 +0300 cold fix set of T resolving commit460ce636abAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 22:21:06 2024 +0300 hot fix set of T resolving commit83c2f29ac6Author: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 21:53:11 2024 +0300 fix method filtering again commitc840a1a47aAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 21:32:41 2024 +0300 fix type recovery commit2436627fddAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 19:18:32 2024 +0300 fixing method filtering commit15a05360a4Author: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 17:25:39 2024 +0300 attempt to fix GetEnumerator resolving for compiled types commit4fd020d084Author: 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: 8e506f409eeb3116aeAuthor: 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 commiteeb3116aeaAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Jun 10 21:30:20 2025 +0300 3.10.3.3634 commitea338d6bfeAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Jun 10 20:30:42 2025 +0300 2025 in GlobalAssemblyInfo.cs commit4dc6bd72efAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Jun 10 20:19:18 2025 +0300 chm восстановил commitfd139b4700Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com> Date: Tue Jun 10 20:09:10 2025 +0300 fix SemanticTreeConverter.cs encoding (#3273) commitd11674efc2Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Jun 10 19:56:16 2025 +0300 Вернул старый css для справки commit9aee28f4f0Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Jun 10 19:54:57 2025 +0300 2025 commit07370e365fAuthor: 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 commit50fd3cb1eeAuthor: 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 commit5fec52615aAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat May 24 21:36:36 2025 +0300 Распаковка KeyValuePair| И в foreach commitfbb5dec9a9Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat May 17 19:34:33 2025 +0300 Внешний Between commita914ab6ef5Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Fri May 16 16:57:00 2025 +0300 InRange изменение поведения и внешний commit04059ab235Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed May 14 19:57:30 2025 +0300 Исправлены библиотеки PT4Exam commit40bfc046a8Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com> Date: Wed May 14 19:40:04 2025 +0300 Fix shift space action in Intellisense (#3269) commite3a64850efAuthor: dmkwketx <dmkwketx@gmail.com> Date: Mon May 12 21:14:21 2025 +0300 Update GraphWPF.pas (#3270) если title больше одной строки, показывалась только последняя. теперь все строки будут показаны. commite9cf278fddAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Mon May 12 10:24:04 2025 +0300 IsOrdered в разных воплощениях commit255533f407Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Fri May 9 16:39:12 2025 +0300 IsOrdered метод расширения commit4c56298bfbAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Thu May 8 22:53:34 2025 +0300 exit(param) commitc22dee65faAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed May 7 10:57:41 2025 +0300 sp2 commit3f37c2cc4fAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed May 7 10:56:51 2025 +0300 sp commitcdfde69281Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Fri May 2 21:44:57 2025 +0300 2 chars commit2e27beef48Author: 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: commit771ea7b445Author: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Apr 6 14:32:17 2025 +0200 #3230 commit28a1a03e8dAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Apr 6 11:35:09 2025 +0200 #3251 commitaf7abc770bAuthor: samuraiGH <87191377+samuraiGH@users.noreply.github.com> Date: Sun Apr 6 08:33:34 2025 +0300 synchronization of namespaces and folders for TeacherControlPlugin (#3262) commitaae723b982Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com> Date: Thu Apr 3 12:00:04 2025 +0300 Create default syntax tree converter class (#3216) Для удобства разработчиков простых языков, которым не требуются дополнительные обходы синтаксического дерева. commitf9cc90e50fAuthor: Sun Serega <sunserega2@gmail.com> Date: Thu Apr 3 11:59:46 2025 +0300 fix errors (#3260) commitf85bfad60fAuthor: 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 commit69149f8c44Author: 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: commit7751fe7e75Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com> Date: Sun Mar 16 13:28:03 2025 +0300 generating language res file at build time (#3252) commitd1fce63d69Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Mar 4 08:38:09 2025 +0300 Сборка после pr SDK commitd491e88aa7Author: 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 commit1fd348ec3cAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Feb 23 20:49:26 2025 +0300 NSIS New 3.10 Ярлык в меню Пуск у всех пользователей commit80b7182dc1Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Feb 19 11:50:00 2025 +0300 _ in names commita2b078960bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Feb 19 10:52:25 2025 +0300 cnfc2 commit58f26d469dAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Feb 18 22:28:13 2025 +0300 перекомпиляция 3.10.3.3611 commitb78a72977fAuthor: 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 commitc3557e388cAuthor: 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 commit9dbac389e1Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com> Date: Wed Feb 12 13:57:14 2025 +0300 Add missing projects to pabcnetc.sln (#3247) commit41dfb6f187Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Fri Feb 7 21:41:01 2025 +0300 [] - преобразование во все контейнеры GraphABCHelper - теперь ABCObjects работает под Линукс School исправлен согласно последним веяниям [] commit79bbbd10ffAuthor: samuraiGH <87191377+samuraiGH@users.noreply.github.com> Date: Wed Jan 29 20:18:37 2025 +0300 removing files for support fx4.0 (#3240) commit88d5c409ebAuthor: 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 commit8fbd7fdfc3Author: 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) commitbba132bd5dAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Jan 22 09:14:44 2025 +0300 Поправил справку по функции commit1bd21857ccAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Jan 8 18:46:51 2025 +0300 Teacher Control Plugin - возможность задать server.dat commit0848a1b796Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Jan 4 22:54:38 2025 +0300 Исправление автоформатирования [] commitd45b782a7bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Jan 4 18:45:07 2025 +0300 Rename PABCSistem in test suite commitc2347e604bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Jan 4 14:44:51 2025 +0300 Примеры - устранил неточности LightPT - имя сервера вынес в публичную секцию commitb68b8da970Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 17 15:52:18 2024 +0300 Примеры Coords1.pas Coords2.pas.pas commit8a9788e6f9Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 17 15:06:57 2024 +0300 Перенес проверку set array на уровень парсера Немного поправил Intellisense по наведению для NewSet По точке там что то другое работает commit874ddebad3Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Dec 14 21:00:38 2024 +0300 Поправил грамматику [] Теперь нельзя в режиме ## использовать атрибуты Зато можно [1,2,3].Print commit080fb487e1Merge:a53dcd9eda484b0e82Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Dec 14 15:25:24 2024 +0300 Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet commita53dcd9ed2Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Dec 14 15:25:16 2024 +0300 SF Prm Cmb для строк commita484b0e82dAuthor: Sun Serega <sunserega2@gmail.com> Date: Thu Dec 12 13:49:17 2024 +0200 fix (#3231) commit6ef11f249cAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 10 11:05:45 2024 +0300 3.10.2 commitdb9679d89fAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 10 10:59:20 2024 +0300 Закончил превращение синтаксиса [] по умолчанию в массивы commit45fdde24b4Author: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Dec 8 18:08:00 2024 +0100 #3229 commit494b47624dMerge:5875b99297906d73daAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Dec 8 10:42:07 2024 +0100 Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet commit5875b99296Author: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Dec 8 10:41:53 2024 +0100 platformtarget native - .NET 9.0 commit7906d73da3Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 3 14:25:37 2024 +0300 Небольшие изменения в реализации операций с множествами commit087591c7b6Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Nov 27 11:37:07 2024 +0300 3.10.1 Coords - доработки Distance, Middle, DrawText с фоном и рамкой. Глобальные переменные настройки commitd268d4f83bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Thu Nov 21 22:24:07 2024 +0300 NSToBytes переделал с исключением commit2bacdc8c28Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Nov 20 13:20:33 2024 +0300 Комментарии к NewSet commite917ac8ecaAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Nov 20 12:42:15 2024 +0300 TypeName для set commit206289c6a7Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Nov 19 20:23:03 2024 +0300 Везде заменил _hs на hs в NewSet Убрал вызовы методов расширений NewSet в PABCSystem.pas Убрал var в operator + commitd8262078f6Author: 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 надо бы сделать исключение commitf8819665baAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Nov 16 10:56:11 2024 +0300 NS2 commit591d9ebe60Author: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Nov 13 21:34:10 2024 +0100 fix commitc6505634f4Author: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Nov 13 21:12:33 2024 +0100 fix commita6564df23cAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Nov 13 20:52:29 2024 +0100 fix in new sets commit03be5bd931Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Nov 13 22:13:41 2024 +0300 Переставил operator:= в NewSet commit96c68f1666Author: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Nov 12 21:38:07 2024 +0100 #3223 commit82776f3c77Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Nov 9 12:18:19 2024 +0300 NewSet - много мелких исправлений. Все тесты проходят кроме Tests 5 - видимо с pabcrtl.dll * Update comments in PascalABCLanguageInformation commitcc7d4472c6Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com> Date: Thu Apr 10 12:19:31 2025 +0300 Write developer guide for integrating new language (#3264) commit5d842153a5Author: Sun Serega <sunserega2@gmail.com> Date: Thu Apr 10 12:17:52 2025 +0300 Add NSIS binaries to .gitignore exclude (#3265) commitee31ed94b3Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Thu Apr 10 12:06:40 2025 +0300 TeacherControlPlugin.cs - шифрованные модули commitba23a01e29Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Apr 9 10:59:16 2025 +0300 Закомментировал неверный обработчик commit3f70700d2bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Mon Apr 7 22:07:13 2025 +0300 nsis новый - папка bin TeacherControlPlugin.cs - добавление обработчика для последующей шифровки Tasks.pas commit0353abf57cAuthor: samuraiGH <87191377+samuraiGH@users.noreply.github.com> Date: Mon Apr 7 08:35:22 2025 +0300 fix caching Localization assembly (#3263) commit771ea7b445Author: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Apr 6 14:32:17 2025 +0200 #3230 commit28a1a03e8dAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Apr 6 11:35:09 2025 +0200 #3251 commitaf7abc770bAuthor: samuraiGH <87191377+samuraiGH@users.noreply.github.com> Date: Sun Apr 6 08:33:34 2025 +0300 synchronization of namespaces and folders for TeacherControlPlugin (#3262) commitaae723b982Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com> Date: Thu Apr 3 12:00:04 2025 +0300 Create default syntax tree converter class (#3216) Для удобства разработчиков простых языков, которым не требуются дополнительные обходы синтаксического дерева. commitf9cc90e50fAuthor: Sun Serega <sunserega2@gmail.com> Date: Thu Apr 3 11:59:46 2025 +0300 fix errors (#3260) commitf85bfad60fAuthor: 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 commit7751fe7e75Author: samuraiGH <87191377+samuraiGH@users.noreply.github.com> Date: Sun Mar 16 13:28:03 2025 +0300 generating language res file at build time (#3252) commitd1fce63d69Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Mar 4 08:38:09 2025 +0300 Сборка после pr SDK commitd491e88aa7Author: 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 commit1fd348ec3cAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Feb 23 20:49:26 2025 +0300 NSIS New 3.10 Ярлык в меню Пуск у всех пользователей commit80b7182dc1Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Feb 19 11:50:00 2025 +0300 _ in names commita2b078960bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Feb 19 10:52:25 2025 +0300 cnfc2 commit58f26d469dAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Feb 18 22:28:13 2025 +0300 перекомпиляция 3.10.3.3611 commitb78a72977fAuthor: 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 commitc3557e388cAuthor: 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 commit9dbac389e1Author: AlexanderZemlyak <92867056+AlexanderZemlyak@users.noreply.github.com> Date: Wed Feb 12 13:57:14 2025 +0300 Add missing projects to pabcnetc.sln (#3247) commit41dfb6f187Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Fri Feb 7 21:41:01 2025 +0300 [] - преобразование во все контейнеры GraphABCHelper - теперь ABCObjects работает под Линукс School исправлен согласно последним веяниям [] commit79bbbd10ffAuthor: samuraiGH <87191377+samuraiGH@users.noreply.github.com> Date: Wed Jan 29 20:18:37 2025 +0300 removing files for support fx4.0 (#3240) commit88d5c409ebAuthor: 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 commit8fbd7fdfc3Author: 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) commitbba132bd5dAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Jan 22 09:14:44 2025 +0300 Поправил справку по функции commit1bd21857ccAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Jan 8 18:46:51 2025 +0300 Teacher Control Plugin - возможность задать server.dat commit0848a1b796Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Jan 4 22:54:38 2025 +0300 Исправление автоформатирования [] commitd45b782a7bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Jan 4 18:45:07 2025 +0300 Rename PABCSistem in test suite commitc2347e604bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Jan 4 14:44:51 2025 +0300 Примеры - устранил неточности LightPT - имя сервера вынес в публичную секцию commitb68b8da970Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 17 15:52:18 2024 +0300 Примеры Coords1.pas Coords2.pas.pas commit8a9788e6f9Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 17 15:06:57 2024 +0300 Перенес проверку set array на уровень парсера Немного поправил Intellisense по наведению для NewSet По точке там что то другое работает commit874ddebad3Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Dec 14 21:00:38 2024 +0300 Поправил грамматику [] Теперь нельзя в режиме ## использовать атрибуты Зато можно [1,2,3].Print commit080fb487e1Merge:a53dcd9eda484b0e82Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Dec 14 15:25:24 2024 +0300 Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet commita53dcd9ed2Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Dec 14 15:25:16 2024 +0300 SF Prm Cmb для строк commita484b0e82dAuthor: Sun Serega <sunserega2@gmail.com> Date: Thu Dec 12 13:49:17 2024 +0200 fix (#3231) commit6ef11f249cAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 10 11:05:45 2024 +0300 3.10.2 commitdb9679d89fAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 10 10:59:20 2024 +0300 Закончил превращение синтаксиса [] по умолчанию в массивы commit45fdde24b4Author: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Dec 8 18:08:00 2024 +0100 #3229 commit494b47624dMerge:5875b99297906d73daAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Dec 8 10:42:07 2024 +0100 Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet commit5875b99296Author: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Dec 8 10:41:53 2024 +0100 platformtarget native - .NET 9.0 commit7906d73da3Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Dec 3 14:25:37 2024 +0300 Небольшие изменения в реализации операций с множествами commit087591c7b6Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Nov 27 11:37:07 2024 +0300 3.10.1 Coords - доработки Distance, Middle, DrawText с фоном и рамкой. Глобальные переменные настройки commitd268d4f83bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Thu Nov 21 22:24:07 2024 +0300 NSToBytes переделал с исключением commit2bacdc8c28Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Nov 20 13:20:33 2024 +0300 Комментарии к NewSet commite917ac8ecaAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Nov 20 12:42:15 2024 +0300 TypeName для set commit206289c6a7Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Nov 19 20:23:03 2024 +0300 Везде заменил _hs на hs в NewSet Убрал вызовы методов расширений NewSet в PABCSystem.pas Убрал var в operator + commitd8262078f6Author: 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 надо бы сделать исключение commitf8819665baAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Nov 16 10:56:11 2024 +0300 NS2 commit591d9ebe60Author: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Nov 13 21:34:10 2024 +0100 fix commitc6505634f4Author: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Nov 13 21:12:33 2024 +0100 fix commita6564df23cAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Nov 13 20:52:29 2024 +0100 fix in new sets commit03be5bd931Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Nov 13 22:13:41 2024 +0300 Переставил operator:= в NewSet commit96c68f1666Author: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Nov 12 21:38:07 2024 +0100 #3223 commit82776f3c77Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Nov 9 12:18:19 2024 +0300 NewSet - много мелких исправлений. Все тесты проходят кроме Tests 5 - видимо с pabcrtl.dll commitfbd63efa89Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Nov 3 16:59:48 2024 +0300 NewSets Некоторые тесты надо исправить commit746c4ae2c2Author: Ivan Bondarev <ibond84@googlemail.com> Date: Thu Oct 31 21:00:42 2024 +0100 #3221 commit350d07326dAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Thu Oct 31 18:35:51 2024 +0100 #3221 commitaae9ab408bAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Thu Oct 31 18:25:06 2024 +0100 #3221 commit1e4a811e04Author: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Oct 30 20:42:59 2024 +0100 test for #3219 commitd1a1247ecdAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Wed Oct 30 20:24:16 2024 +0100 #3219 commit13b3071d80Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Mon Oct 28 22:42:17 2024 +0300 закомментировал extensions преобразования arr to set. Надеюсь в новой реализации всё исправить commit6d5c18f457Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Thu Oct 24 10:17:48 2024 +0300 SF XLSX.pas commit0c773a7ecbAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Oct 16 12:04:33 2024 +0300 tree.xml с парой новых узлов для Питона commit53b3fd0881Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Oct 9 14:09:01 2024 +0300 Добавил временное преобразование от array of T в set of T commit271d5792ceAuthor: 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 commit79f9ab73a0Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Oct 5 15:33:20 2024 +0300 PT4_32 commit0a20c8d32cAuthor: Sun Serega <sunserega2@gmail.com> Date: Thu Sep 26 09:02:31 2024 +0200 Add `.DistinctBy` (#3122) commit11981dbf47Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Sep 25 11:53:02 2024 +0300 IndexMinBy, IndexMaxBy MinBy, MaxBy - более эффективная реализация GraphWPF - SaveToClipboard commit3eb1d2bd85Author: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Sep 22 17:42:09 2024 +0200 #3197 commit20edd487e3Author: Ivan Bondarev <ibond84@googlemail.com> Date: Sun Sep 22 12:39:03 2024 +0200 #3204 commit7261231c9cMerge:7debbe7029ab932977Author: 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 commit9ab9329771Author: AlexanderZemlyak <zemlyaksanya@mail.ru> Date: Sun Sep 22 10:23:18 2024 +0300 Add new projects in PascalACBNETLinux.sln commit7debbe702aAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Sep 21 14:29:38 2024 +0300 Критическое обновление LightPT commit40335b873eAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Fri Sep 20 22:58:46 2024 +0300 LightPT - OutputListIsClearedFromSpaces := False; Coords - DrawLine commit078281db17Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Thu Sep 19 22:42:44 2024 +0300 coords suite commit8d51f999a5Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Thu Sep 19 20:28:28 2024 +0300 Автоклассы - разрешение наследования от классов без полей Модуль Coords commit8f7e92d418Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Mon Sep 16 08:25:43 2024 +0300 Turtle переделал на паттерн Команда commita6f6d8a90bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Sep 7 23:11:54 2024 +0300 Правки рейтинга в TeacherPlugin commit2365eb3633Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Sep 7 15:54:15 2024 +0300 LinkLabel в TeacherControlPlugin commit1835b811efAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Sep 3 23:51:44 2024 +0300 MathNet Signed commitb23d6df9e9Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Sep 3 23:16:15 2024 +0300 MathNet.Numerics.dll commit790fba67b8Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Aug 27 17:56:09 2024 +0300 3.10.0 commit1ec4204fd2Author: Sun Serega <sunserega2@gmail.com> Date: Mon Aug 26 09:20:27 2024 +0300 `.Batch` cleanup (#3108) commitb5e674c311Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Mon Aug 26 09:12:14 2024 +0300 3_10_0 commit7face043cfAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Mon Aug 26 09:11:08 2024 +0300 ToSet commite456ad528eAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Aug 24 23:13:57 2024 +0300 3.9.0.3530 commit3247469e6dAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Aug 24 22:55:27 2024 +0300 Добавлен DrawPoints в Turtle Исправлена ошибка с отображением подписей в Y-координате commit7548142623Author: 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 := ',') commitd94885b950Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sat Aug 24 12:13:09 2024 +0300 randomElement для строк .ToReals - разделителями могут быть пробел табуляция и переход на новую строку NumberFormat - функция, возвращающая nfi commitae2e26acf8Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Fri Aug 23 19:33:55 2024 +0300 PT4 - новые dll файлы старых заданий серий A commit0f8aa6fa3cAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Aug 18 17:28:05 2024 +0300 SetOf как основной синоним HSet commitdb4b53be20Merge:86852e0a5b9fd59a84Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Aug 18 16:05:42 2024 +0300 Merge branch 'master' of https://github.com/pascalabcnet/pascalabcnet commit86852e0a59Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Aug 18 16:05:14 2024 +0300 School - ToBase(number: int64 commitb9fd59a840Author: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Aug 13 15:08:44 2024 +0200 #2830 commit4f0b0f8ba0Author: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Aug 13 14:43:49 2024 +0200 #3194 commite3ee0fed4cAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Aug 13 13:49:30 2024 +0200 #3097 commitd396c4a9feAuthor: Ivan Bondarev <ibond84@googlemail.com> Date: Tue Aug 13 10:40:23 2024 +0200 #3178 commit0d846d2335Merge:e91e35398a65a86921Author: 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 commita65a869211Author: samuraiGH <anonimajzer3@mail.ru> Date: Mon Aug 12 15:50:42 2024 +0300 increasing pcu file version commite91e353984Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Sun Aug 11 15:21:29 2024 +0300 Обновленный модуль Turtle.pas commitc18238df39Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Aug 6 20:18:57 2024 +0300 3.9.0.3523 commit1da2b524a6Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Aug 6 19:34:10 2024 +0300 School PrimeDivisors commit47c61d8b14Author: 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 commitfc3ab96caeAuthor: 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 commit64acde6460Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Jul 31 18:21:04 2024 +0300 Сделал возможным неявное приведение некоторого типа к array of T (при описании оператора в виде статической функции класса) School - IsPrime(n) commit3db5709101Author: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Wed Jul 31 10:56:18 2024 +0300 ZipCartesianFuncs.pas commitc4fd47128bAuthor: Mikhalkovich Stanislav <miks@math.sfedu.ru> Date: Tue Jul 30 22:56:03 2024 +0300 Zip, Cartesian - сделаны внешние функции до 5 параметров, в т.ч. с проекцией Zip, Cartesian - методы расширения дополнены чтобы было как во внешних Перегенерирована справка commit7d66f26d4fAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Mon Jul 1 00:16:43 2024 +0300 cleanup and more tests commit464dc794a8Author: samuraiGH <anonimajzer3@mail.ru> Date: Sun Jun 30 23:31:28 2024 +0300 cleanup and more comments commit32f126370cAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Sun Jun 30 21:35:06 2024 +0300 attempt to fix GetEnumerator resolving for Pascal types commitfb3eeeb28bAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Sat Jun 29 16:26:35 2024 +0300 fix tests commit84b0dfe537Author: samuraiGH <anonimajzer3@mail.ru> Date: Sat Jun 29 15:49:13 2024 +0300 fix getting MethodInfo commit5fa4d9fce7Author: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 22:45:07 2024 +0300 cold fix set of T resolving commit460ce636abAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 22:21:06 2024 +0300 hot fix set of T resolving commit83c2f29ac6Author: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 21:53:11 2024 +0300 fix method filtering again commitc840a1a47aAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 21:32:41 2024 +0300 fix type recovery commit2436627fddAuthor: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 19:18:32 2024 +0300 fixing method filtering commit15a05360a4Author: samuraiGH <anonimajzer3@mail.ru> Date: Fri Jun 28 17:25:39 2024 +0300 attempt to fix GetEnumerator resolving for compiled types commit4fd020d084Author: 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 * Delete SPython files * 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 * Delete IndentArranger.exe * Delete unused function in DomSyntaxTreeVisitor * Update pabcnetc_clear/CommandConsoleCompiler.cs encoding Co-authored-by: Sun Serega <sunserega2@gmail.com> --------- Co-authored-by: Mikhalkovich Stanislav <miks@math.sfedu.ru> Co-authored-by: Владислав Крылов <krylov@sfedu.ru> Co-authored-by: MovchanGitHub <92666028+MovchanGitHub@users.noreply.github.com> Co-authored-by: Sun Serega <sunserega2@gmail.com>
6077 lines
277 KiB
C#
6077 lines
277 KiB
C#
// 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 SemanticOptions
|
||
{
|
||
public bool allow_import_types=true;
|
||
}
|
||
|
||
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 SemanticOptions semantic_options = new SemanticOptions();
|
||
public Hashtable 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 = (Hashtable)PascalABCCompiler.NetHelper.NetHelper.cur_used_assemblies.Clone();
|
||
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>();
|
||
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)
|
||
{
|
||
|
||
}
|
||
}
|
||
|
||
string unitName = _unit_module.unit_name.idunit_name.name;
|
||
|
||
// считаем основной модуль идущим первым в списке 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;
|
||
|
||
currentUnitLanguage = Languages.Facade.LanguageProvider.Instance.SelectLanguageByExtension(_unit_module.file_name);
|
||
|
||
var languageUsingStandardUnit = Languages.Facade.LanguageProvider.Instance.Languages.Find(lang => lang.SystemUnitNames.Contains(unitName));
|
||
|
||
if (!existed_ns)
|
||
{
|
||
// Пока что добавили возможость грубо отключить добавление NET пространств имен по умолчанию здесь (второе условие нужно, чтобы в стандартные модули языка они тоже не добавлялись) EVA
|
||
if (currentUnitLanguage.LanguageInformation.AddStandardNetNamespacesToUserScope && (languageUsingStandardUnit?.LanguageInformation.AddStandardNetNamespacesToUserScope ?? true))
|
||
{
|
||
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)
|
||
{
|
||
(cur_scope as InterfaceUnitScope).uses_source_range = get_location(_interface_node.uses_modules);
|
||
|
||
usedUnitsNames = _interface_node.uses_modules.units.Select(unit => unit.name.idents[0].name).ToList();
|
||
|
||
//foreach (unit_or_namespace s in _interface_node.uses_modules.units)
|
||
for (int j = _interface_node.uses_modules.units.Count - 1; j >= 0; j--)
|
||
{
|
||
unit_or_namespace s = _interface_node.uses_modules.units[j];
|
||
add_unit_ref(s, Path.GetDirectoryName(_unit_module.file_name),
|
||
cur_scope, ns_cache, semantic_options.allow_import_types,
|
||
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 add_system_unit()
|
||
{
|
||
AddUnit(this.converter.controller.Parser?.LanguageInformation.SystemUnitName);
|
||
}
|
||
|
||
private void add_extensions_unit()
|
||
{
|
||
AddUnit(StringConstants.pascalExtensionsUnitName);
|
||
}
|
||
*/
|
||
|
||
private void add_unit_ref(unit_or_namespace s, string curr_path,
|
||
SymScope cur_scope, Hashtable ns_cache, bool allow_import_types,
|
||
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}';");
|
||
|
||
DomConverter dc = CodeCompletionController.comp_modules[unit_name] as DomConverter;
|
||
if (dc == null /*|| CodeCompletionController.recomp_files[unit_name] != null*/)
|
||
{
|
||
dc = 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);
|
||
}
|
||
|
||
}
|
||
else
|
||
{
|
||
string str = "";
|
||
for (int i = 0; i < s.name.idents.Count; i++)
|
||
{
|
||
str += s.name.idents[i].name;
|
||
|
||
string realName = str;
|
||
|
||
if (s.name.idents.Count == 1)
|
||
{
|
||
// на случай имен модулей, отличающихся от имен файла EVA
|
||
realName = GetRealNameForModule(str);
|
||
}
|
||
|
||
NamespaceScope ns_scope = null;
|
||
if (i == 0)
|
||
{
|
||
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)
|
||
{
|
||
DomConverter dc = CodeCompletionController.comp_modules[unit_name] as DomConverter;
|
||
if (dc == null /*|| CodeCompletionController.recomp_files[unit_name] != null*/)
|
||
{
|
||
dc = 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(str, dc.visitor.entry_scope);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
//unit_name = FindPCUFileName(str);
|
||
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(str, ss);
|
||
}
|
||
else
|
||
{
|
||
if (CodeCompletion.CodeCompletionController.pabcNamespaces.ContainsKey(str.ToLower()))
|
||
{
|
||
InterfaceUnitScope un_scope = CodeCompletion.CodeCompletionController.pabcNamespaces[str.ToLower()];
|
||
cur_scope.AddUsedUnit(un_scope);
|
||
cur_scope.AddName(str, un_scope);
|
||
}
|
||
else if (PascalABCCompiler.NetHelper.NetHelper.IsNetNamespace(str))
|
||
{
|
||
ns_scope = new NamespaceScope(str);
|
||
ns_cache[str] = str;
|
||
cur_scope.AddName(str, ns_scope);
|
||
if (s.name.idents.Count == 1)
|
||
cur_scope.AddUsedUnit(ns_scope);
|
||
}
|
||
else if (PascalABCCompiler.NetHelper.NetHelper.IsType(str) && allow_import_types)
|
||
{
|
||
Type t = PascalABCCompiler.NetHelper.NetHelper.FindType(str);
|
||
cur_scope.AddUsedUnit(new NamespaceTypeScope(TypeTable.get_compiled_type(new SymInfo(t.Name, SymbolKind.Class, t.FullName), t)));
|
||
}
|
||
|
||
}
|
||
//unit_name = System.IO.Path.GetDirectoryName(_program_module.file_name)+"\\"+str+System.IO.Path.GetExtension(_program_module.file_name);
|
||
}
|
||
}
|
||
if (i == s.name.idents.Count - 1 && i > 0 /*&& PascalABCCompiler.NetHelper.NetHelper.IsNetNamespace(str)*/)
|
||
//possible_namespaces.Add(str);
|
||
cur_scope.AddUsedUnit(new NamespaceScope(str));
|
||
if (i < s.name.idents.Count - 1)
|
||
str += ".";
|
||
|
||
}
|
||
unl.AddElement(new PascalABCCompiler.TreeRealization.using_namespace(str));
|
||
}
|
||
}
|
||
catch (Exception e)
|
||
{
|
||
#if DEBUG
|
||
File.AppendAllText("log.txt", e.Message + Environment.NewLine + e.StackTrace + Environment.NewLine);
|
||
#endif
|
||
}
|
||
}
|
||
|
||
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 add_unit_ref_for_import(ident_list importedModuleName, statement importStatement, as_statement_list asStatementsList, string curr_path,
|
||
SymScope cur_scope, Hashtable ns_cache, bool allow_import_types,
|
||
using_namespace_list unl, bool caseSensitiveSearch)
|
||
{
|
||
try
|
||
{
|
||
string str = "";
|
||
for (int i = 0; i < importedModuleName.idents.Count; i++)
|
||
{
|
||
str += importedModuleName.idents[i].name;
|
||
|
||
string realName = str;
|
||
|
||
if (importedModuleName.idents.Count == 1)
|
||
{
|
||
// на случай имен модулей, отличающихся от имен файла EVA
|
||
realName = GetRealNameForModule(str);
|
||
}
|
||
|
||
NamespaceScope ns_scope = null;
|
||
if (i == 0)
|
||
{
|
||
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 = CodeCompletionController.comp_modules[unit_name] as DomConverter;
|
||
if (dc == null)
|
||
{
|
||
dc = new CodeCompletionController().CompileAllIfNeed(unit_name, true);
|
||
}
|
||
if (dc.visitor != null)
|
||
{
|
||
dc.visitor.entry_scope.InitAssemblies();
|
||
AddImportedNamesToCurScope(importStatement, asStatementsList, cur_scope, str, 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, str, ss);
|
||
}
|
||
else
|
||
{
|
||
if (CodeCompletion.CodeCompletionController.pabcNamespaces.ContainsKey(str.ToLower()))
|
||
{
|
||
InterfaceUnitScope un_scope = CodeCompletion.CodeCompletionController.pabcNamespaces[str.ToLower()];
|
||
AddImportedNamesToCurScope(importStatement, asStatementsList, cur_scope, str, un_scope);
|
||
}
|
||
else if (PascalABCCompiler.NetHelper.NetHelper.IsNetNamespace(str))
|
||
{
|
||
ns_scope = new NamespaceScope(str);
|
||
ns_cache[str] = str;
|
||
AddImportedNamesToCurScope(importStatement, asStatementsList, cur_scope, str, ns_scope, importedModuleName.idents.Count > 1);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if (i == importedModuleName.idents.Count - 1 && i > 0)
|
||
AddImportedNamesToCurScope(importStatement, asStatementsList, cur_scope, str, ns_scope, false);
|
||
|
||
if (i < importedModuleName.idents.Count - 1)
|
||
str += ".";
|
||
}
|
||
unl.AddElement(new using_namespace(str));
|
||
}
|
||
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, bool notFinalNamespaceName = false)
|
||
{
|
||
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;
|
||
fictiveUnit.AddName(aliasName, importedModuleScope);
|
||
|
||
// Поправляем реальное имя, которое портится в InterfaceUnitScope.AddName() EVA
|
||
importedModuleScope.si.name = importedModuleName;
|
||
importedModuleScope.si.addit_name = aliasName;
|
||
}
|
||
else if (importStatement is from_import_statement fromImport && !notFinalNamespaceName)
|
||
{
|
||
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);
|
||
if (nameScope != null)
|
||
{
|
||
fictiveUnit.AddName(asStatement.alias.name, nameScope);
|
||
// Поправляем реальное имя, которое портится в InterfaceUnitScope.AddName() EVA
|
||
nameScope.si.name = asStatement.real_name.name;
|
||
nameScope.si.addit_name = 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);
|
||
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)
|
||
{
|
||
|
||
}
|
||
}
|
||
|
||
currentUnitLanguage = Languages.Facade.LanguageProvider.Instance.SelectLanguageByName(_program_module.Language);
|
||
|
||
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);
|
||
|
||
//foreach (unit_or_namespace s in _program_module.used_units.units)
|
||
for (int j = _program_module.used_units.units.Count - 1; j >= 0; j--)
|
||
{
|
||
unit_or_namespace s = _program_module.used_units.units[j];
|
||
add_unit_ref(s, Path.GetDirectoryName(_program_module.file_name),
|
||
cur_scope, ns_cache, semantic_options.allow_import_types,
|
||
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);
|
||
}
|
||
|
||
// Пока что добавили возможость грубо отключить добавление NET пространств имен по умолчанию здесь EVA
|
||
if (currentUnitLanguage.LanguageInformation.AddStandardNetNamespacesToUserScope)
|
||
{
|
||
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())
|
||
{
|
||
add_unit_ref_for_import(new ident_list(unitNode), import, import.modules_names,
|
||
Path.GetDirectoryName(fileName),
|
||
cur_scope, ns_cache, semantic_options.allow_import_types,
|
||
unl, caseSensitiveSearch);
|
||
|
||
usedUnitNames.Add(unitNode.name);
|
||
}
|
||
}
|
||
else if (importStatement is from_import_statement fromImport)
|
||
{
|
||
add_unit_ref_for_import(new ident_list(fromImport.module_name), fromImport, fromImport.imported_names,
|
||
Path.GetDirectoryName(fileName),
|
||
cur_scope, ns_cache, semantic_options.allow_import_types,
|
||
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];
|
||
add_unit_ref(s, Path.GetDirectoryName(this.cur_unit_file_name),
|
||
cur_scope, ns_cache, semantic_options.allow_import_types,
|
||
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);
|
||
}
|
||
}
|
||
}
|
||
|