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. プログラムの呼び出し」 の章の 呼び出しプロトタイプ の節を参照。