Hitachi

COBOL2002 Professional Tool Kit COBOLソース解析ガイド


10.11.2 引数整合性チェックの検査内容

引数整合性チェックの検査項目ごとに実施する検査の内容と,不整合引数一覧CSVファイル,および不整合引数一覧タグファイルに出力される報告内容について説明します。

〈この項の構成〉

(1) 引数の個数のチェック

(a) 検査内容

実引数と仮引数の個数が一致しているかどうかを検査します。ただし,[解析生成オプション設定]画面の[引数整合性チェック]タブで[実引数個数>仮引数個数の場合は検出しない]を有効にしている場合は,実引数個数>仮引数個数を検出しても不整合引数として報告されません。

(b) 報告内容

実引数と仮引数の個数が一致していない場合,不整合引数一覧CSVファイルに不整合種別が「個数不一致」の不整合引数情報を出力します。また,不整合引数一覧タグファイルに警告メッセージを出力します。

各ファイルのフォーマットを次に示します。

不整合引数一覧CSVファイル
項番,<<呼出元情報>>,実引数個数,"-","-",…,"-",呼出先プログラム名,仮引数個数,"-",…,"-","個数不一致"

引数番号,実引数情報,仮引数情報のすべての列には「-」が出力されます。不整合引数一覧CSVファイルに出力される情報の内容については,「8.2.6 不整合引数一覧」を参照してください。

不整合引数一覧タグファイル
# [項番] ソースファイル名, ソース行番号  CALL '呼出先プログラム名'  個数不一致
"パス名1", line 行番号1: KEDL4000A-W CALL文の実引数の個数が仮引数の個数と一致していません。呼出元プログラム=*** 1 ***,呼出先プログラム=*** 2 ***
"パス名2", line 行番号2: KEDL4001A-I   実引数 個数=*** 1 ***
"パス名3", line 行番号3: KEDL4002A-I   仮引数 個数=*** 1 ***

不整合引数一覧タグファイルに出力される情報の内容を次に示します。

[項番]

不整合引数一覧.csv内の不整合引数情報の通番です。

[ソースファイル名]

CALL文のソースファイルのフォルダパス名なしのファイル名です。

[ソース行番号]

CALL文の[ソース表示(COPY展開後)]画面上の行番号です。

[パス名1],[パス名2]

CALL文のCOBOLソースファイルまたは登録集原文ファイルの絶対パス名です。

[行番号1],[行番号2]

CALL文のファイル(パス名1)内の相対行番号です。

[パス名3]

呼出先プログラムの手続き部見出しのCOBOLソースファイルまたは登録集原文ファイルの絶対パス名です。

[行番号3]

呼出先プログラムの手続き部見出しのファイル(パス名2)内の相対行番号です。

(2) 受渡方法のチェック

(a) 検査内容

実引数と仮引数の受け渡し方法が指定できる組み合わせかどうかを検査します。実引数と仮引数の受け渡し方法の組み合わせを次の表に示します。

表10‒14 実引数と仮引数の受け渡し方法の組み合わせ

実引数

仮引数

BY REFERENCE

BY VALUE

BY REFERENCE

×

BY CONTENT

×

BY VALUE

×

BY ATTRIBUTE

×

(凡例)

○:組み合わせは指定できます。

×:組み合わせは指定できません。

(b) 報告内容

実引数と仮引数の受け渡し方法が指定できない組み合わせの場合,不整合引数一覧CSVファイルに不整合種別が「受渡方法不一致」の不整合引数情報を出力します。また,不整合引数一覧タグファイルに警告メッセージを出力します。

各ファイルのフォーマットを次に示します。

不整合引数一覧CSVファイル
項番,<<呼出元情報>>,"-",引数番号,<<実引数情報>>,呼出先プログラム名,"-",<<仮引数情報>>,"受渡方法不一致"

不整合引数一覧CSVファイルに出力される情報の内容については,「8.2.6 不整合引数一覧」を参照してください。

不整合引数一覧タグファイル
# [項番] ソースファイル名, ソース行番号  CALL '呼出先プログラム名' (第<引数番号>引数)  受渡方法不一致
"パス名1", line 行番号1: KEDL4010A-W CALL文の*** 1 ***番目の実引数の受渡方法が仮引数と一致していません。呼出元プログラム=*** 2 ***,呼出先プログラム=*** 3 ***
"パス名2", line 行番号2: KEDL4011A-I   実引数=*** 1 ***   受渡方法=*** 2 ***
"パス名3", line 行番号3: KEDL4012A-I   仮引数=*** 1 ***   受渡方法=*** 2 ***

不整合引数一覧タグファイルに出力される情報の内容を次に示します。

[項番]

不整合引数一覧.csv内の不整合引数情報の通番です。

[ソースファイル名]

CALL文のソースファイルのフォルダパス名なしのファイル名です。

[ソース行番号]

CALL文の[ソース表示(COPY展開後)]画面上の行番号です。

[パス名1],[パス名2]

CALL文のCOBOLソースファイルまたは登録集原文ファイルの絶対パス名です。

[行番号1],[行番号2]

CALL文のファイル(パス名1)内の相対行番号です。

[パス名3]

呼出先プログラムの手続き部見出しのCOBOLソースファイルまたは登録集原文ファイルの絶対パス名です。

[行番号3]

呼出先プログラムの手続き部見出しのファイル(パス名2)内の相対行番号です。

(3) データ型の適合チェック

(a) 検査内容

適合規則を使用して,実引数と仮引数のデータ型が適合しているかどうかを検査します。

引数のデータ型は,次の表に示す規則に従って分類されます。

表10‒15 引数のデータ型の分類

引数のデータ型

該当するデータ項目または定数

集団項目

固定長の英数字集団項目

集団項目(可変長)

可変長の英数字集団項目

日本語集団項目

日本語集団項目(GROUP-USAGE IS NATIONAL)

英字

英字項目

英数字

英数字項目,英数字定数

-JPN,Alnumまたは-JPN,V3JPNコンパイラオプションを指定すると,CALL文の引数に日本語定数が指定できますが,英数字定数として扱われます。

動的長英数字

動的長英数字項目

英数字編集

英数字編集項目

外部10進

外部10進項目

内部10進

内部10進項目(COMP-3またはPACKED-DECIMAL)

2進

2進項目(COMP,COMP-4,またはBINARY),数字定数,LENGTH OF

2進(COMP-X)

COMP-X項目

2進(COMP-5)

COMP-5項目

数字編集

数字編集項目

外部浮動

外部浮動小数点項目

内部浮動

内部浮動小数点項目(COMP-1またはCOMP-2),浮動小数点定数

日本語

日本語項目

動的長日本語

動的長日本語項目

日本語編集

日本語編集項目

外部ブール

外部ブール項目

内部ブール

内部ブール項目

アドレス

アドレス項目(ポインタ項目),ADDR関数,ADDRESS OF,NULL表意定数

指標

指標項目

オブジェクト参照

オブジェクト参照項目

OLE参照

OLEオブジェクト参照項目

OLEバリアント

OLEバリアント項目

データ型の適合規則を次に示します。

  1. 次に示すデータ項目は,実引数と仮引数の両方のデータ型が一致している場合にだけ適合していると判定されます。

    • 内部ブール項目

    • アドレス項目

    • 指標項目

    • オブジェクト参照項目

    • OLEオブジェクト参照項目

    • OLEバリアント項目

  2. 項番1以外のデータ項目は,次の表に示す規則に従って,適合しているかどうかが判定されます。

    図10‒4 引数のデータ型の適合規則

    [図データ]

    (凡例)

    ○:適合していると判定されます。

    △:引数の受け渡しが内容渡し(BY CONTENT)または値渡し(BY VALUE)の場合は適合している,参照渡し(BY REFERENCE)の場合は適合していないと判定されます。

    ×:適合していないと判定されます。

    (n):番号n(1〜7)の条件を満たしている場合は,適合していると判定されます。

     1:JUSTIFIED句が一致している

     2:JUSTIFIED句とPICTURE文字列が一致している

     3:PICTURE文字列の符号有無と小数部桁数およびSIGN句が一致している

     4:PICTURE文字列の符号有無と小数部桁数が一致している

     5:PICTURE文字列の符号有無と小数部桁数が一致している(ただし,BY CONTENT指定またはBY VALUE指定のとき,実引数が符号なしなら符号有無は一致とみなす)。

     6:PICTURE文字列とBLANK WHEN ZEROが一致している(DECIMAL-POINT IS COMMA句は考慮されない)。

     7:PICTURE文字列が一致している(DECIMAL-POINT IS COMMA句は考慮される)。

    注意事項
    • 日本語集団項目は,日本語項目として扱われます。

    • 英字項目,外部10進項目,英数字編集項目および数字編集項目の部分参照は,英数字項目として扱われます。また,日本語編集項目の部分参照は,日本語項目として扱われます。そのほかのデータ項目の部分参照は,データ項目のデータ型を持つものとして扱われます。

    • 2進項目(COMP-5項目を含む)で,かつBY CONTENT指定またはBY VALUE指定の場合は,実引数が符号なしで仮引数が符号ありの組み合わせでも適合として扱われます。

    • 実引数と仮引数の両方がオブジェクト参照項目の場合,USAGE句のクラス名やインタフェース名の指定に違いがあっても適合として扱われます。

    • 数字編集項目のPICTURE句の等価判断では,DECIMAL-POINT IS COMMA句の差異は考慮されません。

(b) 報告内容

実引数と仮引数のデータ型が適合していない場合,不整合引数一覧CSVファイルに不整合種別が「データ型不適合」の不整合引数情報を出力します。また,不整合引数一覧のタグファイル警告メッセージを出力します。

各ファイルのフォーマットを次に示します。

不整合引数一覧CSVファイル
項番,<<呼出元情報>>,"-",引数番号,<<実引数情報>>,呼出先プログラム名,"-",<<仮引数情報>>,"データ型不適合"

不整合引数一覧CSVファイルに出力される情報の内容については,「8.2.6 不整合引数一覧」を参照してください。

不整合引数一覧タグファイル
# [項番] ソースファイル名, ソース行番号  CALL '呼出先プログラム名' (第<引数番号>引数)  データ型不適合
"パス名1", line 行番号1: KEDL4020A-W CALL文の*** 1 ***番目の実引数のデータ型が仮引数のデータ型と適合していません。呼出元プログラム=*** 2 ***,呼出先プログラム=*** 3 ***
"パス名2", line 行番号2: KEDL4021A-I   実引数=*** 1 ***   データ型=*** 2 ***
"パス名3", line 行番号3: KEDL4022A-I   実引数=*** 1 ***   データ型=*** 2 ***

不整合引数一覧タグファイルに出力される情報の内容を次に示します。

[項番]

不整合引数一覧.csv内の不整合引数情報の通番です。

[ソースファイル名]

CALL文のソースファイルのフォルダパス名なしのファイル名です。

[ソース行番号]

CALL文の[ソース表示(COPY展開後)]画面上の行番号です。

[パス名1]

CALL文のCOBOLソースファイルまたは登録集原文ファイルの絶対パス名です。

[行番号1]

CALL文のファイル(パス名1)内の相対行番号です。

[パス名2]

実引数がデータ項目の場合

 データ記述項のCOBOLソースファイルまたは登録集原文ファイルの絶対パス名です。

実引数がデータ項目以外の場合

 CALL文のCOBOLソースファイルまたは登録集原文ファイルの絶対パス名です。

[行番号2]

実引数がデータ項目の場合

 実引数のデータ記述項のファイル(パス名2)内の相対行番号です。

実引数がデータ項目以外の場合

 CALL文のファイル(パス名2)内の相対行番号です。

[パス名3]

仮引数のデータ記述項のCOBOLソースファイルまたは登録集原文ファイルの絶対パス名です。

[行番号3]

仮引数のデータ記述項のファイル(パス名3)内の相対行番号です。

(4) サイズのチェック

(a) 検査内容

実引数と仮引数のサイズが一致しているかどうかを検査します。ただし,次の場合,サイズチェックの検査対象から除外されます。

  • [解析生成オプション設定]画面の[引数整合性チェック]タブで[次の条件をすべて満たすケースを検出しない]を有効(チェックボックスがオン)にして,かつ実引数と仮引数が次の条件をすべて満たす場合

    • 参照渡し,または内容渡しである

    • 実引数と仮引数の一方または両方が集団項目である

    • 実引数サイズ>仮引数サイズである

  • [解析生成オプション設定]画面の[引数整合性チェック]タブで[一方が可変長集団項目の場合はサイズ検査対象外とする]を有効(チェックボックスがオン)にして,かつ実引数または仮引数の一方が可変長集団項目の場合

    なお,無効(チェックボックスがオフ)にしている場合は,可変長集団項目は最大長を使って検査されます。

  • 実引数が部分参照で長さが省略,変数または式の場合

  • 実引数または仮引数のどちらかがLIMIT指定のない動的長基本項目の場合

(b) 報告内容

実引数と仮引数のサイズが一致していない場合,不整合引数一覧CSVファイルに不整合種別が「サイズ不一致」の不整合引数情報を出力します。また,不整合引数一覧タグファイルに警告メッセージを出力します。

各ファイルのフォーマットを次に示します。

不整合引数一覧CSVファイル
項番,<<呼出元情報>>,"-",引数番号,<<実引数情報>>,呼出先プログラム名,"-",<<仮引数情報>>,"サイズ不一致"

不整合引数一覧CSVファイルに出力される情報の内容については,「8.2.6 不整合引数一覧」を参照してください。

不整合引数一覧タグファイル
# [項番] ソースファイル名, ソース行番号  CALL '呼出先プログラム名' (第<引数番号>引数)  サイズ不一致
"パス名1", line 行番号1: KEDL4030A-W CALL文の*** 1 ***番目の実引数のサイズが仮引数のサイズと一致していません。呼出元プログラム=*** 2 ***,呼出先プログラム=*** 3 ***
"パス名2", line 行番号2: KEDL4031A-W   実引数=*** 1 ***   サイズ=*** 2 ***
"パス名3", line 行番号3: KEDL4032A-W   仮引数=*** 1 ***   サイズ=*** 2 ***

不整合引数一覧タグファイルに出力される情報の内容を次に示します。

[項番]

不整合引数一覧.csv内の不整合引数情報の通番です。

[ソースファイル名]

CALL文のソースファイルのフォルダパス名なしのファイル名です。

[ソース行番号]

CALL文の[ソース表示(COPY展開後)]画面上の行番号です。

[パス名1]

CALL文のCOBOLソースファイルまたは登録集原文ファイルの絶対パス名です。

[行番号1]

CALL文のファイル(パス名1)内の相対行番号です。

[パス名2]

実引数がデータ項目の場合

 データ記述項のCOBOLソースファイルまたは登録集原文ファイルの絶対パス名です。

実引数がデータ項目以外の場合

 CALL文のCOBOLソースファイルまたは登録集原文ファイルの絶対パス名です。

[行番号2]

実引数がデータ項目の場合

 データ記述項のファイル(パス名2)内の相対行番号です。

実引数がデータ項目以外の場合

 CALL文のファイル(パス名2)内の相対行番号です。

[パス名3]

仮引数のデータ記述項のCOBOLソースファイルまたは登録集原文ファイルの絶対パス名です。

[行番号3]

仮引数のデータ記述項のファイル(パス名3)内の相対行番号です。

(5) 集団項目の構造チェック

(a) 検査内容

実引数と仮引数が集団項目の場合に,集団項目に属するデータ項目の構造が一致しているかを検査します。

実引数と仮引数の集団項目に属するすべての従属項目(再定義項目と再命名項目を除く)が,次に示す条件を満たしている場合,集団項目の構造が一致しているとみなされます。

  1. 従属項目の集団項目先頭からのオフセットが等しい

  2. 従属項目のOCCURS句の有無と反復回数(DEPENDING ON指定の場合は最大反復回数)が等しい

  3. 従属項目のデータ構造が等しい

    従属項目のデータ構造の例を次に示します。

    [図データ]

    次の条件を満たす場合,データ構造は等しいとして扱われます。

    • 集団項目同士の場合,集団項目の構造が等しい(構造を再帰的に検査する)

    • 基本項目同士の場合,サイズが等しい(データ型は検査しない)

    • 基本項目と集団項目の場合は,サイズが等しい

    従属項目が被再定義項目の場合は,被再定義項目のデータ構造が非等価でも,再定義項目の中にデータ構造が一致するものがあれば,データ構造は等しいとして扱われます。

注意事項
  • 次の場合,集団項目の構造チェックは実施されません。

    ・実引数と仮引数の受渡方法が不一致の場合

    ・実引数または仮引数の一方が集団項目ではない場合

    ・実引数がファイル節,作業場所節,局所場所節,連絡節の集団項目ではない場合

    ・実引数が再命名項目である場合

    ・実引数が部分参照である場合

  • 実引数と仮引数の集団項目のサイズが異なる場合,2つの集団項目を重ね合わせたときに領域が重なる部分だけが検査されます。

(b) 報告内容

実引数と仮引数の集団項目の構造が一致していない場合,不整合引数一覧CSVファイルに不整合種別が「構造不一致」の不整合引数情報を出力します。また,不整合引数一覧タグファイルに警告メッセージを出力します。

各ファイルのフォーマットを次に示します。

不整合引数一覧CSVファイル
項番,<<呼出元情報>>,"-",引数番号,<<実引数情報>>,呼出先プログラム名,"-",<<仮引数情報>>,"構造不一致"

不整合引数一覧CSVファイルに出力される情報の内容については,「8.2.6 不整合引数一覧」を参照してください。

不整合引数一覧タグファイル
# [項番] ソースファイル名, ソース行番号  CALL '呼出先プログラム名' (第<引数番号>引数)  構造不一致
"パス名1", line 行番号1: KEDL4040A-W CALL文の*** 1 ***番目の実引数の集団項目の構造が仮引数の集団項目の構造と一致していません。呼出元プログラム=*** 2 ***,呼出先プログラム=*** 3 ***

集団項目の構造チェックでは,不一致の内容によって出力される警告メッセージが異なります。

集団項目先頭からのオフセットが不一致の場合
"パス名2", line 行番号2: KEDL4041A-W   実引数 集団項目=*** 1 ***   従属項目=*** 2 ***   オフセット=*** 3 ***
"パス名3", line 行番号3: KEDL4042A-W   仮引数 集団項目=*** 1 ***   従属項目=*** 2 ***   オフセット=*** 3 ***
OCCURS句の有無または反復回数が不一致の場合
"パス名2", line 行番号2: KEDL4043A-W   実引数 集団項目=*** 1 ***   従属項目=*** 2 ***   OCCURS=*** 3 ***
"パス名3", line 行番号3: KEDL4044A-W   仮引数 集団項目=*** 1 ***   従属項目=*** 2 ***   OCCURS=*** 3 ***
サイズが不一致の場合
"パス名2", line 行番号2: KEDL4045A-W   実引数 集団項目=*** 1 ***   従属項目=*** 2 ***   サイズ=*** 3 ***
"パス名3", line 行番号3: KEDL4046A-W   仮引数 集団項目=*** 1 ***   従属項目=*** 2 ***   サイズ=*** 3 ***

不整合引数一覧タグファイルに出力される情報の内容を次に示します。

[項番]

不整合引数一覧.csv内の不整合引数情報の通番です。

[ソースファイル名]

CALL文のソースファイルのフォルダパス名なしのファイル名です。

[ソース行番号]

CALL文の[ソース表示(COPY展開後)]画面上の行番号です。

[パス名1]

CALL文のCOBOLソースファイルまたは登録集原文ファイルの絶対パス名です。

[行番号1]

CALL文のファイル(パス名1)内の相対行番号です。

[パス名2]

実引数のデータ記述項のCOBOLソースファイルまたは登録集原文ファイルの絶対パス名です。

[行番号2]

実引数のデータ記述項のファイル(パス名2)内の相対行番号です。

[パス名3]

仮引数のデータ記述項のCOBOLソースファイルまたは登録集原文ファイルの絶対パス名です。

[行番号3]

仮引数のデータ記述項のファイル(パス名3)内の相対行番号です。

(6) 対応する仮引数のない実引数の情報の検出

実引数個数>仮引数個数の場合に,対応する仮引数のない実引数(実引数番号>仮引数個数)の情報を検出します。不整合引数一覧CSVファイルには,不整合種別が「対応する仮引数なし」の不整合引数情報を出力します。なお,不整合引数一覧タグファイルには警告メッセージは出力されません。

ファイルのフォーマットを次に示します。

不整合引数一覧CSVファイル
項番,<<呼出元情報>>,"-",引数番号,<<実引数情報>>,呼出先プログラム名,"-","-",・・・,"-","対応する仮引数なし"

仮引数情報のすべての列には「-」が出力されます。不整合引数一覧CSVファイルに出力される情報の内容については,「8.2.6 不整合引数一覧」を参照してください。

(7) 対応する実引数のない仮引数の情報の検出

実引数個数<仮引数個数の場合に,対応する実引数のない仮引数(仮引数番号>実引数個数)の情報を検出します。不整合引数一覧CSVファイルには,不整合種別が「対応する実引数なし」の不整合引数情報を出力します。なお,不整合引数一覧タグファイルには警告メッセージは出力されません。

ファイルのフォーマットを次に示します。

不整合引数一覧CSVファイル
項番,<<呼出元情報>>,"-",引数番号,"-",・・・,"-",呼出先プログラム名,"-",<<仮引数情報>>,"対応する実引数なし"

実引数情報のすべての列には「-」が出力されます。不整合引数一覧CSVファイルに出力される情報の内容については,「8.2.6 不整合引数一覧」を参照してください。