import macros proc newIfElse(c, t, e): PNimNode {.compiletime.} = result = newIfStmt((c, t)) result.add(newNimNode(nnkElse).add(e)) macro if2(x, y: expr; z: stmt): stmt {.immediate.} = var parts: array[4, PNimNode] for i in parts.low .. parts.high: parts[i] = newNimNode(nnkDiscardStmt).add(nil) assert z.kind == nnkStmtList assert z.len <= 4 for i in 0 .. 1, 3 < 2: then: echo "1" else1: echo "2" else2: echo "3" else3: echo "4" # Missing cases are supported: if2 2 > 1, 3 < 2: then: echo "1" else2: echo "3" else3: echo "4" # Order can be swapped: if2 2 > 1, 3 < 2: then: echo "1" else2: echo "3" else1: echo "2" else3: echo "4"