GENERIC 属性
総称名は、GENERIC 属性を使用して明示的に宣言されなければなりません。
 >>-generic-name--GENERIC--(--| references |--------------------->
>--+-------------------------+--)--;--| generic-descriptor: |--->
'-,--entry-ref--OTHERWISE-'
>--data-attributes--+-----------+--+--------------------+------->
+-ALIGNED---+ +-ASSIGNABLE---------+
'-UNALIGNED-' | (1) |
'-NONASSIGNABLE------'
>--+-------------------+--+---------+--+--------------+--------->
+-CONNECTED---------+ +-HEXADEC-+ +-BIGENDIAN----+
| (1) | '-IEEE----' '-LITTLEENDIAN-'
'-NONCONNECTED------'
>--+----------+------------------------------------------------><
'-OPTIONAL-'
references
.-,--------------------------------------------------.
| .-,--------------------------. |
V V | |
|----entry-ref--WHEN-(---+------------------------+-+-)-+-------|
+-| generic-descriptor |-+
'-*----------------------'
|
注:
- 指定されている場合には、このキーワードは無視されます。
省略形: OTHERWISE の場合には OTHER
総称宣言の構文については、DECLARE ステートメントを参照してください。
- entry-ref
- 添え字を付けたり、定義したりする必要はありません。
別の記述子のリストを利用して、同じ入り口参照を単一の GENERIC 宣言内で
複数回使用することができます。
- generic-descriptor
- 単一引数と対応します。
対応する引数を持たなければならないので、
関連する入り口参照を置換用に選択できる属性を指定します。
構造体または共用体を指定することはできません。
記述子が不要な場所では、不在の場所をアスタリスクで示さなければなりません。
呼び出されるステートメント内のすべての引数が不在であることを表す
記述子は、入り口の WHEN 文節内で総称記述子を省略することによって表されます。
フォーマットは次のとおりです。
generic (... entry1 when( ) ...)
- data-attributes
- データ・タイプとその属性にリストされています。
- ALIGNED および UNALIGNED
- ALIGNED 属性と UNALIGNED 属性に説明されています。
- ASSIGNABLE および NONASSIGNABLE
- ASSIGNABLE 属性と NONASSIGNABLE 属性に説明されています。
- CONNECTED および NONCONNECTED
- CONNECTED 属性と NONCONNECTED 属性に説明されています。
- HEXADEC および IEEE
- HEXADEC 属性と IEEE 属性に説明されています。
- BIGENDIAN および LITTLEENDIAN
- BIGENDIAN 属性と LITTLEENDIAN 属性に説明されています。
- OPTIONAL
- OPTIONAL 属性に説明されています。
総称名の呼び出しに達すると、呼び出しに指定されている引数の数
およびその属性は、セット内の各入り口の記述子リストと比較されます。
数および属性の両方で引数と記述子リストが一致する最初の入り口参照が、
総称名と置き換わります。
以下の例では、DECIMAL または FLOAT、および BINARY または FIXED という属性の
付いた記述子をちょうど 2 つだけ持つ入り口参照が、探索されます。
declare Calc generic (
Fxdcal when (fixed,fixed),
Flocal when (float,float),
Mixed when (float,fixed),
Error otherwise);
Dcl X decimal float (6),
Y binary fixed (15,0);
Z = X+Calc(X,Y);
正確な属性のついた記述子の正確な数のついた入り口が検出されない場合には、
(ある場合) OTHERWISE 文節のついた入り口が選択されます。
前の例では、Mixed が選択されて置き換えられています。
同じような方法で、引数の次元数に基づいて、入り口を選択することができます。
dcl D generic (D1 when ((*))),
D2 when((*,*))),
A(2),
B(3,5);
call D(A); /* D1 selected because A has one dimension */
call D(B); /* D2 selected because B has two dimensions */
すべての記述子が省略されるか、またはアスタリスクで構成される場合には、
正しい数の記述子を持つ最初の入り口参照が選択されます。
総称値への参照で引数として使う入り口式は、ENTRY タイプの記述子とだけ一致します。
そのような記述子がないときには、プログラムはエラー状態になります。
|
This information center is powered by Eclipse technology. (http://www.eclipse.org)