aosabook/500lines · error · VirtualMachineError

unsupported bytecode type: %s

Error message

unsupported bytecode type: %s

What it means

Error "unsupported bytecode type: %s" thrown in aosabook/500lines.

Source

Thrown at interpreter/code/byterun/simple_python_interpreter.py:136

        return byteName, arguments

    def dispatch(self, byteName, arguments):
        """ Dispatch by bytename to the corresponding methods.
        Exceptions are caught and set on the virtual machine."""

        # When later unwinding the block stack,
        # we need to keep track of why we are doing it.
        why = None
        try:
            if byteName.startswith('UNARY_'):
                self.unaryOperator(byteName[6:])
            elif byteName.startswith('BINARY_'):
                self.binaryOperator(byteName[7:])
            else:
                # main dispatch
                bytecode_fn = getattr(self, 'byte_%s' % byteName, None)
                if not bytecode_fn:            # pragma: no cover
                    raise VirtualMachineError(
                        "unsupported bytecode type: %s" % byteName
                    )
                why = bytecode_fn(*arguments)
        except:
            # deal with exceptions encountered while executing the op.
            self.last_exception = sys.exc_info()[:2] + (None,)
            why = 'exception'

        return why

    def manage_block_stack(self, why):
        block = self.frame.block_stack[-1]

        if block.type == 'loop' and why == 'continue':
            self.jump(self.return_value)
            why = None
            return why

View on GitHub (pinned to fba689d101)

Solutions

  1. Add a byte_<NAME> method to the VirtualMachine class for the unsupported instruction.
  2. For UNARY_/BINARY_ opcodes, register the operator in the operator maps so the generic dispatch handles it.
  3. Only run code compiled with a Python version whose bytecode set this interpreter implements.

Example fix

def byte_LOAD_CONST(self, const):
    self.push(const)  # implement the missing bytecode handler

When it happens

Trigger: Thrown at interpreter/code/byterun/simple_python_interpreter.py:136 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of aosabook/500lines@fba689d101 (2026-08-13). Data as JSON: /api/errors/e0d7c6b09ed565ea. Report an issue: GitHub.