a zet@sddlmZddlmZddlZddlZddlZddlZddlZddl Z ddl Z ddZ e j j ZGdddZdejjjd fZd Zd ejjjd fZd ejjjd fZdejjeejjeejjefZddZdejjd ejjd fZdZddZdejjd ejjd ejjd ejjdfZgfddZ de jjd e!e jjd e jjd e jjd e jjdfZ"dZ#dZ$dZ%dZ&dZ'dZ(d Z)d!Z*d"Z+d#Z,d$Z-d%ejd ejd ejdejd&ejd'fZ.d(d)Z/d*e/jjd fZ0d+d,Z1d-d.Z2d/e1jjd e1jjd e1jjd&e1jjd e1jjd&fZ3d0e2jjd e2jjd e2jjd&e2jjd e2jjd&fZ4d1d2Z5d3d4Z6d5d6Z7d7d8Z8d9e8jjd e!e8jjd e8jjd&fZ9d:e9e!e8jjd e8jjde!e8jjdfZ:d;e:e!e8jjde8jjdfZ;Gdd?d?e=Z>d@ej?j@d kr._error)tb_next)r r r r r get_tb s rc@s,eZdZddZeddZeddZdS)_CcCs|dk|_dSNrx)selfrr r r __init__sz _C.__init__cCs |dk}dSrr rr r r sm sz_C.smcCs|dk|_dSrr)clsrr r r cm$sz_C.cmN)__name__ __module__ __qualname__r staticmethodr classmethodrr r r r rs  ra>%3d 0 LOAD_FAST 1 (x) 2 LOAD_CONST 1 (1) 4 COMPARE_OP 2 (==) 6 LOAD_FAST 0 (self) 8 STORE_ATTR 0 (x) 10 LOAD_CONST 0 (None) 12 RETURN_VALUE ra 0 LOAD_FAST 1 (1) 2 LOAD_CONST 1 (1) 4 COMPARE_OP 2 (==) 6 LOAD_FAST 0 (0) 8 STORE_ATTR 0 (0) 10 LOAD_CONST 0 (0) 12 RETURN_VALUE a=%3d 0 LOAD_FAST 1 (x) 2 LOAD_CONST 1 (1) 4 COMPARE_OP 2 (==) 6 LOAD_FAST 0 (cls) 8 STORE_ATTR 0 (x) 10 LOAD_CONST 0 (None) 12 RETURN_VALUE a %3d 0 LOAD_FAST 0 (x) 2 LOAD_CONST 1 (1) 4 COMPARE_OP 2 (==) 6 STORE_FAST 0 (x) 8 LOAD_CONST 0 (None) 10 RETURN_VALUE zBDisassembly of %s: %s Disassembly of %s: %s Disassembly of %s: %s cCs t|dSrprint)ar r r _f[sr!z%3d 0 LOAD_GLOBAL 0 (print) 2 LOAD_FAST 0 (a) 4 CALL_FUNCTION 1 6 POP_TOP %3d 8 LOAD_CONST 1 (1) 10 RETURN_VALUE z 0 LOAD_GLOBAL 0 (0) 2 LOAD_FAST 0 (0) 4 CALL_FUNCTION 1 6 POP_TOP 8 LOAD_CONST 1 (1) 10 RETURN_VALUE cCstddD]}q dS)Nr )range)resr r r bug708901usr%a%3d 0 LOAD_GLOBAL 0 (range) 2 LOAD_CONST 1 (1) %3d 4 LOAD_CONST 2 (10) %3d 6 CALL_FUNCTION 2 8 GET_ITER >> 10 FOR_ITER 4 (to 16) 12 STORE_FAST 0 (res) %3d 14 JUMP_ABSOLUTE 10 >> 16 LOAD_CONST 0 (None) 18 RETURN_VALUE cCsdsJdd|DddS)NrcSsg|]}|qSr r ).0sr r r zbug1333982..rr rr r r bug1333982sr+a%3d 0 LOAD_CONST 1 (0) 2 POP_JUMP_IF_TRUE 26 4 LOAD_ASSERTION_ERROR 6 LOAD_CONST 2 ( at 0x..., file "%s", line %d>) 8 LOAD_CONST 3 ('bug1333982..') 10 MAKE_FUNCTION 0 12 LOAD_FAST 0 (x) 14 GET_ITER 16 CALL_FUNCTION 1 %3d 18 LOAD_CONST 4 (1) %3d 20 BINARY_ADD 22 CALL_FUNCTION 1 24 RAISE_VARARGS 1 %3d >> 26 LOAD_CONST 0 (None) 28 RETURN_VALUE z%3d 0 LOAD_GLOBAL 0 (spam) 2 POP_TOP 4 LOAD_CONST 0 (None) 6 RETURN_VALUE z%4d 0 LOAD_GLOBAL 0 (spam) 2 POP_TOP 4 LOAD_CONST 0 (None) 6 RETURN_VALUE zDisassembly of f: 4 0 LOAD_CONST 0 (None) 2 RETURN_VALUE Disassembly of g: 5 0 LOAD_CONST 0 (None) 2 RETURN_VALUE zx + 1z 1 0 LOAD_NAME 0 (x) 2 LOAD_CONST 0 (1) 4 BINARY_ADD 6 RETURN_VALUE x = x + 1z 1 0 LOAD_NAME 0 (x) 2 LOAD_CONST 0 (1) 4 BINARY_ADD 6 STORE_NAME 0 (x) 8 LOAD_CONST 1 (None) 10 RETURN_VALUE z+ x: int = 1 y: fun(1) lst[fun(0)]: int = 1 a 2 0 SETUP_ANNOTATIONS 2 LOAD_CONST 0 (1) 4 STORE_NAME 0 (x) 6 LOAD_NAME 1 (int) 8 LOAD_NAME 2 (__annotations__) 10 LOAD_CONST 1 ('x') 12 STORE_SUBSCR 3 14 LOAD_NAME 3 (fun) 16 LOAD_CONST 0 (1) 18 CALL_FUNCTION 1 20 LOAD_NAME 2 (__annotations__) 22 LOAD_CONST 2 ('y') 24 STORE_SUBSCR 4 26 LOAD_CONST 0 (1) 28 LOAD_NAME 4 (lst) 30 LOAD_NAME 3 (fun) 32 LOAD_CONST 3 (0) 34 CALL_FUNCTION 1 36 STORE_SUBSCR 38 LOAD_NAME 1 (int) 40 POP_TOP 42 LOAD_CONST 4 (None) 44 RETURN_VALUE zx = 0 while 1: x += 1a 1 0 LOAD_CONST 0 (0) 2 STORE_NAME 0 (x) 3 >> 4 LOAD_NAME 0 (x) 6 LOAD_CONST 1 (1) 8 INPLACE_ADD 10 STORE_NAME 0 (x) 12 JUMP_ABSOLUTE 4 14 LOAD_CONST 2 (None) 16 RETURN_VALUE a%3d 0 SETUP_FINALLY 12 (to 14) %3d 2 LOAD_CONST 1 (1) 4 LOAD_CONST 2 (0) --> 6 BINARY_TRUE_DIVIDE 8 POP_TOP 10 POP_BLOCK 12 JUMP_FORWARD 42 (to 56) %3d >> 14 DUP_TOP 16 LOAD_GLOBAL 0 (Exception) 18 JUMP_IF_NOT_EXC_MATCH 54 20 POP_TOP 22 STORE_FAST 0 (e) 24 POP_TOP 26 SETUP_FINALLY 18 (to 46) %3d 28 LOAD_FAST 0 (e) 30 LOAD_ATTR 1 (__traceback__) 32 STORE_FAST 1 (tb) 34 POP_BLOCK 36 POP_EXCEPT 38 LOAD_CONST 0 (None) 40 STORE_FAST 0 (e) 42 DELETE_FAST 0 (e) 44 JUMP_FORWARD 10 (to 56) >> 46 LOAD_CONST 0 (None) 48 STORE_FAST 0 (e) 50 DELETE_FAST 0 (e) 52 RERAISE >> 54 RERAISE %3d >> 56 LOAD_FAST 1 (tb) 58 RETURN_VALUE cCs|d|dd|d|dS)N 4r r bcdr r r _fstring:sr5a%3d 0 LOAD_FAST 0 (a) 2 FORMAT_VALUE 0 4 LOAD_CONST 1 (' ') 6 LOAD_FAST 1 (b) 8 LOAD_CONST 2 ('4') 10 FORMAT_VALUE 4 (with format) 12 LOAD_CONST 1 (' ') 14 LOAD_FAST 2 (c) 16 FORMAT_VALUE 2 (repr) 18 LOAD_CONST 1 (' ') 20 LOAD_FAST 3 (d) 22 LOAD_CONST 2 ('4') 24 FORMAT_VALUE 6 (repr, with format) 26 BUILD_STRING 7 28 RETURN_VALUE cCsz |W|S|0dSNr r r2r r r _tryfinallyOs r8cCsz W|dS|0dSrr )r2r r r _tryfinallyconstUs r9a%3d 0 SETUP_FINALLY 12 (to 14) %3d 2 LOAD_FAST 0 (a) 4 POP_BLOCK %3d 6 LOAD_FAST 1 (b) 8 CALL_FUNCTION 0 10 POP_TOP %3d 12 RETURN_VALUE %3d >> 14 LOAD_FAST 1 (b) 16 CALL_FUNCTION 0 18 POP_TOP 20 RERAISE 22 LOAD_CONST 0 (None) 24 RETURN_VALUE a%3d 0 SETUP_FINALLY 12 (to 14) %3d 2 POP_BLOCK %3d 4 LOAD_FAST 0 (b) 6 CALL_FUNCTION 0 8 POP_TOP %3d 10 LOAD_CONST 1 (1) 12 RETURN_VALUE %3d >> 14 LOAD_FAST 0 (b) 16 CALL_FUNCTION 0 18 POP_TOP 20 RERAISE 22 LOAD_CONST 0 (None) 24 RETURN_VALUE ccs |VdSr6r rr r r _gsr:cCs |VdSr6r rr r r _agsr;cst|2z 3dHW}q6dSr6)r;)ritemr r r _cosr=csfdd}|S)NcsfddDS)Zfuncdoccsg|] }|qSr r )r'zrr r r)r*z#_h..foo..r ryrr foosz_h..foor )r@rAr r?r _hs rBa%3d 0 LOAD_CLOSURE 0 (y) 2 BUILD_TUPLE 1 4 LOAD_CONST 1 () 6 LOAD_CONST 2 ('_h..foo') 8 MAKE_FUNCTION 8 (closure) 10 STORE_FAST 1 (foo) %3d 12 LOAD_FAST 1 (foo) 14 RETURN_VALUE a%s Disassembly of : %3d 0 LOAD_CLOSURE 0 (x) 2 BUILD_TUPLE 1 4 LOAD_CONST 1 ( at 0x..., file "%s", line %d>) 6 LOAD_CONST 2 ('_h..foo..') 8 MAKE_FUNCTION 8 (closure) 10 LOAD_DEREF 1 (y) 12 GET_ITER 14 CALL_FUNCTION 1 16 RETURN_VALUE a%s Disassembly of at 0x..., file "%s", line %d>: %3d 0 BUILD_LIST 0 2 LOAD_FAST 0 (.0) >> 4 FOR_ITER 12 (to 18) 6 STORE_FAST 1 (z) 8 LOAD_DEREF 0 (x) 10 LOAD_FAST 1 (z) 12 BINARY_ADD 14 LIST_APPEND 2 16 JUMP_ABSOLUTE 4 >> 18 RETURN_VALUE c@seZdZdZd>ddZd?ddZdd Zd d Zd d ZddZ ddZ ddZ ddZ ddZ ddZddZddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1Zd2d3Zd4d5Zd6d7Zd8d9Zd:d;Zd|tjdd|tjdtj|tjdtjdS)NZNOP LOAD_CONST STORE_NAME)rZrIopmapZassertInZhasconstZhasnamerr r r test_opmapszDisTests.test_opmapcCs|tjtjdddS)N LOAD_FAST)rZrIopnamer`rar r r test_opnameszDisTests.test_opnamecCs,|tjdtj|tjdtjdS)N EXTENDED_ARGr_)rZrIr`rf HAVE_ARGUMENTrar r r test_boundariesszDisTests.test_boundariesc Cs|ttjD]l\}}|dvrq |j|d>tj}|tjkrH|dtj7}|t||Wdq 1sl0Yq dS)N)ZBUILD_MAP_UNPACK_WITH_CALLZBUILD_TUPLE_UNPACK_WITH_CALLJUMP_IF_NOT_EXC_MATCH)rdr) enumeraterIrdsubTestZ _OPNAME_WIDTHrgZ _OPARG_WIDTHZassertLessEquallen)ropcoderdwidthr r r test_widthss zDisTests.test_widthscCs|ttdSr6)r\r!dis_frar r r test_disszDisTests.test_discCs|ttdSr6)r\r% dis_bug708901rar r r test_bug_708901szDisTests.test_bug_708901cCs|ttdSr6)r\r+dis_bug1333982rar r r test_bug_1333982 szDisTests.test_bug_1333982cCsdd}tddD] }t|d}||||qtdddD] }t|d}||||q@tdddD] }t|d}||||qnd d lm}||tdS) NcSs0i}dddg|dg}t|||dS)Nz def foo(): z zspam rAjoinexeccount namespacerMr r r rMs z'DisTests.test_big_linenos..funcri,rr"ir) dis_module)r#_BIG_LINENO_FORMATr\_BIG_LINENO_FORMAT2testr~dis_module_expected_results)rrMir[r~r r r test_big_linenoss    zDisTests.test_big_linenoscCsfdd}dd}tddD]}|||||dq||d|dd||d |d ddS) NcSs.i}dddg|d}t|||dS)Nz def foo(x): ;r,z return xrArwrzr r r rM,s z'DisTests.test_big_offsets..funccsZfddt|D}|dd|d|dfg7}d|ddd|d<d |S) Nc s@g|]8}dd|d|dd|dd|dfqS)z %*d LOAD_FAST 0 (x) %*d LOAD_CONST 1 (1) %*d BINARY_ADD %*d STORE_FAST 0 (x) rr-r )r'rwr r r)3s.z?DisTests.test_big_offsets..expected..zK 3 %*d LOAD_FAST 0 (x) %*d RETURN_VALUE rrz 2rr&rv)r#rx)r{rr(r rr r[2s z+DisTests.test_big_offsets..expectedrr.r-ii)r#r\)rrMr[rr r r test_big_offsets+s zDisTests.test_big_offsetscCs4|tt|tt|tt|ttdSr6) r\expr_str dis_expr_strsimple_stmt_strdis_simple_stmt_strannot_stmt_strdis_annot_stmt_strcompound_stmt_strdis_compound_stmt_strrar r r test_disassemble_strGs   zDisTests.test_disassemble_strcCs|tjjtdSr6)r\r!__code__co_code dis_f_co_coderar r r test_disassemble_bytesMszDisTests.test_disassemble_bytescCs|ttdSr6)r\rdis_crar r r test_disassemble_classPszDisTests.test_disassemble_classcCs|tdjtdSr)r\rrdis_c_instance_methodrar r r test_disassemble_instance_methodSsz)DisTests.test_disassemble_instance_methodcCstdjjj}||tdSr)rrrrr\dis_c_instance_method_bytes)rZmethod_bytecoder r r &test_disassemble_instance_method_bytesVsz/DisTests.test_disassemble_instance_method_bytescCs|tjtdSr6)r\rrdis_c_static_methodrar r r test_disassemble_static_methodZsz'DisTests.test_disassemble_static_methodcCs|tjtdSr6)r\rrdis_c_class_methodrar r r test_disassemble_class_method]sz&DisTests.test_disassemble_class_methodcCs(|t}|td}|||dSr)rRr:rZ)rZgen_func_disasZ gen_disasr r r test_disassemble_generator`s z#DisTests.test_disassemble_generatorcCs(|t}|td}|||dSr)rRr;rZ)rZagen_func_disasZ agen_disasr r r test_disassemble_async_generatores z)DisTests.test_disassemble_async_generatorcCs4|t}td}|||}|||dSr)rRr=closerZ)rZcoro_func_disascoroZ coro_disasr r r test_disassemble_coroutinejs   z#DisTests.test_disassemble_coroutinecCs|ttdSr6)r\r5 dis_fstringrar r r test_disassemble_fstringqsz!DisTests.test_disassemble_fstringcCs|tt|ttdSr6)r\r8dis_tryfinallyr9dis_tryfinallyconstrar r r test_disassemble_try_finallyts z%DisTests.test_disassemble_try_finallycCs0zt`WntyYn0|ttjddSr6)syslast_tracebackAttributeError assertRaises RuntimeErrorrIrar r r test_dis_nonexs  zDisTests.test_dis_nonec Cs|zt`WntyYn0z ddWn0tyX}z|j}|t_WYd}~n d}~00||jj|j}| d|dSr) rrrrrrStb_framef_codetb_lastir\)rrr Ztb_disr r r test_dis_tracebacks  zDisTests.test_dis_tracebackcCs|ttjtdSr6)r TypeErrorrIobjectrar r r test_dis_objectszDisTests.test_dis_objectcsTfdd}|tdd|tdd|tdd|tdd|tdd|tdS)Ncs,jtfi|}|}||dSr6)rRrBrWrZ)r[rPrIrar r checks z2DisTests.test_disassemble_recursive..checkrrXrrr&) dis_nested_0 dis_nested_1 dis_nested_2)rrr rar test_disassemble_recursives      z#DisTests.test_disassemble_recursive)rDT)rD)!rrrmaxDiffrRrSrWr\rbrerhrorqrsrurrrrrrrrrrrrrrrrrrr r r r rCs<  rCc@seZdZdddZdS)DisWithFileTestsrDTcKsDt}|r$tj|fd|i|ntj||fd|i||S)Nfile)rErFrIrJrKrLr r r rRs z DisWithFileTests.get_disassemblyN)rDTrrrrRr r r r rsra7Name: code_info Filename: (.*) Argument count: 1 Positional-only arguments: 0 Kw-only arguments: 0 Number of locals: 1 Stack size: 3 Flags: OPTIMIZED, NEWLOCALS, NOFREE Constants: 0: %r Names: 0: _format_code_info 1: _get_code_object Variable names: 0: x)z1Formatted details of methods, functions, or code.r6T)rc /s:|ffdd |f VdS)Nc st| dSr6r)r3r r2r4rfrr@r>r r rsztricky..fr ) r r2rr@r>r3r4rargskwdsr rr trickysra.Name: tricky Filename: (.*) Argument count: 5 Positional-only arguments: 2 Kw-only arguments: 3 Number of locals: 10 Stack size: 9 Flags: OPTIMIZED, NEWLOCALS, VARARGS, VARKEYWORDS, GENERATOR Constants: 0: None 1: 2: 'tricky..f' Variable names: 0: a 1: b 2: x 3: y 4: z 5: c 6: d 7: e 8: args 9: kwds Cell variables: 0: [abedfxyz] 1: [abedfxyz] 2: [abedfxyz] 3: [abedfxyz] 4: [abedfxyz] 5: [abedfxyz]apFilename: (.*) Argument count: 1 Positional-only arguments: 0 Kw-only arguments: 0 Number of locals: 1 Stack size: 10 Flags: OPTIMIZED, NEWLOCALS, NESTED Constants: 0: None Names: 0: print Variable names: 0: c Free variables: 0: [abedfxyz] 1: [abedfxyz] 2: [abedfxyz] 3: [abedfxyz] 4: [abedfxyz] 5: [abedfxyz]zName: Filename: Argument count: 0 Positional-only arguments: 0 Kw-only arguments: 0 Number of locals: 0 Stack size: 2 Flags: NOFREE Constants: 0: 1 Names: 0: xzName: Filename: Argument count: 0 Positional-only arguments: 0 Kw-only arguments: 0 Number of locals: 0 Stack size: 2 Flags: NOFREE Constants: 0: 1 1: None Names: 0: xzName: Filename: Argument count: 0 Positional-only arguments: 0 Kw-only arguments: 0 Number of locals: 0 Stack size: 2 Flags: NOFREE Constants: 0: 0 1: 1 2: None Names: 0: xc sZdIdHt2z 3dHW}q6t4IdH}WdIdHqV1IdHsL0YdSr)r2r3)r r4r r r async_def+s ra5Name: async_def Filename: (.*) Argument count: 0 Positional-only arguments: 0 Kw-only arguments: 0 Number of locals: 2 Stack size: 9 Flags: OPTIMIZED, NEWLOCALS, NOFREE, COROUTINE Constants: 0: None 1: 1 Names: 0: b 1: c Variable names: 0: a 1: dc@s\eZdZejefeefee fe e fe e feefeefgZddZddZddZddZd S) CodeInfoTestscCs,d|_|jD]\}}|t||q dSNr})r test_pairs assertRegexrI code_info)rrr[r r r test_code_infoNszCodeInfoTests.test_code_infoc Csd|_|jD]r\}}t}t|Wdn1s:0Y|||dt}tj||d|||q dS)Nr} r) rrrrIZ show_coderrKrErF)rrr[rQr r r test_show_codeSs(zCodeInfoTests.test_show_codecCs|ttjtdSr6)rrrIrrrar r r test_code_info_object]sz#CodeInfoTests.test_code_info_objectcCs|tdddS)NrZ0x0)rZrIZ pretty_flagsrar r r test_pretty_flags_no_flags`sz(CodeInfoTests.test_pretty_flags_no_flagsN)rrrrIrcode_info_code_inforcode_info_trickyco_tricky_nested_fcode_info_tricky_nested_frcode_info_expr_strrcode_info_simple_stmt_strrcode_info_compound_stmt_strrcode_info_async_defrrrrrr r r r rCs  rcs(dfdd }tddgid|S) Nr&r-cs&dfdd }t|S)Nr.rcst||dSr6r)rrr1r r innerhsouter..f..inner)r.rr)r3r4rr7)r3r4r rgsouter..frvr Hello world!)r&r-r)r r2rr r7r outerfsrcCstdD]"}t||dkrq|dkrq4qtd|r^t||d8}|dkrRq4|dkr4qfq4tdz`z ddWntytdYn.0|}td Wdn1s0YWtd n td 0dS) Nr"r-rI can haz else clause?r%Who let lolcatz into this test suite?r%Here we go, here we go, here we go...Never reach thisOK, now we're done)r#rZeroDivisionError)rdodgyr r r jumpyos,   (rr^dr)r&r-z(3, 4)F)rdrmargZargvalZargreproffsetZ starts_lineZis_jump_targetZ LOAD_CLOSUREr r2Z BUILD_TUPLEfrvrrz'outer..f'r"Z MAKE_FUNCTIONr]zdefaults, closure Z STORE_FAST}rZ LOAD_GLOBALtrZ LOAD_DEREFz''1Z BUILD_LISTgZ BUILD_MAPirz'Hello world!'Z CALL_FUNCTION ZPOP_TOP"rc|$Z RETURN_VALUES&)r.rz(5, 6)r3r4rz!'outer..f..inner'rrNoner#Z10ZGET_ITERDZFOR_ITER],zto 44rr0Z COMPARE_OPk4(*rz'I can haz else clause?'.02 ^68:<>@ BZINPLACE_SUBTRACTFHJLRNPTVXZ\rz''Who let lolcatz into this test suite?'`bZ SETUP_FINALLYzzto 200vzto 118hj0lZBINARY_TRUE_DIVIDEnpZ POP_BLOCKWZ JUMP_FORWARDzto 144ZDUP_TOPrxriy~rz''Here we go, here we go, here we go...'Z POP_EXCEPTYzto 188ZRERAISEZ SETUP_WITHzto 172rrz'Never reach this'ZWITH_EXCEPT_START1ZPOP_JUMP_IF_TRUEsrz"OK, now we're done"zto 210cCsdSr6r r r r r simpleSr*rncsLeZdZfddZddZddZddZd d Zd d Zd dZ Z S)InstructionTestscstj|d|_dSr6)superrr)rr __class__r r r\s zInstructionTests.__init__cCstt}|t|tdSr6rIget_instructionsrnrZlistexpected_opinfo_simpleractualr r r test_default_first_line`s z(InstructionTests.test_default_first_linecCs"tjtdd}|t|tdSNZ first_linersrwr r r test_first_line_set_to_Nonedsz,InstructionTests.test_first_line_set_to_NonecCs"tjttd}|t|tdSrz)rIrtrexpected_outer_linerZruexpected_opinfo_outerrwr r r test_outerhszInstructionTests.test_outercCsNtt}Wdn1s"0Ytj|td}|t|tdSrz)rrrIrtexpected_f_linerZruexpected_opinfo_f)rrrxr r r test_nestedls$zInstructionTests.test_nestedcCsPtt}Wdn1s$0Ytj|td}|t|tdSrz)rrrIrtexpected_inner_linerZruexpected_opinfo_inner)rrrxr r r test_doubly_nestedrs&z#InstructionTests.test_doubly_nestedcCs"tjttd}|t|tdSrz)rIrtrexpected_jumpy_linerZruexpected_opinfo_jumpyrwr r r test_jumpyxszInstructionTests.test_jumpy) rrrrryr|rrrr __classcell__r r rqr roZs roc@sLeZdZddZddZddZddZd d Zd d Zd dZ ddZ dS) BytecodeTestsc CsvttdjdtjfD]J}|j|d*t|}||jt j Wdq1sT0Yq| t tjt dSNrza=1)obj)r!rrrrkrIBytecodeZassertIsInstanceZcodeobjtypesCodeTyperrr)rrr2r r r test_instantiations  0z BytecodeTests.test_instantiationc CsrttdjdtjfD]X}|j|d8tt|}tt|}| ||Wdq1sb0YqdSr) r!rrrrkrurIrrtrZ)rrZ via_objectZ via_generatorr r r test_iterations zBytecodeTests.test_iterationcCs"tjttd}|t|tdSrz)rIrrr}rZrur~rwr r r test_explicit_first_linesz&BytecodeTests.test_explicit_first_linecCsltt}|dd}ttjj}|||tjtdd}|dd}||ddS)Nr/ri^r{Z350) rIrrnstrip partitionstrrco_firstlinenorZ)rrxr[r r r test_source_line_in_disassemblys  z-BytecodeTests.test_source_line_in_disassemblycCs4d|_tjD]"\}}t|}|||q dSr)rrrrIrrinfo)rrr[r2r r r test_infos zBytecodeTests.test_infocCstt}||tdSr6)rIrr!rZrprwr r r test_disassembledszBytecodeTests.test_disassembledcCs4t}tj|}|jr |j}q||j|jdSr6)rrIrfrom_tracebackr rZZcurrent_offsetrrr r2r r r test_from_tracebacks z!BytecodeTests.test_from_tracebackcCs&t}tj|}||tdSr6)rrIrrrZ dis_tracebackrr r r test_from_traceback_diss z%BytecodeTests.test_from_traceback_disN) rrrrrrrrrrrr r r r r~s  rcsBeZdZddfdd ZddZddZd d Zd d ZZS) TestDisTracebackN)returncs&zt`WntyYn0tSr6)rrrrpsetUprarqr r rs  zTestDisTraceback.setUpcCsDt}t|t|Wdn1s20Y|Sr6rErFrGrHrIdistbrKrr rQr r r rRs (z TestDisTraceback.get_disassemblycCs6|ttWdn1s(0YdSr6)rrrIrrar r r test_distb_emptys z!TestDisTraceback.test_distb_emptycCs"t}|t_||dtdSr6)rrrrZrRrrr r r r test_distb_last_tracebacksz*TestDisTraceback.test_distb_last_tracebackcCst}|||tdSr6)rrZrRrrr r r test_distb_explicit_argsz(TestDisTraceback.test_distb_explicit_arg) rrrrrRrrrrr r rqr rs rc@seZdZddZdS)TestDisTracebackWithFilecCsHt}t|tj||dWdn1s60Y|S)Nrrrr r r rRs ,z(TestDisTracebackWithFile.get_disassemblyNrr r r r rsr__main__)T)rr)eZ test.supportrZtest.support.bytecode_helperrZunittestrrIrErTrrGrrrZTRACEBACK_CODErrrrrrrrrrrrr!rprr%rrr+__file__rtrrrrrrrrrrrrr5rr8r9rrr:r;r=rBrrrZTestCaserCrflagsoptimizerrrr__func__ co_constsrrrrrrrrrrr}Z _line_offsetZ code_object_frZcode_object_innerrrZ Instructionreprr~rrrrnrvrorrrmainr r r r s                          #)                     M  !#       o $8