KOS_OP_CHECK_COMPARE
Style: EXTRA (CMP, COUNT, LABEL, RAW). Row = KosCompare selector, operand count, target pc, negate flag.
Stack:
[..., a1, ..., aN] → [...]. Chain-compare the top COUNT operands under the selector, negated when the negate flag is set; jump to LABEL when the chain fails. The operands are dropped either way. RaisesTypeErrorwhenCOUNT < 2.Invariants: Selector is a valid KosCompare ordinal. The richcompare six (LT/LE/EQ/NE/GT/GE, ordinals 0-5, matching CPython’s Py_LT..Py_GE) chain over any COUNT; IS, IS_NOT, IN and NOT_IN require COUNT == 2; IS_INSTANCE and IS_SUBCLASS take any COUNT >= 2.
Compiler form: Produced by
Compiler.compressfusingOBJECT_COMPARE+JUMP_FALSEinto one instruction, andOBJECT_COMPARE+JUMP_TRUEinto the same with the flag set. Never emitted directly by specials.
Example: Branch unless 1 < x < 100. Selector LT = 0.
index |
opcode |
arg |
arg view |
comment |
|---|---|---|---|---|
0 |
CONST |
0 |
0 (1) |
stack: […, 1] |
1 |
FAST |
0 |
0 (x) |
stack: […, 1, x] |
2 |
CONST |
1 |
1 (100) |
stack: […, 1, x, 100] |
3 |
CHECK_COMPARE |
0 |
(LT, 3, -> 6, 0) |
jump to 6 unless 1 < x < 100 |