def disassemble(self, lineno_width=<NUM_LIT:3>,<EOL>mark_as_current=False,<EOL>asm_format=False,<EOL>show_bytes=False):
fields = []<EOL>if asm_format:<EOL><INDENT>indexed_operand = set(['<STR_LIT:name>', '<STR_LIT>', '<STR_LIT>', '<STR_LIT>'])<EOL><DEDENT>if lineno_width:<EOL><INDENT>if self.starts_line is not None:<EOL><INDENT>if asm_format:<EOL><INDENT>lineno_fmt = "<STR_LIT>" % lineno_width<EOL>fields.append(lineno_fmt % self.starts_line)<EOL>fields.append('<STR_LIT:U+0020>' * (lineno_width))<EOL>if self.is_jump_target:<EOL><INDENT>fields.append('<STR_LIT:U+0020>' * (lineno_width-<NUM_LIT:1>))<EOL><DEDENT><DEDENT>else:<EOL><INDENT>lineno_fmt = "<STR_LIT>" % lineno_width<EOL>fields.append(lineno_fmt % self.starts_line)<EOL><DEDENT><DEDENT>else:<EOL><INDENT>fields.append('<STR_LIT:U+0020>' * (lineno_width+<NUM_LIT:1>))<EOL><DEDENT><DEDENT>if mark_as_current and not asm_format:<EOL><INDENT>fields.append('<STR_LIT>')<EOL><DEDENT>else:<EOL><INDENT>fields.append('<STR_LIT:U+0020>')<EOL><DEDENT>if self.is_jump_target:<EOL><INDENT>if not asm_format:<EOL><INDENT>fields.append('<STR_LIT>')<EOL><DEDENT>else:<EOL><INDENT>fields = ["<STR_LIT>" % self.offset] + fields<EOL>if not self.starts_line:<EOL><INDENT>fields.append('<STR_LIT:U+0020>')<EOL><DEDENT><DEDENT><DEDENT>else:<EOL><INDENT>fields.append('<STR_LIT:U+0020>')<EOL><DEDENT>if not asm_format:<EOL><INDENT>fields.append(repr(self.offset).rjust(<NUM_LIT:4>))<EOL><DEDENT>if show_bytes:<EOL><INDENT>hex_bytecode = "<STR_LIT>" % self.opcode<EOL>if self.inst_size == <NUM_LIT:1>:<EOL><INDENT>hex_bytecode += '<STR_LIT:U+0020>' * (<NUM_LIT:2>*<NUM_LIT:3>)<EOL><DEDENT>if self.inst_size == <NUM_LIT:2>:<EOL><INDENT>if self.has_arg:<EOL><INDENT>hex_bytecode += "<STR_LIT>" % (self.arg % <NUM_LIT>)<EOL><DEDENT>else :<EOL><INDENT>hex_bytecode += '<STR_LIT>'<EOL><DEDENT><DEDENT>elif self.inst_size == <NUM_LIT:3>:<EOL><INDENT>hex_bytecode += "<STR_LIT>" % (<EOL>(self.arg >> <NUM_LIT:8>, self.arg % <NUM_LIT>))<EOL><DEDENT>fields.append(hex_bytecode + '<STR_LIT:|>')<EOL><DEDENT>fields.append(self.opname.ljust(<NUM_LIT:20>))<EOL>if self.arg is not None:<EOL><INDENT>argrepr = self.argrepr<EOL>if asm_format:<EOL><INDENT>if self.optype == '<STR_LIT>':<EOL><INDENT>fields.append('<STR_LIT:L>' + str(self.arg))<EOL><DEDENT>elif self.optype == '<STR_LIT>':<EOL><INDENT>argval = self.offset + self.arg + self.inst_size<EOL>fields.append('<STR_LIT:L>' + str(argval))<EOL><DEDENT>elif self.optype in indexed_operand:<EOL><INDENT>fields.append('<STR_LIT>' % argrepr)<EOL>argrepr = None<EOL><DEDENT>elif (self.optype == '<STR_LIT>'<EOL>and not re.search('<STR_LIT>', argrepr)):<EOL><INDENT>fields.append('<STR_LIT>' % argrepr)<EOL>argrepr = None<EOL><DEDENT>else:<EOL><INDENT>fields.append(repr(self.arg))<EOL><DEDENT><DEDENT>elif not (show_bytes and argrepr):<EOL><INDENT>fields.append(repr(self.arg).rjust(<NUM_LIT:6>))<EOL><DEDENT>if argrepr:<EOL><INDENT>fields.append('<STR_LIT>' % argrepr)<EOL>pass<EOL><DEDENT>pass<EOL><DEDENT>return '<STR_LIT:U+0020>'.join(fields).rstrip()<EOL>
Format instruction details for inclusion in disassembly output

        *lineno_width* sets the width of the line number field (0 omits it)
        *mark_as_current* inserts a '-->' marker arrow as part of the line