\section{Standard Module \sectcode{dis}}
\stmodindex{dis}

\label{module-dis}

The \code{dis} module supports the analysis of Python byte code by
disassembling it.  Since there is no Python assembler, this module
defines the Python assembly language.  The Python byte code which
this module takes as an input is defined in the file 
\file{Include/opcode.h} and used by the compiler and the interpreter.

Example: Given the function myfunc

\bcode\begin{verbatim}
def myfunc(alist):
  return len(alist)
\end{verbatim}\ecode

the following command can be used to get the disassembly of \code{myfunc()}:

\begin{verbatim}
>>> dis.dis(myfunc)
          0 SET_LINENO          1

          3 SET_LINENO          2
          6 LOAD_GLOBAL         0 (len)
          9 LOAD_FAST           0 (alist)
         12 CALL_FUNCTION       1
         15 RETURN_VALUE   
         16 LOAD_CONST          0 (None)
         19 RETURN_VALUE   
\end{verbatim}

The \code{dis} module defines the following functions:

\renewcommand{\indexsubitem}{(in module dis)}

\begin{funcdesc}{dis}{\optional{bytesource}}
Disassemble the \var{bytesource} object. \var{bytesource} can denote
either a class, a method, a function, or a code object.  For a class,
it disassembles all methods.  For a single code sequence, it prints
one line per byte code instruction.  If no object is provided, it
disassembles the last traceback.
\end{funcdesc}

\begin{funcdesc}{distb}{\optional{tb}}
Disassembles the top-of-stack function of a traceback, using the last
traceback if none was passed.  The instruction causing the exception
is indicated.
\end{funcdesc}

\begin{funcdesc}{disassemble}{code\optional{\, lasti}}
Disassembles a code object, indicating the last instruction if \var{lasti}
was provided.  The output is divided in the following columns:
\begin{itemize}
\item the current instruction, indicated as \code{-->},
\item a labelled instruction, indicated with \code{>>},
\item the address of the instruction,
\item the operation code name,
\item operation parameters, and
\item interpretation of the parameters in parentheses.
\end{itemize}
The parameter interpretation recognizes local and global
variable names, constant values, branch targets, and compare
operators.
\end{funcdesc}

\begin{funcdesc}{disco}{code\optional{\, lasti}}
A synonym for disassemble.  It is more convenient to type, and kept
for compatibility with earlier Python releases.
\end{funcdesc}

\begin{datadesc}{opname}
Sequence of a operation names, indexable using the byte code.
\end{datadesc}

\begin{datadesc}{cmp_op}
Sequence of all compare operation names.
\end{datadesc}

\begin{datadesc}{hasconst}
Sequence of byte codes that have a constant parameter.
\end{datadesc}

\begin{datadesc}{hasname}
Sequence of byte codes that access a attribute by name.
\end{datadesc}

\begin{datadesc}{hasjrel}
Sequence of byte codes that have a relative jump target.
\end{datadesc}

\begin{datadesc}{hasjabs}
Sequence of byte codes that have an absolute jump target.
\end{datadesc}

\begin{datadesc}{haslocal}
Sequence of byte codes that access a a local variable.
\end{datadesc}

\begin{datadesc}{hascompare}
Sequence of byte codes of boolean operations.
\end{datadesc}

\subsection{Python Byte Code Instructions}

The Python compiler currently generates the following byte code
instructions.

\renewcommand{\indexsubitem}{(byte code insns)}

\begin{opcodedesc}{STOP_CODE}{}
Indicates end-of-code to the compiler, not used by the interpreter.
\end{opcodedesc}

\begin{opcodedesc}{POP_TOP}{}
Removes the top-of-stack (TOS) item.
\end{opcodedesc}

\begin{opcodedesc}{ROT_TWO}{}
Swaps the two top-most stack items.
\end{opcodedesc}

\begin{opcodedesc}{ROT_THREE}{}
Lifts second and third stack item one position up, moves top down
to position three.
\end{opcodedesc}

\begin{opcodedesc}{DUP_TOP}{}
Duplicates the reference on top of the stack.
\end{opcodedesc}

Unary Operations take the top of the stack, apply the operation, and
push the result back on the stack.

\begin{opcodedesc}{UNARY_POSITIVE}{}
Implements \code{TOS = +TOS}.
\end{opcodedesc}

\begin{opcodedesc}{UNARY_NEG}{}
Implements \code{TOS = -TOS}.
\end{opcodedesc}

\begin{opcodedesc}{UNARY_NOT}{}
Implements \code{TOS = not TOS}.
\end{opcodedesc}

\begin{opcodedesc}{UNARY_CONVERT}{}
Implements \code{TOS = `TOS`}.
\end{opcodedesc}

\begin{opcodedesc}{UNARY_INVERT}{}
Implements \code{TOS = \~TOS}.
\end{opcodedesc}

Binary operations remove the top of the stack (TOS) and the second top-most
stack item (TOS1) from the stack.  They perform the operation, and put the
result back on the stack.

\begin{opcodedesc}{BINARY_POWER}{}
Implements \code{TOS = TOS1 ** TOS}.
\end{opcodedesc}

\begin{opcodedesc}{BINARY_MULTIPLY}{}
Implements \code{TOS = TOS1 * TOS}.
\end{opcodedesc}

\begin{opcodedesc}{BINARY_DIVIDE}{}
Implements \code{TOS = TOS1 / TOS}.
\end{opcodedesc}

\begin{opcodedesc}{BINARY_MODULO}{}
Implements \code{TOS = TOS1 \% TOS}.
\end{opcodedesc}

\begin{opcodedesc}{BINARY_ADD}{}
Implements \code{TOS = TOS1 + TOS}.
\end{opcodedesc}

\begin{opcodedesc}{BINARY_SUBTRACT}{}
Implements \code{TOS = TOS1 - TOS}.
\end{opcodedesc}

\begin{opcodedesc}{BINARY_SUBSCR}{}
Implements \code{TOS = TOS1[TOS]}.
\end{opcodedesc}

\begin{opcodedesc}{BINARY_LSHIFT}{}
Implements \code{TOS = TOS1 << TOS}.
\end{opcodedesc}

\begin{opcodedesc}{BINARY_RSHIFT}{}
Implements \code{TOS = TOS1 >> TOS}.
\end{opcodedesc}

\begin{opcodedesc}{BINARY_AND}{}
Implements \code{TOS = TOS1 and TOS}.
\end{opcodedesc}

\begin{opcodedesc}{BINARY_XOR}{}
Implements \code{TOS = TOS1 \^\ TOS}.
\end{opcodedesc}

\begin{opcodedesc}{BINARY_OR}{}
Implements \code{TOS = TOS1 or TOS}.
\end{opcodedesc}

The slice opcodes take up to three parameters.

\begin{opcodedesc}{SLICE+0}{}
Implements \code{TOS = TOS[:]}.
\end{opcodedesc}

\begin{opcodedesc}{SLICE+1}{}
Implements \code{TOS = TOS1[TOS:]}.
\end{opcodedesc}

\begin{opcodedesc}{SLICE+2}{}
Implements \code{TOS = TOS1[:TOS1]}.
\end{opcodedesc}

\begin{opcodedesc}{SLICE+3}{}
Implements \code{TOS = TOS2[TOS1:TOS]}.
\end{opcodedesc}

Slice assignment needs even an additional parameter.  As any statement,
they put nothing on the stack.

\begin{opcodedesc}{STORE_SLICE+0}{}
Implements \code{TOS[:] = TOS1}.
\end{opcodedesc}

\begin{opcodedesc}{STORE_SLICE+1}{}
Implements \code{TOS1[TOS:] = TOS2}.
\end{opcodedesc}

\begin{opcodedesc}{STORE_SLICE+2}{}
Implements \code{TOS1[:TOS] = TOS2}.
\end{opcodedesc}

\begin{opcodedesc}{STORE_SLICE+3}{}
Implements \code{TOS2[TOS1:TOS] = TOS3}.
\end{opcodedesc}

\begin{opcodedesc}{DELETE_SLICE+0}{}
Implements \code{del TOS[:]}.
\end{opcodedesc}

\begin{opcodedesc}{DELETE_SLICE+1}{}
Implements \code{del TOS1[TOS:]}.
\end{opcodedesc}

\begin{opcodedesc}{DELETE_SLICE+2}{}
Implements \code{del TOS1[:TOS]}.
\end{opcodedesc}

\begin{opcodedesc}{DELETE_SLICE+3}{}
Implements \code{del TOS2[TOS1:TOS]}.
\end{opcodedesc}

\begin{opcodedesc}{STORE_SUBSCR}{}
Implements \code{TOS1[TOS] = TOS2}.
\end{opcodedesc}

\begin{opcodedesc}{DELETE_SUBSCR}{}
Implements \code{del TOS1[TOS]}.
\end{opcodedesc}

\begin{opcodedesc}{PRINT_EXPR}{}
Implements the expression statement for the interactive mode.  TOS is
removed from the stack and printed.  In non-interactive mode, an
expression statement is terminated with \code{POP_STACK}.
\end{opcodedesc}

\begin{opcodedesc}{PRINT_ITEM}{}
Prints TOS.  There is one such instruction for
each item in the print statement.
\end{opcodedesc}

\begin{opcodedesc}{PRINT_NEWLINE}{}
Prints a new line on \code{sys.stdout}.  This is generated as the
last operation of a print statement, unless the statement ends
with a comma.
\end{opcodedesc}

\begin{opcodedesc}{BREAK_LOOP}{}
Terminates a loop due to a break statement.
\end{opcodedesc}

\begin{opcodedesc}{LOAD_LOCALS}{}
Pushes a reference to the locals of the current scope on the stack.
This is used in the code for a class definition: After the class body
is evaluated, the locals are passed to the class definition.
\end{opcodedesc}

\begin{opcodedesc}{RETURN_VALUE}{}
Returns with TOS to the caller of the function.
\end{opcodedesc}

\begin{opcodedesc}{EXEC_STMT}{}
Implements \code{exec TOS2,TOS1,TOS}.  The compiler fills
missing optional parameters with None.
\end{opcodedesc}

\begin{opcodedesc}{POP_BLOCK}{}
Removes one block from the block stack.  Per frame, there is a 
stack of blocks, denoting nested loops, try statements, and such.
\end{opcodedesc}

\begin{opcodedesc}{END_FINALLY}{}
Terminates a finally-block.  The interpreter recalls whether the
exception has to be re-raised, or whether the function returns,
and continues with the outer-next block.
\end{opcodedesc}

\begin{opcodedesc}{BUILD_CLASS}{}
Creates a new class object.  TOS is the methods dictionary, TOS1
the tuple of the names of the base classes, and TOS2 the class name.
\end{opcodedesc}

All of the following opcodes expect arguments.  An argument is two
bytes, with the more significant byte last.

\begin{opcodedesc}{STORE_NAME}{namei}
Implements \code{name = TOS}. \var{namei} is the index of \var{name}
in the attribute \code{co_names} of the code object.
The compiler tries to use \code{STORE_LOCAL} or \code{STORE_GLOBAL}
if possible.
\end{opcodedesc}

\begin{opcodedesc}{DELETE_NAME}{namei}
Implements \code{del name}, where \var{namei} is the index into
\code{co_names} attribute of the code object.
\end{opcodedesc}

\begin{opcodedesc}{UNPACK_TUPLE}{count}
Unpacks TOS into \var{count} individual values, which are put onto
the stack right-to-left.
\end{opcodedesc}

\begin{opcodedesc}{UNPACK_LIST}{count}
Unpacks TOS into \var{count} individual values.
\end{opcodedesc}

%\begin{opcodedesc}{UNPACK_ARG}{count}
%This opcode is obsolete.
%\end{opcodedesc}

\begin{opcodedesc}{STORE_ATTR}{namei}
Implements \code{TOS.name = TOS1}, where \var{namei} is the index
of name in \code{co_names}.
\end{opcodedesc}

\begin{opcodedesc}{DELETE_ATTR}{namei}
Implements \code{del TOS.name}, using \var{namei} as index into
\code{co_names}.
\end{opcodedesc}

\begin{opcodedesc}{STORE_GLOBAL}{namei}
Works as \code{STORE_NAME}, but stores the name as a global.
\end{opcodedesc}

\begin{opcodedesc}{DELETE_GLOBAL}{namei}
Works as \code{DELETE_NAME}, but deletes a global name.
\end{opcodedesc}

%\begin{opcodedesc}{UNPACK_VARARG}{argc}
%This opcode is obsolete.
%\end{opcodedesc}

\begin{opcodedesc}{LOAD_CONST}{consti}
Pushes \code{co_consts[consti]} onto the stack.
\end{opcodedesc}

\begin{opcodedesc}{LOAD_NAME}{namei}
Pushes the value associated with \code{co_names[namei]} onto the stack.
\end{opcodedesc}

\begin{opcodedesc}{BUILD_TUPLE}{count}
Creates a tuple consuming \var{count} items from the stack, and pushes
the resulting tuple onto the stack.
\end{opcodedesc}

\begin{opcodedesc}{BUILD_LIST}{count}
Works as \code{BUILD_TUPLE}, but creates a list.
\end{opcodedesc}

\begin{opcodedesc}{BUILD_MAP}{zero}
Pushes an empty dictionary object onto the stack.  The argument is ignored
and set to zero by the compiler.
\end{opcodedesc}

\begin{opcodedesc}{LOAD_ATTR}{namei}
Replaces TOS with \code{getattr(TOS,co_names[namei]}.
\end{opcodedesc}

\begin{opcodedesc}{COMPARE_OP}{opname}
Performs a boolean operation.  The operation name can be found
in \code{cmp_op[opname]}.
\end{opcodedesc}

\begin{opcodedesc}{IMPORT_NAME}{namei}
Imports the module \code{co_names[namei]}.  The module object is
pushed onto the stack.  The current name space is not affect: for a
proper import statement, a subsequent \code{STORE_FAST} instruction
modifies the name space.
\end{opcodedesc}

\begin{opcodedesc}{IMPORT_FROM}{namei}
Imports the attribute \code{co_names[namei]}.  The module to import
from is found in TOS and left there.
\end{opcodedesc}

\begin{opcodedesc}{JUMP_FORWARD}{delta}
Increments byte code counter by \var{delta}.
\end{opcodedesc}

\begin{opcodedesc}{JUMP_IF_TRUE}{delta}
If TOS is true, increment the byte code counter by \var{delta}.  TOS is
left on the stack.
\end{opcodedesc}

\begin{opcodedesc}{JUMP_IF_FALSE}{delta}
If TOS is false, increment the byte code counter by \var{delta}.  TOS
is not changed. 
\end{opcodedesc}

\begin{opcodedesc}{JUMP_ABSOLUTE}{target}
Set byte code counter to \var{target}.
\end{opcodedesc}

\begin{opcodedesc}{FOR_LOOP}{delta}
Iterate over a sequence.  TOS is the current index, TOS1 the sequence.
First, the next element is computed.  If the sequence is exhausted,
increment byte code counter by \var{delta}.  Otherwise, push the
sequence, the incremented counter, and the current item onto the stack.
\end{opcodedesc}

%\begin{opcodedesc}{LOAD_LOCAL}{namei}
%This opcode is obsolete.
%\end{opcodedesc}

\begin{opcodedesc}{LOAD_GLOBAL}{namei}
Loads the global named \code{co_names[namei]} onto the stack.
\end{opcodedesc}

%\begin{opcodedesc}{SET_FUNC_ARGS}{argc}
%This opcode is obsolete.
%\end{opcodedesc}

\begin{opcodedesc}{SETUP_LOOP}{delta}
Pushes a block for a loop onto the block stack.  The block spans
from the current instruction with a size of \var{delta} bytes.
\end{opcodedesc}

\begin{opcodedesc}{SETUP_EXCEPT}{delta}
Pushes a try block from a try-except clause onto the block stack.
\var{delta} points to the first except block.
\end{opcodedesc}

\begin{opcodedesc}{SETUP_FINALLY}{delta}
Pushes a try block from a try-except clause onto the block stack.
\var{delta} points to the finally block.
\end{opcodedesc}

\begin{opcodedesc}{LOAD_FAST}{var_num}
Pushes a reference to the local \code{co_varnames[var_num]} onto
the stack.
\end{opcodedesc}

\begin{opcodedesc}{STORE_FAST}{var_num}
Stores TOS into the local \code{co_varnames[var_num]}.
\end{opcodedesc}

\begin{opcodedesc}{DELETE_FAST}{var_num}
Deletes local \code{co_varnames[var_num]}.
\end{opcodedesc}

\begin{opcodedesc}{SET_LINE_NO}{lineno}
Sets the current line number to \var{lineno}.
\end{opcodedesc}

\begin{opcodedesc}{RAISE_VARARGS}{argc}
Raises an exception. \var{argc} indicates the number of parameters
to the raise statement, ranging from 1 to 3.  The handler will find
the traceback as TOS2, the parameter as TOS1, and the exception
as TOS.
\end{opcodedesc}

\begin{opcodedesc}{CALL_FUNCTION}{argc}
Calls a function.  The low byte of \var{argc} indicates the number of
positional parameters, the high byte the number of keyword parameters.
On the stack, the opcode finds the keyword parameters first.  For each
keyword argument, the value is on top of the key.  Below the keyword
parameters, the positional parameters are on the stack, with the
right-most parameter on top.  Below the parameters, the function object
to call is on the stack.
\end{opcodedesc}

\begin{opcodedesc}{MAKE_FUNCTION}{argc}
Pushes a new function object on the stack.  TOS is the code associated
with the function.  The function object is defined to have \var{argc}
default parameters, which are found below TOS.
\end{opcodedesc}

\begin{opcodedesc}{BUILD_SLICE}{argc}
Pushes a slice object on the stack.  If \var{argc} is three, creates
\code{TOS3[TOS2:TOS1:TOS]}.  Otherwise, expects three arguments.
\end{opcodedesc}


