そとPERFORM文のインライン展開の規則について説明します。
なお,PERFORM文については,マニュアル「COBOL2002 言語 標準仕様編 10.8.31 PERFORM文」を参照してください。
手続き部分で定義された節と段落であることが必要です。宣言節で定義された節,段落はインライン化の対象となりません。
THRU指定のあるPERFORM文の場合,次のどちらかの条件を満たしていなければなりません。
例1のPERFORM文は,SECT-1が節,PARG-2-1が段落であるため,インライン化の対象となりません。
:
PROCEDURE DIVISION.
:
PERFORM SECT-1 THRU PARG-2-1.
SECT-1 SECTION.
PARG-1-1.
:
SECT-2 SECTION.
PARG-2-1.
:
例2のPERFORM文は,SECT-2がSECT-1の直後に定義されています。
:
PROCEDURE DIVISION.
:
PERFORM SECT-1 THRU SECT-2.
SECT-1 SECTION.
PARG-1-1.
:
SECT-2 SECTION.
PARG-2-1.
:
例3のPERFORM文は,PARG-1-3がPARG-1-1の直後に定義された段落ではないため,インライン化の対象となりません。
:
PROCEDURE DIVISION.
:
PERFORM PARG-1-1 THRU PARG-1-3.
SECT-1 SECTION.
PARG-1-1.
:
PARG-1-2.
:
PARG-1-3.
:
呼ばれる節と段落が次の(a)(b)の条件を満たしていることが必要です。
例1のPERFORM文は,PARG-2-1がGO TO文によって参照されているため,インライン化の対象となりません。
:
PROCEDURE DIVISION.
:
PERFORM SECT-1 THRU SECT-2.
:
GO TO PARG-2-1.
:
SECT-1 SECTION.
PARG-1-1.
:
SECT-2 SECTION.
PARG-2-1.
:
例2の(1)のPERFORM文は,PARG-1-2とPARG-1-3が(2)のPERFORM文と(3)のGO TO文によって参照されているため,インライン化の対象となりません。
:
PROCEDURE DIVISION.
:
PERFORM PARG-1-2 THRU PARG-1-3. …(1)
:
PERFORM PARG-1-1 THRU PARG-1-4. …(2)
:
GO TO SECT-1. …(3)
:
SECT-1 SECTION.
PARG-1-1.
:
PARG-1-2.
:
PARG-1-3.
:
PARG-1-4.
:
例1のPERFORM文は,PARG-1-2がGO TO文によって参照されているため,インライン化の対象となりません。
:
PROCEDURE DIVISION.
:
PERFORM SECT-1.
:
GO TO PARG-1-2.
:
SECT-1 SECTION.
PARG-1-1.
:
PARG-1-2.
:
SECT-2 SECTION.
:
例2の(1)のPERFORM文は,PARG-1-2が(2)のPERFORM文と(3)のGO TO文によって参照されているため,インライン化の対象となりません。
:
PROCEDURE DIVISION.
:
PERFORM PARG-1-2. …(1)
:
PERFORM PARG-1-1 THRU PARG-1-3. …(2)
:
GO TO SECT-1. …(3)
:
SECT-1 SECTION.
PARG-1-1.
:
PARG-1-2.
:
PARG-1-3.
:
PARG-1-4.
:
PERFORM文が記述されている位置が次の(a)(b)の条件を満たしていることが必要です。
例1のPERFORM文は,SECT-2の中に書かれているため,インライン化の対象となりません。
:
PROCEDURE DIVISION.
:
SECT-1 SECTION.
:
SECT-2 SECTION.
PARG-2-1.
:
PERFORM SECT-1 THRU SECT-2.
:
SECT-3 SECTION.
:
例2のPERFORM文は,PARG-1-2中に書かれているため,インライン化の対象となりません。
:
PROCEDURE DIVISION.
:
SECT-1 SECTION.
PARG-1-1.
:
PARG-1-2.
:
PERFORM PARG-1-1 THRU PARG-1-2.
:
PARG-1-3.
:
例1のPERFORM文はSECT-1中に書かれているため,インライン化の対象となりません。
:
PROCEDURE DIVISION.
:
SECT-1 SECTION.
PARG-1-1.
:
PERFORM SECT-1.
:
SECT-2 SECTION.
:
例2のPERFORM文はPARG-1-1中に書かれているため,インライン化の対象となりません。
:
PROCEDURE DIVISION.
:
SECT-1 SECTION.
PARG-1-1.
:
PERFORM PARG-1-1.
:
SECT-2 SECTION.
:
呼び出し元のPERFORM文または手続き部先頭から(「(7) 注意事項」を参照),呼ばれる節と段落までの間にある文が次の二つの条件を満たしていることが必要です。
:
PROCEDURE DIVISION.
:
PERFORM SECT-1.
:
IF FLAG = 'ON' THEN
STOP RUN.
:
SECT-1 SECTION.
:
:
PROCEDURE DIVISION.
:
PERFORM SECT-1.
:
IF FLAG = 'ON' THEN
ENTRY 'SUB01'.
:
SECT-1 SECTION.
:
呼び出し元のPERFORM文または手続き部先頭から(「(7) 注意事項」を参照),呼ばれる節と段落までの間にある節と段落がGO TO文とALTER文の飛び先で参照されてはなりません。
例のPERFORM文は,1.のGO TO文によってSECT-1が参照されているため,インライン化の対象となりません。
:
PROCEDURE DIVISION.
:
GO TO SECT-1. *> 1.
:
PERFORM SECT-2.
:
SECT-1 SECTION.
:
SECT-2 SECTION.
: