2024-08-17
Покажу, чем развлекаюсь в выходной день. Ищу багу в программе на Алголе-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Тест должен напечатать несколько чисел, но некоторые из них оказываются неправильными. Вряд ли у вас выйдет быстро пробежать глазами и понять, что тут происходит. 😀 ( дальше )
