# KOS_OP_VAR2 - **Style**: EXTRA (VAR, VAR, NOARG, NOARG). Row = two constant pool name indices (post-compile). - **Stack**: `[...] → [..., a, b]`. Load both names from the frame namespace and push in row order. Both names resolve before either push, so a missing name errors with nothing pushed. - **Invariants**: Names in constant pool. - **Compiler form:** Never emitted by specials. Produced only by `ByteCodeProcessor.pack_runs` (the trailing pack phase), which combines a run of two consecutive bare VAR loads (quads first, then one triple or one pair). `convert_fast` lowers to FAST2 when both names have fast slots (all-or-nothing; a mixed-eligibility row stays VAR2). **Example:** Load "x" then "y". Pool: 0 = "x", 1 = "y". | index | opcode | arg | arg view | comment | |------:|--------|-----|----------|---------| | 0 | VAR2 | 0 | (0 ('x'), 1 ('y'), 0, 0) | stack: [..., x, y] | | 1 | RETURN | 1 | 1 | |