2024-08-17

vak: (Default)
Покажу, чем развлекаюсь в выходной день. Ищу багу в программе на Алголе-60, точнее в рантайм библиотеке. Где-то неправильно сохраняется-восстанавливается контекст выполнения, а именно отображение лексического уровня вложенности на фреймы в стеке. Вот тест, на котором проявляется ошибка:
begin
    procedure A(k, x);
        value k;
        integer k, x;
    begin
        procedure B(y);
            integer y;
        begin
            print(k, x, y);
            if x > -10 then A(456, -10);
            if y < 0 then B(20);
        end B;

        print(k, x);
        B(x - 1);
    end A;

    A(123, -1);
end
Тест должен напечатать несколько чисел, но некоторые из них оказываются неправильными. Вряд ли у вас выйдет быстро пробежать глазами и понять, что тут происходит. 😀