入れ子になったブロックの参照

Open PL/I プログラム ブロックは入れ子構造にできます。入れ子になったブロックの名前の指定に関する規則は次のとおりです。

  1. コンパイル単位内で定義されたブロックがデバッガーの現在の評価環境に含まれているか現在の評価環境を含んでいる場合、そのブロックは単純に名前で参照できます。外部プロシージャ内で一意になるように名前の修飾が必要になる場合もあります。

    ブロックにデバッガーの現在の評価環境が含まれている場合、参照されたブロックが最初に現在の環境で検索され、参照されたブロックが見つかるまで一連の包含 (親) ブロックが順番に検索されます。

  2. ブロックが他の外部プロシージャにある場合は、少なくとも外部プロシージャの名前で修飾する必要があり、さらに修飾が必要になる場合もあります。また、他の外部プロシージャのブロックの完全修飾名が現在のプロシージャのブロックの部分修飾名と同じになることがあります。デバッガーで現在のプロシージャの外部を検索するように強制するには、%EXTERN でブロック名を修飾します(あいまいな名前の指定を使用しないようにすれば、これが必要になることはほとんどありません)。

    次に例を示します。

    A: proc;        /* 1 */        B: proc;             /* 8 */
      B: proc;      /* 2 */          C: proc;           /* 9 */
        C: proc;    /* 3 */            D: proc;         /* 10 */
          D: proc;  /* 4 */            end D;
          end D;                     end C;
        end C;                         B: proc;         /* 11 */
      end B;                             A: proc;       /* 12 */
      C: proc:      /* 5 */                A: proc      /* 13 */
        B: proc;    /* 6 */                  B: proc;   /* 14 */
          C:proc;   /* 7 */                  end B;
          end C;                           end A;
        end B;                           end A;
      end C;                           end B;
    end A;                          end B;

次に、外部プロシージャ %EXTERN.A (ブロック 1) に現在の評価環境がある場合の各ブロックを参照する方法を示します。

ブロック
参照
1 A または %EXTERN.A
2 A.B、B、または %EXTERN.A.B
3 B.C、A.B.C、または %EXTERN.A.B.C
4 D、C.D、B.C.D、A.B.C.D、%EXTERN.A.B.C.D、B.D、A.B.D、%EXTERN.A.B.D、A.D、または %EXTERN.A.D
5 C、A.C、または %EXTERN.A.C
6 C.B、A.C.B、または %EXTERN.A.C.B
7 C.C、C.B.C、A.C.C、%EXTERN.A.C.C、A.C.B.C、または %EXTERN.A.C.B.C
8 %EXTERN.B
9 %EXTERN.B.C
 10 %EXTERN.B.D または %EXTERN.B.C.D
 11 B.B または %EXTERN.B.B
 12 B.B.A または %EXTERN.B.B.A
 13 B.A.AB.B.A.A、%EXTERN.B.A.A、または %EXTERN.B.B.A.A
 14 B.B.B B.A.B B.A.A.B、B.B.A.B、%EXTERN.B.B.B、%EXTERN.B.A.B、%EXTERN.B.A.A.B、%EXTERN.B.B.A.B、または %EXTERN.B.B.A.A.B

現在の評価環境が内部プロシージャ ブロック %EXTERN.A.B.C.D (ブロック 4) にある場合、デバッガーでは次のようになります。

B ブロック 2 を参照
B.C ブロック 3 を参照
C ブロック 3 を参照
%EXTERN.B.A あいまいな参照 (ブロック 12 または 13)
%EXTERN.B.B.A ブロック 12 を参照
%EXTERN.B.C ブロック 9 を参照

現在の評価環境が外部プロシージャ ブロック %EXTERN.B (ブロック 8) にある場合、デバッガーでは次のようになります。

A.B.C.D ブロック 1 を参照
A あいまいな参照 (ブロック 12 または 13)
B ブロック 11 を参照
B.A ブロック 12 を参照
A.B ブロック 14 を参照
B.A.B ブロック 14 を参照