私はJavaバイトコードにかなり慣れていません。BCEL を使用してバイトコードを生成していますが、生成されたコードを使用しようとするとエラー メッセージが表示されます。(後から考えると、ObjectWeb ASM は BCEL よりも高度で、より一般的に使用されているようです。)
エラーメッセージは次のとおりです。
Exception in thread "main" java.lang.VerifyError:
(class: cb/io/FileDescriptor, method: set
signature: (I)J)
Stack size too large
メソッドは次のとおりです。
// Method descriptor #4 (I)J
// Stack: 0, Locals: 1
private static long set(int arg1);
0 lconst_0
1 lreturn
Local variable table:
[pc: 0, pc: 2] local: arg1 index: 0 type: int
私が理解していることから、入力パラメーターと一致するため、ローカル変数テーブルは正しいです。メソッドが静的であるため、「this」変数を追加していません。
私が間違っていなければ、lconst_0 は long 値 0 をスタックにロードし、lreturn はその値を消費して返します。
私は何を間違っていますか?ここに伝えるのに十分な情報はありますか?
ありがとう!