Skip to content

C言語の出力が残っているコード #785

@tsh-hashimoto

Description

@tsh-hashimoto

C言語コードが出力される可能性のある箇所一覧

1. joutput_initialize_fp (2246-2252行目)

  • COMP-1 または COMP-2 を使ったときに出てくるコードだが、現在parserでエラーを出すようにしているので、対応不要と判断した。COMP-1, COMP-2を実装するときにここを修正することにする。
詳細
joutput("{float temp = 0.0;");              // C変数宣言
joutput(" LIBCOB.memcpy (");                // C関数呼び出し
joutput(", (char *)&temp, sizeof(temp));}\n"); // キャスト, &演算子, sizeof

問題: {float temp = 0.0;}, (char *)&temp, sizeof(temp) はすべてC固有の構文。


2. joutput_dataCB_TAG_CAST ケース (963行目)

joutput("&");
joutput_param(x, 0);

問題: & (アドレス演算子) はJavaに存在しない。


3. joutput_dataCB_TAG_INTRINSIC ケース (967行目)

詳細
joutput("module.cob_procedure_parameters[%d]->data", field_iteration);

問題: -> (アロー演算子) はC固有。Javaでは . を使う。


4. joutput_integerCB_USAGE_POINTER ケース (1328-1330行目)

詳細
joutput("(*(unsigned char **) (");
joutput_data(x);
joutput("))");

問題: unsigned char ** 型キャストとポインタデリファレンス * はC固有。


5. joutput_paramCB_ALPHABET_CUSTOM ケース (1605行目)

詳細
joutput("&%s%s", CB_PREFIX_FIELD, rbp->cname);

問題: & (アドレス演算子)。


6. joutput_initialize_literal (2216行目)

詳細
joutput_data(x);
joutput("memcpy (");

問題: .memcpy( ではなく memcpy ( と出力されるため、Javaのメソッド呼び出しとして不正。他の箇所 (2228行目等) では正しく .memcpy(となっている。


7. joutput_initialize_oneflag_chained ケース (2316-2318行目)

詳細
joutput("cob_chain_setup (");
joutput_data(x);
joutput(", %d, %d);\n", f->param_num, f->size);

問題: cob_chain_setup はC版ランタイム (libcob) の関数。Java側に対応する実装が必要。


8. joutput_callvoid * ポインタ宣言 (2830, 2835行目)

詳細
joutput_line("void *ptr_%d;", (int)n);

問題: void * はC固有のポインタ型。Javaに存在しない。


9. joutput_call&ptr_N (3041, 3052行目)

詳細
joutput("&ptr_%d", (int)n);

問題: & (アドレス演算子) + #8 で宣言した void * 変数への参照。


10. joutput_call — CALL BY VALUE の型キャスト (3097-3159行目)

詳細
joutput("(unsigned ");     // "unsigned" はJavaに存在しない
...
joutput("char");           // → "(unsigned char)" — Javaに存在しない型
joutput("short");          // → "(unsigned short)"
joutput("int");            // → "(unsigned int)"
joutput("long long");      // → "(unsigned long long)" — "long long" はC固有

問題: unsigned 修飾子と long long 型はJavaに存在しない。


11. joutput_call — ポインタデリファレンス (3170-3172行目)

詳細
joutput("*(");
joutput_data(x);
joutput(")");

問題: *(...) はCのポインタデリファレンス。


12. joutput_baseunsigned char * 変数宣言 (873-878行目)

詳細
joutput_local("unsigned char\t\t*%s%s = NULL;", CB_PREFIX_BASE, name);
joutput_local("static unsigned char\t*save_%s%s;\n", CB_PREFIX_BASE, name);
joutput_local("unsigned char\t*%s%s = NULL;", CB_PREFIX_BASE, name);

問題: unsigned char * はC固有のポインタ型宣言。NULL もJavaでは null


13. joutput_basecb_field_variable_address(f) が有効になるときの処理


分類まとめ

カテゴリ 該当箇所
ポインタ演算 (&, *, void *, unsigned char *) 2, 4, 5, 8, 9, 11, 12
C固有の型 (unsigned, long long) 4, 10, 12
C固有の演算子/関数 (sizeof, ->) 1, 3
C版ランタイム関数 (cob_chain_setup, LIBCOB.memcpy) 1, 7
メソッド呼び出し構文の誤り (. の欠落) 6

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions