COMP、BINARY、COMP-4、COMP-5、および COMP-X データ項目の呼び出しプロトタイプが、CALL 文の BY VALUE 句、または RETURNING 句で使用された場合に、これらを大まかに、または厳密にチェックする。またプロトタイプからパラメータタイプを暗黙的にコピーするかどうかも指定する。
>>----.---.-----PROTOTYPE----"level"--------------------->< +-/-+
level | 次のいずれかを指定する。 | ||||||
|
省略値: | PROTOTYPE"RELAXED |
段階: | 構文チェック |
$SET: | 任意 |
PROTOTYPE 指令は、呼び出しプロトタイプの呼び出し処理を制御する。
PROTOTYPE"RELAXED" は、32 ビットシステムで記述されたプログラムのうち、64 ビットシステムで記述された呼び出しプロトタイプを使用するプログラムをコンパイルする場合に特に有用である。
デフォルトでは、BY VALUE バイナリデータ項目は、データ形式が大まかにチェックされる(つまり PROTOTYPE"RELAXED" が設定されている)。たとえば、CALL 文で USING リストに PIC X(2) COMP データ項目を使用する際、この項目は、呼出しプロトタイプの PIC X(n) COMP データ項目と対応させることができる。ここで n には、32 ビットシステムでは 1 から 4 までの値、64 ビットシステムでは 1 から 8 までの値を指定できる。渡された値が受取り側データ項目に指定された値よりも大きい場合は、切り捨てられる。大まかなデータ形式のチェックによる切捨てを防止するには、プログラムのコンパイル時にPROTOTYPE"NORMAL" または PROTOTYPE"STRICT" を設定する。
PROTOYPE"NORMAL" または PROTOTYPE"RELAXED" を設定した場合、呼出し時のパラメタの属性はプロトタイプからコピーされる。PROTOYPE"STRICT" を設定した場合は、コピーされない。たとえば、次のようなプログラムがある場合、
program-id. prog1 is external. entry
call-conv "my_api" by value x1 by reference x2 end program prog1. program-id. prog2. call "my_api" by x1 x2
PROTOYPE"NORMAL" を設定すると、my_api の呼出しはコンパイラで次のように変換される。
call call-conv "my_api" by value x1 by reference x2
PROTOTYPE"STRICT" を設定した場合、my_api の呼出しは通常の規則に従った場合と同様にパラメタが処理される。そのため、この呼出しは次のように変換される。
call "my_api" by reference x1 by reference
x2
その後、コンパイラから適切なエラーメッセージが出力される。同様に、呼び出し規約がプロトタイプに指定されているものと一致しない場合、または CALL 文に呼び出し規約が指定されていない場合は、エラーメッセージが出力される。
CALL プロトタイプの詳細については、 プログラム開発ブックの 「2. プログラムの呼び出し」 の章の CALL プロトタイプ の節を参照。