Javac流程决策

时间:2012-07-20 15:32:18

标签: compiler-construction javac flow assertion

我正在攻击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()之前就会生成断言。

有谁知道编译器为什么或如何做到这一点?

感谢。

0 个答案:

没有答案