Компилятор игнорирует недопустимые для КП юникод-литеры (c > 0FFX)(исходный заголовок: "Юникод в 1.6 Ominc / 1.6 community")
Уважаемый
Иван Горячев, кланяюсь в ножки!
И за
Unicode tools, но самое главное за то, что удалось обнаружить ОПЕЧАТКУ в исходнике, благодаря Вашему допиливанию ББ до поддержки юникода. В 1.6 от оминк уже грешил на баг в компилере.
Код:
(* Вызов сравнителя *)
cres := -2;
filepar.cmpr(par, oi.next.name, cres);
IF ~((-1 <= cres) & (cres <= 1)) THEN HALT(100) END;
ASSERT((-1 <= cres) & (cres <= 1), 100);
Предпоследняя строчка появилась когда начались "проблемы". Она отрабатывает, на ASSERT-е --- останов ("проблема")...... "Вызов сравнителя" был процедурой с
VAR параметром res. Процедура была убрана, код вставлен на место вызова в процедуру с
параметром res и переменной cres: INTEGER. Когда перепечатывал ASSERT (менял res на cres), впечатал юникодовую русскую эс. Которая стандартным сканером полностью игнорируется... и cres превращается в res.
Код:
PROCEDURE DevCPM.Get* (VAR ch: SHORTCHAR);
VAR ch1: CHAR;
BEGIN
REPEAT in.ReadChar(ch1); INC(curpos) UNTIL (ch1 < 100X) & (ch1 # TextModels.viewcode);
ch := SHORT(ch1)
END Get;
Сравните с:
Код:
PROCEDURE DevCPM.Get* (VAR ch: SHORTCHAR);
VAR ch1 : CHAR;
BEGIN
REPEAT in.ReadChar(ch1); INC(curpos) UNTIL ch1 # TextModels.viewcode;
ch := UniLang.Short(ch1);
END Get;
поправил опечатку в имени модуля