ISO2002MF 

INVOKE(メソッド呼出し)文

INVOKE文はメソッドを呼び出す働きをする。

一般形式

構文規則

  1. オブジェクト一意名-1はオブジェクト参照またはクラス名でなければならない。

  2. 一意名-1は 4 バイトのデータ項目でなければならない。

  3. 定数-1は英数字の定数でなければならない。

  4. 定数-1も定数-2も表意定数であってはならない。

  5. オブジェクト一意名-1が一般的オブジェクト参照を参照する場合、BY CONTENT指定もBY VALUE指定も書いてはならない。また、BY REFERENCE指定を書かなくとも、暗黙的に指定されているものとみなされる。

    BY CONTENT指定およびBY VALUE指定を書ける。

  6. 一意名-2は英数字のデータ項目として定義しなければならない。

  7. 一意名-2を指定した場合、オブジェクト一意名-1は一般的オブジェクト参照でなければならない。

    一般的オブジェクト参照であるために、オブジェクト一意名-1は必須ではない。

  8. 一意名-1によって参照されるデータ項目が一般的オブジェクト参照ではない場合、手続き部の章のパラメータおよび返却する項目節に指定されている規則が適用される。

  9. 一意名-1によって参照されるデータ項目が一般的オブジェクト参照ではなく、引数にBY CONTENT指定またはBY REFERENCE指定がある場合、手続き部の見出し中の対応する仮パラメータにBY REFERENCE指定がなければならない。

  10. 一意名-3は、ファイル節、作業場所節、

    オブジェクト記憶節、

    局所記憶節、連絡節 のいずれかに定義されているデータ項目を参照しなければならない。

  11. 一意名-4、一意名-5、一意名-6、一意名-7、一意名-8の いずれも、関数一意名であってはならない。

  12. 引数にBY VALUEを指定した場合、手続き部の見出し中の対応する仮パラメータにBY VALUE指定がなければならない。

  13. 整数-1は符合付きでもゼロでもよい。

  14. GIVINGとRETURNINGは同等である。

  15. 一意名-9はサイズが 8 バイト以内のデータ項目であり、ファイル節、作業場所節、

    オブジェクト記憶節、

    局所記憶節、連絡節 のいずれかに定義されていなければならない。

  16. 一意名-10は連絡節にレベル番号が01または77のデータ項目として定義されていなければならない。

  17. 一意名-3は送出し側と受取り側の両方の作用対象である。

  18. 一意名-1、一意名-2、一意名-4、一意名-5、一意名-6、一意名-7、一意名-8および、算術式-1で指定されたあらゆる一意名-1は、送出し側の作用対象である。

  19. 一意名-9と一意名-10は受取り側の作用対象である。

  20. OMITTED指定が含まれる場合は、手続き部見出しの対応する仮パラメータにつして、OPTIONAL指定が含まれなければならない。

一般規則

  1. INVOKE文を実行するプログラムまたはメソッドのインスタンスは起動力のあるランタイム要素である。

  2. オブジェクト一意名-1

    または一意名-1

    はオブジェクト・インスタンスを指す。オブジェクト一意名-1をクラス名として指定した場合は、そのクラス名のファクトリ・オブジェクトを指す。定数-1、または一意名-2によって参照されるデータ項目の内容は、そのオブジェクト・インスタンスに対して作用するそのオブジェクトのメソッドを指す。

    1. 呼び出す対象のメソッドがCOBOLのメソッドである場合、定数-1、または一意名-2によって参照されるデータ項目の内容は、呼出し対象のメソッドのメソッド名段落に指定されている名前を指す。

      オブジェクト・インスタンスが一般的オブジェクト参照により定義されている場合、呼び出されたメソッド中の仮パラメータと返却する項目のいずれも、ANY LENGTH句を使用して記述されてはならない。

    2. 呼び出す対象のメソッドがCOBOLのメソッドではない場合、メソッド名を構成する規則は関係するドメインによって異なる。

  3. AS指定を書くと、COBOLのデータ項目に対してメソッドを呼び出すことができる。テンプレート-1を指定すると、クラス・テンプレートとして使用される。テンプレートを作成することは、クラス・ライブラリ中のオブジェクトによって提供される機能である。(詳細については、使用しているCOBOLシステムのマニュアルを参照。)

  4. INVOKE文を実行すると、指定したメソッドが実行可能になり、呼び出されたメソッドに制御が移される。呼び出されたメソッドがCOBOLのメソッドである場合、手続き部の章の手続き部の見出し節に記述されている一般規則に従って、メソッドが実行される。そうでない場合には、メソッドが記述されている言語の作成者によって定義されている規則に従って、メソッドが実行される。メソッドから制御が戻されると、INVOKE文の最後に制御が移される。

  5. 呼び出されたメソッドを実行できるようにするさいに、その所在が把握されるまで、実行単位にはそれがCOBOLのメソッドであるか否かは分からない。メソッド名の形式からCOBOLのメソッドであるか否かを判定することはできない。

  6. メソッドの呼出しまたはメソッドの終了のプロセスによって、何らかの外部ファイル結合子に関連するファイルの状態または位置づけが変更されることはない。

  7. この処理系では、引数と連絡節内のデータ項目の間の同期を維持することはない。それは利用者の責任である。

    注: COBOL言語では、データ項目の番地の桁寄せに制約はない。他方、COBOL以外の言語では、通常は番地について前提があり、桁寄せされていないデータ項目が参照されると何らかのエラーを起こす。桁寄せは下記の措置のうちのいくつかを用いて実現される。

    • 集団項目に無名項目を追加する

    • ALIGNコンパイラ指令を使用するとともに、USING指定中の作用対象を01レベルまたは77レベルのデータ項目にする

    • SYNCHRONIZED句とIBMCOMPコンパイラ指令を併用する

    INVOKE文にRETURNING指定を書いた場合、COBOL以外のメソッドは適切な形式の結果を返さなければならない。

  8. INVOKE文のUSNIG指定の引数と呼び出されるメソッドの手続き部の見出しのUSING指定の中の対応する仮パラメータの順序によって、引数と仮パラメータの対応関係が決まる。この対応は位置で決まるのであって、名前が等しいことによるのではない。最初の引数が最初の仮パラメータに対応し、次にそれらの2番目同士が対応する、といったぐあいである。

    パラメータが指標名の場合は、そのような対応関係は確立されない。呼び出されたメソッドと呼び出すランタイム要素の指標名は常に別々の指標を参照する。

    起動されたランタイム要素上のUSING指定の効果については、手続き部の章の手続き部の見出し節の一般規則に記述されている。

  9. 単一の一意名または定数から成る引数は、算術式ではなく、一意名または定数と見なされる。

  10. INVOKE文のUSNIG指定の中で参照されるパラメータの値は、INVOKE文が実行されたときに、呼び出されるメソッドで利用できるようになる。

  11. BY CONTENT、BY REFERENCE、BY VALUEの各指定はその後ろに続くパラメータに効力を及ぼすが、別のBY CONTENT、BY REFERENCEまたはBY VALUEの指定が出てきたところでその効力は停止する。

    最初のパラメータの前にBY CONTENT、BY REFERENCE、BY VALUEのどの指定もないと、BY REFERENCE指定があるものとみなされる。

  12. BY REFERENCE ADDRESS OF指定が明示的または暗黙的に使用されている場合、USAGE POINTERを用いてデータ項目が宣言され、「SET データ項目 TO ADDRESS OF 一意名-4」文によって取得された値がBY REFERENCEによってそのデータ項目に渡されたかのように、メソッドは動作する。

  13. パラメータに対してBY CONTENT指定を明示的または暗黙的に使用すると、呼び出されたメソッドは、INVOKE文のUSING指定に従ってこのパラメータの値を変更することができない。ただし、呼び出されたメソッドの手続き部見出し中の対応するデータ名が参照するデータ項目の値を変更することはできる。INVOKE文のBY CONTENT指定中の各パラメータのデータ記述は、手続き部見出しのUSING指定中の対応するパラメータのデータ記述と同じでなければならない。つまり、変換、拡張、および切り詰めはまったく行われない。

    パラメータに対してBY CONTENT指定を明示的または暗黙的に使用している場合、実行プログラムは、追加データ項目が宣言され、BY REFERENCE指定中で使用されたかのように動作する。一意名-5 を指定した場合は、追加項目の暗黙的なデータ記述とその内容が、一意名-5のものと同じとなる。定数-3を指定した場合は、追加項目の暗黙的なデータ記述が、定数-3 と同じサイズで、内容が定数-3の値に設定された英数字データ項目と同じとなる。LENGTH OF 一意名-6 を指定した場合は、追加項目のデータ記述が、PIC S9(n) USAGE COMP-5と同じとなる。ここで、 n の値は、9 以上で、COBOLシステムでのデータ項目の最大長を保持できるサイズのデータ項目を定義するものとする。追加データ項目の内容は、一意名-6に割り当てられた記憶用バイト数に設定される。

  14. パラメータに対してBY VALUE指定を明示的または暗黙的に使用している場合、呼び出されたメソッドは、INVOKE文のUSING指定に従ってこのパラメータの値を変更することができない。ただし、呼び出されたメソッドの手続き部見出し中の対応するデータ名が参照するデータ項目の値を変更することはできる。概念としては、メソッドの動作により、追加データ項目がシステム領域(典型的な例はスタック)内で宣言され、これを使用してCOBOL以外の言語がパラメータを渡すことができるようになる。さらに、この追加データ項目が、呼び出されたメソッド中のデータ項目と同じ記憶領域を占める。

    一意名-7 が指定され、BINARY、COMP-4、COMP-5、またはCOMP-Xである場合、追加データ項目のデータ記述は一意名-7のものと同じとなる。ただし、その用途はCOMP-5である。追加データ項目の内容は、COMP-5 で表示される 一意名-7の内容と同じとする。この変換と形式により、COBOL以外のプログラムの呼出しが容易となる。

    これ以外の場合で一意名-7が指定された場合は、追加データ項目の暗黙的なデータ記述および内容は、一意名-7のものと同じとなる。

    整数-1 を指定すると、追加データ項目のデータ記述は、整数-2が指定されていれば、その値で示された記憶用バイト数を占める符号付き数字項目 USAGE COMP-5と同じとなる。整数-2が指定されていない場合は、システム領域のサイズ(典型的な例は、システム上のPOINTERのサイズ)と同じとなる。

    「LENGTH OF 一意名-8」を指定すると、追加データ項目のデータ記述は、PIC S9(n) USAGE COMP-5と同じとなる。ここで n の値は 9 以上で、COBOLシステムでのデータ項目の最大長を保持できるサイズのデータ項目を定義するものとする。追加データ項目の内容は、一意名-8に割り当てられた記憶用バイト数に設定される。

    呼び出されるメソッドがCOBOLメソッドの場合、INVOKE文のBY VALUE指定中の各パラメータには、対応するパラメータが、手続き部見出しのUSING指定中で宣言されなければならない。このパラメータにも、明示的または暗黙的にBY VALUE指定を使用しているものとする。

    上記のようにINVOKE文の結果として生成された追加データ項目と、呼び出されるメソッド中のこの対応するパラメータの関係は、以下のようになる。

    • 追加データ項目がBINARY、COMP-4、COMP-5、またはCOMP-X to COMP-5からの変換の対象であった場合、呼び出されるメソッド中の対応するパラメータのデータ記述は、追加データ項目のデータ記述と同じでなければならない。ただし、対応するパラメータの用途はBINARY、COMP-4、COMP-5、およびCOMP-Xのどれであってもよい。呼び出されるCOBOLメソッドの記述と同時に、追加データ項目のUSAGE COMP-5から対応するパラメータのUSAGEへの変換が実行される。

    • 追加データ項目がCOMP-5への変換の対象でなかった場合、呼び出されるメソッド中の対応する各パラメータのデータ記述は、対応する追加データ項目と同じでなければならない。つまり、追加データ項目に対し、呼び出されるメソッド中の対応するパラメータに一致させるための変換、拡張、切り詰めはまったく行われない。

    呼び出されるメソッドがCOBOLメソッドでない場合、 BY VALUE指定を使用しなければならない場合の詳細は、関連するドメインにより異なる。

  15. 一意名-4が連絡節にあってそのレベル番号か01または77以外であるか、または作業場所節にある場合、そのデータ項目がBY CONTENTによって渡され、一意名-4の番地を呼び出されたメソッドによっては変更できないことに等しい。

  16. 「BY REFERENCE 定数-2」を明示的または暗黙的に指定すると、メソッドは定数-2を定数-3のために記述されたものとして処理する。

  17. 「LENGTH OF 一意名-6」を指定すると、引数のデータ記述は、形式がPIC S9 (9) USAGE BINARYで内容が一意名-6に割り当てられた記憶領域のバイト数に設定されたものと等しくなる。

  18. 整数-1を指定すると、引数の暗黙的なデータ記述は、符合付き数字項目でUSAGE COMP-5に等しくなる。その記憶領域内でのバイト数は、整数-2の指定があればその値によって示され、指定がなければ 4 バイトとなる。

  19. 「LENGTH OF 一意名-8」を指定すると、引数のデータ記述は、形式がPIC S9 (9) USAGE BINARYで内容が一意名-8に割り当てられた記憶領域のバイト数に設定されたものと等しくなる。

  20. 一意名-10を指定すると、呼び出されたメソッドは、明示的または暗黙的にUSAGE POINTERと指定された値を返す。メソッドの結果は、SET文の規則に従って、一意名-10に代入される。

  21. 呼び出されるメソッド中にINVOKE文が含まれていてもよい。呼び出されるメソッドは、呼び出すメソッドを直接的または間接的に呼び出すINVOKE文を実行できる。

  22. OMITTED指定が含まれるか、または後続の引数が省略されている場合、省略された引数の条件は、呼び出されたメソッド中で、そのパラメータについて真となる。

  23. 省略された引数の条件が真であるパラメータが、呼び出されたメソッド中で参照されている場合、RTSエラーメッセージ 203 が返される。ただし、引数として参照されている場合、および省略された引数の条件中で参照される場合を除く。