Repository navigation
Кэш Вычислить и Выполнить не зависит от числа глобальных контекстов - #1774
Conversation
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the
Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info
📝 Walkthrough
Merge Risk: ⚪ Minimal · up to
|
|
Внешние компоненты, которые добавляют глобальный скоуп ривносят столько адовых ошибок, что мы просто отказались их поддерживать. На эту тему тут уже заведено три или больше issues. Если по простому, то добавление контекстов в рантайме дает очень и очень неочевидные баги. Иными словами, я боюсь это трогать и вливать. Надо найти все старые issues с этими же проблемами и смотреть в т.ч. и те тестовые ситуации |
|
Нашел старые: #344 и #911 (к ним привязан #804). Там компонента с глобальным контекстом подключалась в Прогнал их сценарии на develop и на этой ветке с тестовой компонентой с Если нужно, добавлю эти сценарии в тесты: класс с |
e1b042e to
c71b377
Compare
|
Добавил эти сценарии в тесты: в тестовой компоненте теперь есть класс с |
c71b377 to
9224118
Compare
|
Есть еще issue #1000 тоже связанный с порядком добавления глобальных скоупов. |
С этим PR он не связан. #1000 про порядок выполнения тел модулей библиотеки: |
Скомпилированное выражение связывало области по номеру в списке кадра, где сначала идут глобальные контексты, а за ними область модуля. После ПодключитьВнешнююКомпоненту с глобальным контекстом номера сдвигались, и выражение из кэша читало компоненту вместо модуля или падало с ArgumentOutOfRangeException. Глобальные контексты теперь связываются напрямую, область модуля и вложенных вычислений - по номеру с конца. В тестовую компоненту добавлен глобальный контекст, а в tests - сценарии из EvilBeaver#344 и EvilBeaver#911 и подключение компоненты во время работы. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
9224118 to
8135c04
Compare
There was a problem hiding this comment.
Мне кажется норм. Я бы попросил еще кого-то взглянуть, страшновато трогать это место. @Mr-Rm ?
Mr-Rm
left a comment
There was a problem hiding this comment.
Обозначенная проблема решается.
Проверить бы ещё со вложенными друг в друга Выполнить и ПодключитьВнешнююКомпоненту
Порядок добавления модулей в глобальный контекст и перекрытие методов - вне этого PR
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@Mr-Rm Добавил: |
|

0 New Issues
2 Fixed Issues
0 Accepted Issues
No data about coverage (35.10% Estimated after merge)
Вычислить/Выполнитькэшируют скомпилированное выражение, а оно связывало области по номеру в списке кадра: сначала глобальные контексты, за ними область модуля и вложенных вычислений.ПодключитьВнешнююКомпонентус[GlobalContext]добавляет в этот список контекст, номера сдвигаются, и выражение из кэша вместо переменной или метода модуля берет свойство/метод компоненты или падает сArgumentOutOfRangeException. Воспроизводится и в одном потоке:Глобальные контексты теперь связываются с выражением напрямую, а область модуля и вложенных вычислений — по номеру с конца списка, который от числа глобальных контекстов не зависит.
Тест
EvalScopesTestsв Core.Tests, аtests/global-context-addin.osпрогоняет сценарии из #344 и #911 и подключение во время работы с тестовой компонентой, которая теперь добавляет глобальный контекст.🤖 Generated with Claude Code
Summary by CodeRabbit