Compiling While
[[ while(c) s ]] =
nStart: [[c]]
if_eq nAfter
[[s]]
goto nStart
nAfter:
Example
Java code:
class Test {
static boolean condition(int n) { ... }
static void work(int n) { ... }
static void test() {
int n = 100;
while (condition(n)) {
n = n - 11;
work(n);
}
}
}
Bytecodes for test():
static void test(); Code: 0: bipush 100 2: istore_0 3: iload_0 4: invokestatic #4; //Method condition:(I)Z 7: ifeq 22 10: iload_0 11: bipush 11 13: isub 14: istore_0 15: iload_0 16: invokestatic #5; //Method work:(I)V 19: goto 3 22: return
See also Compiled Counting Examples that uses relations.