// In CON, the dangling else ambiguity is resolved in a very peculiar way:
// A cascade "ifP1 ifP2 ifP3 Stmt1 ... else Stmt2" is considered as if the
// predicates P1, P2, P3, ... are combined with a logical AND.
// So effectively, there is no ambiguity at all, and one of Stmt1 and Stmt2
// is guaranteed to be taken.

define Q 114
define GLOBAL 0

gamevar x 0 GLOBAL
// divisible by 2, 3, 5?
gamevar xm2 0 GLOBAL
gamevar xm3 0 GLOBAL
gamevar xm5 0 GLOBAL

state testelse
    setvarvar xm2 x, modvar xm2 2
    setvarvar xm3 x, modvar xm3 3
    setvarvar xm5 x, modvar xm5 5

    redefinequote Q ERROR: one path of if/else must be taken

    ifvarn xm2 0
    ifvarn xm3 0
    ifvarn xm5 0
        redefinequote Q x=%d is not divisible by either 2, 3 or 5
    else
        redefinequote Q x=%d is divisible by either 2, 3 or 5

    qsprintf Q Q x
    userquote Q
ends

onevent EVENT_ENTERLEVEL
    setvar x 0
    whilevarn x 31
    {
        state testelse
        addvar x 1
    }
endevent

// Test deferred code. This CON code doesn't make much sense, but check out
// the generated Lua code...
onevent EVENT_JUMP
    ifpdistl 100 ifpdistg 0 ifcanseetarget
    {
        palfrom 32 32 32
        ifcanseetarget
            quote 29
        ifcanseetarget
            quote 30
        setvar x 0
        state testelse
    }
    else ifcanseetarget
        quote 31
    else ifvare 1 1
    {
        // Test empty brace-enclosed statement under if condition.
    }
    else
    {
        quote Q
    }
endevent
