Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
Ранее специализация замыкания {{ &F CONTENT }} осуществлялась как специализация фиктивного вызова <F CONTENT e.@>. Оптимизатор строил новый вызов <F@1 CONTENT′ e.@>, из которого восстанавливалось замыкание {{ &F@1 CONTENT′ }}. Добавлять и удалять фиктивную переменную e.@ было безопасно, т.к. она была в позиции динамического параметра, позиция параметра не менялась (оставалась последней) и во внутрь функции она не протекала. Теперь же при специализации это имя может протечь внутрь экземпляра, внутри экземпляра может оказаться другое замыкание, в контексте которого будет переменная e.@. Добавление e.@ в конец вызовет конфликт имён. ---- В коде есть некоторый костыль, который проистекает из отсутствия поддержки подавления предупреждений. Исходники намеренно собираются с -Werror, а в данном коде было бы разумно явно добавить «подозрительную» (#290) повторную переменную. Пришлось достигать эту проверку более громоздким куском исходного кода.
- Loading branch information