parameters: (co, lasti=-1)
docstring: Disassemble a code object.
  
      :param co: code object
      :param lasti: internal
      :yields: Instructions.
docstring_summary: Disassemble a code object.
docstring_tokens: Disassemble a code object .
function: def disassembler(co, lasti=-1):
      """Disassemble a code object.
  
      :param co: code object
      :param lasti: internal
      :yields: Instructions.
  
      """
  
      code = co.co_code
      labels = dis.findlabels(code)
      linestarts = dict(dis.findlinestarts(co))
      i = 0
      extended_arg = 0
      lineno = 0
      free = None
      for i, op, oparg in _walk_ops(co):
          if i in linestarts:
              lineno = linestarts[i]
          instr = Instruction(i=i, op=op, lineno=lineno)
          instr.linestart = i in linestarts
  
          if i == lasti:
              instr.lasti = True
          else:
              instr.lasti = False
  
          if i in labels:
              instr.label = True
          else:
              instr.label = False
  
          instr.oparg = oparg
          extended_arg = 0
          if op == dis.EXTENDED_ARG:
              extended_arg = oparg * 65536
          instr.extended_arg = extended_arg
          if op >= dis.HAVE_ARGUMENT:
              if op in dis.hasconst:
                  instr.arg = co.co_consts[oparg]
              elif op in dis.hasname:
                  instr.arg = co.co_names[oparg]
              elif op in dis.hasjrel:
                  instr.arg = i + oparg
              elif op in dis.haslocal:
                  instr.arg = co.co_varnames[oparg]
              elif op in dis.hascompare:
                  instr.arg = dis.cmp_op[oparg]
              elif op in dis.hasfree:
                  if free is None:
                      free = co.co_cellvars + co.co_freevars
                  instr.arg = free[oparg]
  
          yield instr
function_tokens: def disassembler ( co , lasti = - 1 ) : code = co . co_code labels = dis . findlabels ( code ) linestarts = dict ( dis . findlinestarts ( co ) ) i = 0 extended_arg = 0 lineno = 0 free = None for i , op , oparg in _walk_ops ( co ) : if i in linestarts : lineno = linestarts [ i ] instr = Instruction ( i = i , op = op , lineno = lineno ) instr . linestart = i in linestarts if i == lasti : instr . lasti = True else : instr . lasti = False if i in labels : instr . label = True else : instr . label = False instr . oparg = oparg extended_arg = 0 if op == dis . EXTENDED_ARG : extended_arg = oparg * 65536 instr . extended_arg = extended_arg if op >= dis . HAVE_ARGUMENT : if op in dis . hasconst : instr . arg = co . co_consts [ oparg ] elif op in dis . hasname : instr . arg = co . co_names [ oparg ] elif op in dis . hasjrel : instr . arg = i + oparg elif op in dis . haslocal : instr . arg = co . co_varnames [ oparg ] elif op in dis . hascompare : instr . arg = dis . cmp_op [ oparg ] elif op in dis . hasfree : if free is None : free = co . co_cellvars + co . co_freevars instr . arg = free [ oparg ] yield instr