#include <perms.h>
// Edinburgh IMP77 Compiler - Version 8.4
//
// 1 %begin
int main(int argc, char **argv) { /*%begin*/
_imp_initialise(argc, argv);
// 2 %integer cond
int COND;
// 3 cond = 1
COND = 1;
// 4 !
// 5 %if cond # 0 %start
if (COND == 0) goto L_0001;
// 6 %if cond # 1 %start { generated dangling else error until fixed with extra bracketing }
if (COND == 1) goto L_0002;
// 7 cond = 4
COND = 4;
// 8 %finish
L_0002:;
// 9 %finishelsestart
goto L_0003;
L_0001:;
// 10 cond = 3
COND = 3;
// 11 %finish
L_0003:;
// 12
// 13 ! Same logic but tortured expression of it...
// 14 ! this one *would* have still generated dangling else error
// 15 ! *IF* the then/else reversal were working as it should! (which it isn't)
// 16
// 17 %if cond # 0 %start
if (COND == 0) goto L_0004;
// 18 %if cond = 1 %start
if (COND != 1) goto L_0005;
// 19 %finishelse cond = 4
goto L_0006;
L_0005:;
COND = 4;
L_0006:;
// 20 %finishelsestart
goto L_0007;
L_0004:;
// 21 cond = 3
COND = 3;
// 22 %finish
L_0007:;
// 23
// 24 ! Let's test the simple reversal on its own...
// 25 %if cond = 1 %start
if (COND != 1) goto L_0008;
// 26 %finishelse cond = 4
goto L_0009;
L_0008:;
COND = 4;
L_0009:;
// 27
// 28 %endofprogram
_imp_stop(0);
return 0;
end_0:;
}