パラメーターと戻り項目の適合規則は、構文規則から明示的な参照が行われる翻訳時に適用される。
注:翻訳時にパラメーターと戻り項目の適合規則におり、以下がチェックされる。
- 一般的オブジェクト参照以外のオブジェクト参照に対するINVOKE文
- 利用者定義の関数への参照
- プログラムプロトタイプ形式のCALL文
起動する側の要素の中の引数の数は、起動される側の要素の中の仮パラメーターの数と同じでなければならない。
ただし、後に置かれる仮パラメーターで、起動される側の要素の手続き部見出しでOPTIONALにより指定され、起動する側の要素の引数のリストでは省かれているものを除く。
作業対象の数が同じではなく、起動する側の文の方がその数が多い場合は、それらは無視される。また、手続き部見出しの方が作用対象の数が多い場合は、ランタイム要素の中でそれらが参照されてはならない。位置的な対応関係は、呼び名で暗黙的に指定されるCOBOL以外の呼び出し規則により異なる。作用対象の数の相違は、実行時以外にはわからないため、指令
FLAG によりこの拡張にフラグがつけられることはない。
引数と仮パラメーターの適合規則は、仮パラメーターまたはそれに対応する引数が集団項目であるか、またはその両方が基本項目であるかどうかにより異なる。
仮パラメーターまたは引数が集団項目である場合、対応する引数または仮パラメーターは集団項目、または項類が英数字の基本項目でなければならない。さらに、仮パラメーターは、対応する引数と同じか、それより少ない文字位置で記述されなければならない。
基本項目の適合規則は、引数が参照、内容、および値のどれにより渡されるかにより異なる。
仮パラメーターまたはそれに対応する引数がオブジェクト参照の場合、対応する引数または仮パラメーターは、以下の規則に従うオブジェクト参照でなければならない。
- 引数または仮パラメーターが一般的オブジェクト参照の場合、対応する仮パラメーターまたは引数は一般的オブジェクト参照でなければならない。
- 引数または仮パラメーターをインターフェイス名で記述した場合、対応する仮パラメーターまたは引数は、インターフェイス名で記述しなければならない。
- 引数または仮パラメーターをクラス名で記述した場合、対応する仮パラメーターまたは引数は、同じクラス名で記述しなければならない。さらに、FACTORYおよびONLYを同様に指定しなければならない。
-
仮パラメーターをACTIVE-CLASS指定で記述した場合、以下の条件のいずれかが真でなければならない。
- 引数が、ACTIVE-CLASS指定で記述されたオブジェクト参照である。ここで、FACTORY指定の有無は仮パラメーターと同じである。さらに、起動されるメソッドは、定義済みのオブジェクト参照
SELFまたはSUPER、またはACTIVE-CLASS指定で記述されたオブジェクト参照で呼び出される。
- 引数が、クラス名およびONLY指定で記述されたオブジェクト参照である。ここで、FACTORY指定の有無は仮パラメーターと同じである。さらに、起動されるメソッドは、そのクラス名、またはそのクラス名とONLY指定で記述されたオブジェクト参照で呼び出される。
引数または仮パラメーターがクラスポインターのものである場合、対応する仮パラメーターまたは引数はクラスポインターのものでなければならない。さらに、対応する項目は同じ項類でなければならない。どちらかのポインターが制限付きポインターであれば、両方とも制限付きで同じ種類のポインターでなければならない。特殊レジスタ
ADDRESSは、クラスポインターのもので、かつ、項類データポインターと見なされる。
引数または仮パラメーターのどちらもクラスオブジェクトのものでもクラスポインターのものでない場合の適合規則は以下のとおり。
- 起動される側の要素であるプログラムに対し、起動する側の要素のリポジトリ段落中のプログラム指定子がなく、CALL文に指定されたNEST指定がない場合、仮パラメーターは、対応する引数と同じ長さでなければならない。
- 起動される側の要素が以下のいずれかの場合、仮パラメーターの定義および引数の定義に、PICTURE、USAGE、SIGN、JUSTIFIED、およびBLANKの各句が同様に含まれなければならない。
- 起動する側の要素中のリポジトリ段落に、そのプログラム指定子のないプログラム
- NEST指定を含むCALL文で呼び出されたプログラム
- メソッド
- 関数
ただし、以下の場合は例外とする。
- 通貨記号が一致する。ただし、対応する通貨文字列が同じ場合に限る。
- 終止符PICTURE記号が一致する。ただし、起動する側と起動される側の両方のランタイム要素について、DECIMAL-POINT
IS COMMA句が有効または無効である場合に限る。
- カンマPICTURE記号が一致する。ただし、起動する側と起動される側の両方のランタイム要素について、DECIMAL-POINT
IS COMMA句が有効または無効である場合に限る。
さらに、以下の規則が適用される。
- 仮パラメーターをANY LENGTH句で記述した場合、その長さは対応する引数の長さと一致すると見なされる。
- 引数をANY LENGTH句で記述した場合、対応する仮パラメーターをANY LENGTH句で記述するものとする。
仮パラメーターが、ACTIVE-CLASS指定で記述されたオブジェクト参照の場合、以下の条件のいずれかが真でなければならない。
- 起動されるメソッドは、定義済みのオブジェクト参照 SELFまたはSUPER, 、またはACTIVE-CLASS指定で記述されたオブジェクト参照により呼び出される。さらに、起動する側の要素でSET文が有効である。この要素には、送出し側の作用対象として引数が、受取り側の作用対象としてACTIVE-CLASS指定で記述されたオブジェクト参照が含まれる。このオブジェクト参照でのFACTORY指定の有無は、仮パラメーターでの有無と同じとする。
- 起動されるメソッドは、クラス名またはクラス名で記述されたオブジェクト参照により呼び出される。さらに、起動する側の要素でONLY指定およびSET文が有効である。この要素には、送出し側の作用対象として引数が、受取り側の作用対象としてクラス名とONLY指定で記述されたオブジェクト参照が含まれる。このオブジェクト参照でのFACTORY指定の有無は、仮パラメーターでの有無と同じとする。
仮パラメーターがクラスポインターのもの、またはACTIVE-CLASS指定を用いずに記述されたオブジェクト参照である場合、その適合規則は、SET文が、実行する側のランタイム要素で実行されたときと同じとなる。このとき、送出し側作用対象は引数とし、受取り側作用対象は対応する仮パラメーターとする。
仮パラメーターがクラスオブジェクトのものでもクラスポインターのものでない場合の適合規則は以下のとおり。
- 起動される側の要素であるプログラムに対し、起動する側の要素のリポジトリ段落中のプログラム指定子がなく、CALL文に指定されたNEST指定がない場合、仮パラメーターは、対応する引数と同じ数の文字位置で記述しなければならない。
- 起動される側の要素が以下のいずれかの場合の適合規則は、仮パラメーターの種類により異なる。
- 起動する側の要素中のリポジトリ段落に、そのプログラム指定子のないプログラム
- NEST指定を含むCALL文で呼び出されたプログラム
- メソッド
- 関数
仮パラメーターの種類と各適合規則は以下のとおり。
- 仮パラメーターが数字である場合の適合規則は、送出し側作用対象としての引数と、受取り側作用対象としての対応する仮パラメーターを含むCOMPUTE文に対するものと同じとする。
- 仮パラメーターが索引データ項目またはポインターデータ項目の場合、適合規則は、送出し側作用対象としての引数と、受取り側作用対象としての対応する仮パラメーターを含むSET文に対するものと同じとする。
- 仮パラメーターがANY LENGTH句で記述されている場合、その長さは、対応する引数の長さに一致すると見なされる。
- 上記のどれでもない場合、適合規則は、送出し側作用対象としての引数と、受取り側作用対象としての対応する仮パラメーターを含むMOVE文に対するものと同じとする。
戻り項目は、起動する側の文で指定しなければならない。ただし、戻り項目が、起動される側の要素の手続き部見出し、
またはENTRY文
で指定される場合に限る。関数または行内メソッド呼び出しが参照されるときは、戻り値が、起動する側の要素で暗黙的に指定される。
起動される原始要素中の戻り値は送出し側の作用対象であり、起動する側の原始要素中の対応する戻り値が受取り側作用対象である
送出し側の作用対象と受取り側作用対象の間の適合規則は、それらの作用対象の少なくとも1つが英数字集団項目であるか、または両方が基本項目であるかどうかにより異なる。
送出し側と受取り側作用対象のどちらかが集団項目の場合、対応する戻り項目は集団項目、または項類が英数字の基本項目でなければならない。また、受取り側作用対象は、送出し側作用対象と同じ数の文字位置で記述しなければならない。
注:起動する側の要素中の戻り項目が1以外のレベル番号の集団項目で、その下位の項目の記述により、使用されると意味のないビットまたはバイトが挿入される場合は、下位の基本項目の配置が、起動する側のランタイム要素中の戻り項目と起動されるランタイム要素中の戻り項目の間で対応しない場合がある。
変数反復データ項目として記述された作用対象には、最大長が使用される。
変数反復データ項目として記述された作用対象については、最大長が使用される。
- 起動される原始要素中の戻り項目の記述にACTIVE-CLASS指定が含まれない場合、適合規則は、SET文が、起動されるランタイム要素で実行されたときと同じとなる。このとき、送出し側作用対象は起動される原始要素中の戻り項目とし、受取り側作用対象は起動する側の原始要素中の対応する戻り項目とする。
- 起動される原始要素中の戻り項目の記述にACTIVE-CLASS指定が含まれる場合、適合規則は、SET文が、起動されるランタイム要素で実行されたときと同じとなる。このとき、受取り側作用対象は起動する側の原始要素中の戻り項目とし、送出し側作用対象は以下の規則に従ってUSAGE
OBJECT REFERENCEで記述されるものとする。
- 起動されるメソッドがクラス名で呼ばれる場合、送出し側作用対象は同じクラス名とONLY指定で記述される。
- 起動されるメソッドが定義済みオブジェクト参照 SELFまたはSUPER、
またはSELFCLASS
で呼ばれる場合、送出し側作用対象はACTIVE-CLASS指定で記述される。
- 起動されるメソッドが、インターフェイス名で記述されたオブジェクト参照で呼ばれる場合、は一般的オブジェクト参照とする。
- 起動されるメソッドがその他のオブジェクト参照で呼ばれる場合、この一意名が送出し側作用対象として使用される。この場合、用いられていれば、ONLY指定も含まれる。
- 上記の規則の適用により選択された送出し側作用対象がクラス名またはACTIVE-CLASS指定で記述されている場合、FACTORY指定の有無は、起動される原始要素の戻り項目での有無と同じとする。
送出し側作用対象がオブジェクト参照でない場合、受取り側作用対象は同じPICTURE、USAGE、SIGN、SYNCHRONIZED、JUSTIFIED、およびBLANK句を含むものとする。ただし、以下の例外がある。
- 通貨記号が一致する。ただし、対応する通貨文字列が同じ場合に限る。
- 終止符PICTURE記号が一致する。ただし、起動する側と起動される側の両方のランタイム要素について、DECIMAL-POINT IS COMMA句が有効または無効である場合に限る。.
- カンマPICTURE記号が一致する。ただし、起動する側と起動される側の両方のランタイム要素について、DECIMAL-POINT IS COMMA句が有効または無効である場合に限る。
さらに、以下の規則が適用される。
- 受取り側作用対象をANY LENGTH句で記述した場合、送出し側作用対象もANY LENGTH句で記述しなければならない。
- 送出し側作用対象をANY LENGTH句で記述した場合、送出し側作用対象の長さは受取り側作用対象の長さと一致すると見なされる。