Javaのデバッグログ出力メソッドを削除するライブラリーで、メソッド呼び出しの引数の中で三項演算子を使っている場合に変換できなかったので、修正してみた。
このライブラリーは メソッド呼び出しのスタック使用量に相当する引数のPUSHを削除しているので、スタック計算が重要になっている。しかし、三項演算子はIFやGOTO命令で分岐しているのだが、そこでジャンプした先(GOTOの直後の命令)のスタック使用量を正しく計算できていなかった。これが敗因。
ジャンプする命令は 他にもSWITCHとかTABLEとかいう感じのがあるみたいなんだけど、たぶんメソッドの引数を計算する時には出てこないと思うので、対応は省略。
メソッドを呼び出す為の引数をスタックに積む以外は、何らかの処理が終わった後にスタックが増減している要因は無いんじゃないかと思うんだよね。だからif文だろうがswitch文だろうが、メソッド呼び出し以外の命令の開始時点のスタック使用量は、たぶん0。という前提でロジックを端折ったので、もし違ってたらまた直さなきゃ(汗)…そうなると複雑そうなので、直せるかどうか分からないけど(爆)
※コメント投稿者のブログIDはブログ作成者のみに通知されます