ISO2002MF 

INVOKE 文

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

一般形式


INVOKE statement

構文規則

  1. object-identifier-1 はオブジェクト参照またはクラス名でなければならない。
  2. MF identifier-1 は 4 バイトのデータ項目でなければならない。
  3. literal-1 は英数字定数でなければならない。
  4. literal-1 も literal-2 も表意定数であってはならない。
  5. ISO2002 object-identifier-1 が一般的オブジェクト参照を参照する場合、BY CONTENT 指定も BY VALUE 指定も書いてはならない。また、BY REFERENCE 指定を書かなくとも、暗黙的に指定されているものと見なされる。

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

  6. identifier-2 は英数字のデータ項目として定義しなければならない。
  7. ISO2002 identifier-2 を指定した場合、object-identifier-1 は一般的オブジェクト参照でなければならない。

    MF 一般的オブジェクト参照であるために、object-identifier-1 は一般的オブジェクト参照でなくてもよい。

  8. identifier-1 によって参照されるデータ項目が一般的オブジェクト参照ではない場合、「手続き部」の章にある「パラメーター項目および戻り項目の適合」に指定されている規則が当てはまる。
  9. identifier-1 によって参照されるデータ項目が一般的オブジェクト参照ではなく、引数に BY CONTENT 指定または BY REFERENCE 指定がある場合、手続き部の見出し中の対応する仮パラメーターに BY REFERENCE 指定がなければならない。
  10. identifier-3 は、ファイル節、作業場所節、

    MF オブジェクト記憶節、

    局所記憶節、または連絡節

    に定義されているデータ項目を参照しなければならない。

  11. MF identifier-4、identifier-5、identifier-6、identifier-7、identifier-8 のいずれも、関数一意名であってはならない。
  12. 引数に BY VALUE を指定した場合、手続き部の見出し中の対応する仮パラメーターに BY VALUE 指定がなければならない。
  13. MF integer-1 は符号付きでもゼロでもよい。
  14. MF GIVING および RETURNING は同等である。
  15. MF identifier-10 は連絡節にレベル番号が 01 または 77 のデータ項目として定義されていなければならない。
  16. identifier-3 は送り出し側作用対象でもあり受け取り側作用対象でもある。
  17. identifier-1、identifier-2、identifier-4、identifier-5、identifier-6、identifier-7、identifier-8、および arithmetic-expression-1 で指定されているすべての一意名は送り出し側作用対象である。
  18. identifier-9 および identifier-10 は受け取り側作用対象である。
  19. OMITTED 指定を記述した場合、手続き部の見出し中の対応する仮パラメーターに OPTIONAL 指定がなければならない。

一般規則

  1. INVOKE 文を実行するプログラム、関数、またはメソッドのインスタンスは活性化する側の実行時要素である。
  2. object-identifier-1

    MF または identifier-1

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

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

      オブジェクト インスタンスが一般的オブジェクト参照によって識別される場合、呼び出し先メソッドの仮パラメーターも戻り値も ANY LENGTH 句では記述できない。

    2. 呼び出す対象のメソッドが COBOL のメソッドではない場合、メソッド名を構成する規則は関係するドメインによって異なる。
  3. MF AS 指定を書くと、COBOL のデータ項目に対してメソッドを呼び出すことができる。template-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 identifier-4」文によって取得された値が BY REFERENCE によってそのデータ項目に渡されたかのように、メソッドは動作する。
  13. BY CONTENT 指定を明示的または暗黙的に指定すると、INVOKE 文中の USING 指定内で参照されたパラメーターの値は、呼び出し先メソッド側では変更できない。しかし、呼び出し先メソッドは、その手続き部の見出しの中で、対応するデータ名によって参照しているデータ項目の値を変更できる。INVOKE 文の BY CONTENT 指定中の各パラメーターに関するデータ記述は、手続き部の見出しの中の USING 指定の中の対応するパラメーターに関するデータ記述と同じにする。つまり、変換も拡張も切り捨てもあってはならない。

    パラメーターに関して BY CONTENT 指定を明示的または暗黙的に指定すると、オブジェクト プログラムの動作は次のようになる。具体的には、追加のデータ項目が宣言され、そのデータ項目が BY REFERENCE 指定の中でパラメーターとして使用されるかのように動作する。identifier-5 を指定すると、追加データ項目の暗黙的なデータ記述とその内容の両方が、identifier-5 のものと同じとなる。literal-3 を指定すると、追加データ項目の暗黙的なデータ記述は、サイズと内容が literal-3 と同じ英数字データ項目に等しくなる。「LENGTH OF identifier-6」を指定すると、追加データ項目のデータ記述は、PIC S9(n) USAGE COMP-5 に等しい。ここで、n の値は 9 以上であり、COBOL システムのデータ項目の最大長を保持できるサイズのデータ項目を定義する。追加データ項目の内容は、identifier-6 に割り当てられた記憶領域のバイト数に設定される。

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

    identifier-7 が指定されており、BINARY、COMP-4、COMP-5、COMP-X のいずれかである場合、追加データ項目のデータ記述は、用途が COMP-5 となる以外は identifier-7 の記述と等しくなる。追加データ項目の内容は、identifier-7 の内容の COMP-5 表現と等しくなる。この変換および表現により、COBOL 以外のプログラムの呼び出しが容易になる。

    それ以外の場合は、identifier-7 を指定すると、追加データ項目の暗黙的なデータ記述とその内容は、identifier-7 のものと等しくなる。

    integer-1 を指定すると、追加データ項目の暗黙的なデータ記述は、符号付き数値項目で USAGE COMP-5 に等しくなる。その記憶領域内でのバイト数は、integer-2 の指定があればその値によって示され、指定がなければシステム領域のサイズ (通常はシステム上の POINTER のサイズ) となる。

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

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

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

    • 追加データ項目が、BINARY、COMP-4、COMP-5、または COMP-X から COMP-5 への変換の対象であった場合、呼び出し先メソッド中の対応するパラメーターのデータ記述は、追加データ項目のデータ記述と同じでなければならない。ただし、対応するパラメーターの USAGE は、BINARY、COMP-4、COMP-5、COMP-X のいずれでもよい。呼び出し先 COBOL メソッドの開始時に、追加データ項目の USAGE COMP-5 から、呼び出し先メソッド中の対応するパラメーターの USAGE への変換が実行される。
    • 追加データ項目が COMP-5 への変換の対象でなかった場合、呼び出し先メソッド中の各パラメーターのデータ記述は、対応する追加データ項目のデータ記述と同じでなければならない。これは、追加データ項目に対し、呼び出し先メソッド中の対応するパラメーターと一致させるための変換、拡張、および切り捨てのいずれも行われないことを意味する。

    呼び出されるメソッドが COBOL 以外の場合、BY VALUE 指定を使用する必要がある状況の詳細は、関連するドメインに依存する。

  15. MF identifier-4 が連絡節にあってそのレベル番号が 01 でも 77 でもない場合、または identifier-4 が作業場所節にある場合、その項目は BY CONTENT が指定されているかのように渡され、呼び出されたメソッドでは identifier-4 のアドレスを変更できない。
  16. MF 「BY REFERENCE literal-2」を明示的または暗黙的に指定すると、メソッドは literal-2 を literal-3 の説明に従って処理する。
  17. MF 「LENGTH OF identifier-6」を指定すると、引数のデータ記述は、形式が PIC S9(9) USAGE BINARY で内容が identifier-6 に割り当てられた記憶領域のバイト数に設定されたものと等しくなる。
  18. MF integer-1 を指定すると、引数の暗黙的なデータ記述は、符号付き数値項目で USAGE COMP-5 に等しくなる。その記憶領域内でのバイト数は、integer-2 の指定があればその値によって示され、指定がなければ 4 バイトとなる。
  19. MF 「LENGTH OF identifier-8」を指定すると、引数のデータ記述は、形式が PIC S9(9) USAGE BINARY で内容が identifier-8 に割り当てられた記憶領域のバイト数に設定されたものと等しくなる。
  20. MF identifier-10 を指定すると、呼び出されたメソッドは、明示的または暗黙的に USAGE POINTER と指定された値を返す。メソッドの結果は、SET 文の規則に従って、identifier-10 に代入される。
  21. 呼び出されるメソッド中に INVOKE 文が含まれていてもよい。呼び出されるメソッドは、呼び出すメソッドを直接的または間接的に呼び出す INVOKE 文を実行できる。
  22. OMITTED 指定が記述されている場合、または後に続く引数が省略されている場合、そのパラメーターの引数省略条件は、呼び出し先メソッドで真となる。
  23. 引数省略条件が真であるパラメーターが、呼び出し先メソッドにより参照されている場合は、RTS エラー メッセージ 203 が返される。ただし、引数として参照される場合、および引数省略条件内で参照される場合を除く。