Иван Денисов писал(а):
В Компонентном Паскале - это нехорошо, так как вложенные процедуры имеют доступ к локальным переменным, следовательно они должны быть выше процедур концептуально.
так я именно по этой причине и сделал возможность иметь до и после. идея такая, что все локалы, к которым должны иметь доступ вложеные процедуры, описываются
до них, а остальные —
после. таким образом, у нас есть гарантия непосредственно от компилятора, что вложеные процедуры могут дёргать только то, что мы им явно разрешили, и мы достигли этого не вводя новых значков для «псевдоэкспорта».
то есть, так:
Код:
PROCEDURE a;
VAR
v0: INTEGER;
PROCEDURE nested;
BEGIN
INC(v0);
(* INC(v1); — а так не выйдет, компилятор заругается! *)
END nested;
VAR
v1: INTEGER;
(* а здесть PROCEDURE уже нельзя, всё, только один блок вложеных процедур можно *)
BEGIN
(* а здесь доступны и v0, и v1 *)
END a;
то же самое относится и к константам, и к типам.
p.s.: для global scope это малооправдано, получится каша. поэтому на глобальном уровне такое запрещено.