あやみつさんの覚書き

メモや覚書きなど

asmのLdcInsnNodeについてメモ

LdcInsnNodeはAbstractInsnNodeを継承したクラスで、ClassNodeのmethodsのフィールドの中の、MethodNodeのinstructionsのフィールドの中にはいっていることがあります。
LdcInsnNodeは「LDC」のNodeらしいのですが、この「LDC」が何の略かわからないです。定数がなんたららしいです。
// 追記:2013/02/24
LDCはどうやら"load constant"の略のようです・・・?

LdcInsnNodeはコードの中では

public void f(int i) {
    int j = i + 1;
    System.out.println(j);
}

この中の"1"にあたります。
他にも例を示すならば、

public float f(float f) {
    return f + 1.5F;
}

この中の"1.5F"もそうです。

public boolean f() {
    return true;
}

この中の"true"もそうです。
説明は難しいですが、変数ではないです。

LdcInsnNodeのcstというフィールドは"constant"の略語、つまり定数ということですね。
cstはObject型ですが、出力してみるとInteger型だったりFloat型だったり、プリミティブ型のラッパークラスであるのがわかります。

例えば

public void f() {
    System.out.println(1.5F);
}

この場合はLdcInsnNodeのcstには、Float型の値が1.5のものが入ります。
値だけ変えたいのであればこのcstを置き換えればいいでしょう。

LDCが何の略か知りたいですね・・・