Продолжил поиск ошибки. К сожалению, мой предыдущий вывод о том, что виноват не Блэкбокс, а мой компилятор, оказался ошибочным.
Оставим пока в покое мою потенциально бажную эксклюзивную сборку Блэкбокс вместе с моим компилятором. Как я понимаю, они не вызывают прилива доверия у публики
Я проверил официальные версии v1.5 Eng и v1.6rc5 Eng, а также нашу русскую локализованную версию от 19.01.2008 r116. Во всех случаях трабла подтвердилась.
Для всех желающих предлагаю проделать следующий опыт:
1. Скопируйте содержимое рабочей папки Блэкбокс во временную директорию. Далее работать только в ней.
2. Запустите Блэкбокс. Откройте модуль DevCompiler и отредактируйте его. Найдите костанту
defopt (опции компилятора по умолчанию) и добавьте в неё опцию
allchecks. Сохраните изменения и перекомпилируйте модуль.
3. Выгрузите модуль DevCompiler. (Очень важный пункт. Первый раз я его не выполнил и в результате сделал неправильный вывод -- см. мои посты выше).
4. Перекомпилируйте все модули Блэкбокс при помощи команды DevCompiler.CompileThis. Закройте Блэкбокс.
Очевидно, что после этих манипуляций наш Блэкбокс будет выполнять проверку на переполнение и выход за диапазон (см. модуль DevCPC486). Конфуз однако состоит в том, что Блэкбокс эти проверки не проходит уже при запуске. Либо сами проверки выполняются некорректно.
Вывод, который я только что сделал, представляется мне не правдоподобным. Может я всё-таки что-то напутал. Прошу вывести на чистую воду.
PS: Смутные подозрения у меня вызывает реализация стандартных функций CHR и ORD. Более точно ничего сказать пока не могу, ошибку (предположительно!
) обнаружил только сегодня.