KOS_OP_JUMP_OR

  • Style: LABEL. Short-circuit OR: jump if TOS is true.

  • Stack: Pops one value; if true, push it back and jump to arg; if false, discard it and advance. Either way TOS is consumed on the fall-through path.

  • Invariants: Jump locality for target.

  • Compiler form: Pre-compile arg = string label; post-compile arg = pc.

Compiler use-case: compile/or is the canonical consumer (koskari/compile/specials/conditionals.py). For (or A B C) the compiler emits one JUMP_OR done after each non-last term; the last term is compiled without a jump. Because JUMP_OR already discards the value on the fall-through path, no POP is needed between terms.

eval A
JUMP_OR done    ; truthy → push A back, jump to done
eval B          ; A was already discarded on fall-through
JUMP_OR done
eval C          ; last term -- value stays on stack
done:

Example: Short-circuit or: if first operand true, jump to “ok”.

index

opcode

arg

arg view

comment

0

CONST

0

0 (False)

stack: […, a]

1

JUMP_OR

4

4 (-> 4)

if a → pc=4

2

CONST

1

1 (False)

stack: […, b]

3

JUMP_OR

4

4 (-> 4)

if b → pc=4

4

LABEL

–

–

ok

5

RETURN

1

1

9. Check jumps

Check jumps: if the predicate does not hold, jump to arg. All take LABEL; jump locality applies.