Compiling If-Then-Else
Assume that translation of c, denoted [ [ c ] ], produces a boolean value on top of the stack
Then:
[[ If (c) sThen else sElse ]] =
[[ c ]]
if_eq nAfter
[[ sThen ]]
goto nAfter
nElse: [[ s2 ]]
nAfter:
Example
Translating
public static int test(boolean b) { if (b) return 13; else return 42; }
Bytecode:
public static int test(boolean); Code: 0: iload_0 1: ifeq 7 4: bipush 13 6: ireturn 7: bipush 42 9: ireturn
Question
When generating
if_eq nAfter
how do we know the offset nAfter?