機能を追加するために javac をハッキングしています。現在、このコードをテストしています。
public class HelloWorld {
int f = 0;
int g(boolean x){
assert(x);
return 5;
}
int m(boolean x){
return n() - g(x) + p();
}
int n() {
return f == 0 ? f += 1 : 0;
}
int p() {
return f == 2 ? f += 2 : 0;
}
public static void main(String[] args) {
HelloWorld test = new HelloWorld();
int val = test.m(true);
System.out.println(val);
}
}
重要なことは、g() が AssertionError をスローする可能性があることですが、m() を生成すると、n() にアクセスする前にアサーションが生成されます。
コンパイラがそれを行う理由や方法を知っている人はいますか?
ありがとう。