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 cCsdSNr 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:sr2a%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|0dSr'r r r/r r r _tryfinallyOs r4cCsz W|dS|0dSrr )r/r r r _tryfinallyconstUs r5a%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 |VdSr'r rr r r _gsr6cCs |VdSr'r rr r r _agsr7cst|2z 3dHW}q6dSr')r7)ritemr r r _cosr9csfdd}|S)NcsfddDS)Zfuncdoccsg|] }|qSr r ).0zrr r z#_h..foo..r ryrr foosz_h..foor )r?r@r r>r _hs rAa%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)rYrHopmapZassertInZhasconstZhasnamerr r r test_opmapszDisTests.test_opmapcCs|tjtjdddS)N LOAD_FAST)rYrHopnamer_r`r r r test_opnameszDisTests.test_opnamecCs,|tjdtj|tjdtjdS)N EXTENDED_ARGr^)rYrHr_re HAVE_ARGUMENTr`r 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)rcr) enumeraterHrcsubTestZ _OPNAME_WIDTHrfZ _OPARG_WIDTHZassertLessEquallen)ropcodercwidthr r r test_widthss zDisTests.test_widthscCs|ttdSr')r[r!dis_fr`r r r test_disszDisTests.test_discCs|ttdSr')r[r% dis_bug708901r`r r r test_bug_708901szDisTests.test_bug_708901cCs|d|ttdS)Nzneed asserts, run without -O)ZskipTestr[r(dis_bug1333982r`r r r test_bug_1333982 s zDisTests.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 r@joinexeccount namespacerLr r r rLs z'DisTests.test_big_linenos..funcri,rr"ir) dis_module)r#_BIG_LINENO_FORMATr[_BIG_LINENO_FORMAT2testr}dis_module_expected_results)rrLirZr}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 xr@rvryr r r rL,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&ru)r#rw)rzrsr rr rZ2s z+DisTests.test_big_offsets..expectedrr+r*ii)r#r[)rrLrZrr r r test_big_offsets+s zDisTests.test_big_offsetscCs4|tt|tt|tt|ttdSr') r[expr_str dis_expr_strsimple_stmt_strdis_simple_stmt_strannot_stmt_strdis_annot_stmt_strcompound_stmt_strdis_compound_stmt_strr`r r r test_disassemble_strGs   zDisTests.test_disassemble_strcCs|tjjtdSr')r[r!__code__co_code dis_f_co_coder`r r r test_disassemble_bytesMszDisTests.test_disassemble_bytescCs|ttdSr')r[rdis_cr`r r r test_disassemble_classPszDisTests.test_disassemble_classcCs|tdjtdSr)r[rrdis_c_instance_methodr`r 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|tjtdSr')r[rrdis_c_static_methodr`r r r test_disassemble_static_methodZsz'DisTests.test_disassemble_static_methodcCs|tjtdSr')r[rrdis_c_class_methodr`r r r test_disassemble_class_method]sz&DisTests.test_disassemble_class_methodcCs(|t}|td}|||dSr)rQr6rY)rZgen_func_disasZ gen_disasr r r test_disassemble_generator`s z#DisTests.test_disassemble_generatorcCs(|t}|td}|||dSr)rQr7rY)rZagen_func_disasZ agen_disasr r r test_disassemble_async_generatores z)DisTests.test_disassemble_async_generatorcCs4|t}td}|||}|||dSr)rQr9closerY)rZcoro_func_disascoroZ coro_disasr r r test_disassemble_coroutinejs   z#DisTests.test_disassemble_coroutinecCs|ttdSr')r[r2 dis_fstringr`r r r test_disassemble_fstringqsz!DisTests.test_disassemble_fstringcCs|tt|ttdSr')r[r4dis_tryfinallyr5dis_tryfinallyconstr`r r r test_disassemble_try_finallyts z%DisTests.test_disassemble_try_finallycCs0zt`WntyYn0|ttjddSr')syslast_tracebackAttributeError assertRaises RuntimeErrorrHr`r r r test_dis_nonexs  zDisTests.test_dis_nonec Cs|zt`WntyYn0z ddWn0tyX}z|j}|t_WYd}~n d}~00||jj|j}| d|dSr) rrrrrrRtb_framef_codetb_lastir[)rrr Ztb_disr r r test_dis_tracebacks  zDisTests.test_dis_tracebackcCs|ttjtdSr')r TypeErrorrHobjectr`r r r test_dis_objectszDisTests.test_dis_objectcsTfdd}|tdd|tdd|tdd|tdd|tdd|tdS)Ncs,jtfi|}|}||dSr')rQrArVrY)rZrOrHr`r r checks z2DisTests.test_disassemble_recursive..checkrrWrrr&) dis_nested_0 dis_nested_1 dis_nested_2)rrr r`r test_disassemble_recursives      z#DisTests.test_disassemble_recursive)rCT)rC)!rrrmaxDiffrQrRrVr[rardrgrnrprrrtrrrrrrrrrrrrrrrrrrr r r r rBs<  rBc@seZdZdddZdS)DisWithFileTestsrCTcKsDt}|r$tj|fd|i|ntj||fd|i||S)Nfile)rDrErHrIrJrKr r r rQs z DisWithFileTests.get_disassemblyN)rCTrrrrQr 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.r'T)rc /s:|ffdd |f VdS)Nc st| dSr'r)r0r r/r1rfrr?r;r r rsztricky..fr ) r r/rr?r;r0r1rargskwdsr 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)r/r0)r r1r 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 assertRegexrH code_info)rrrZr r r test_code_infoNszCodeInfoTests.test_code_infoc Csd|_|jD]r\}}t}t|Wdn1s:0Y|||dt}tj||d|||q dS)Nr| r) rrrrHZ show_coderrJrDrE)rrrZrPr r r test_show_codeSs(zCodeInfoTests.test_show_codecCs|ttjtdSr')rrrHrrr`r r r test_code_info_object]sz#CodeInfoTests.test_code_info_objectcCs|tdddS)NrZ0x0)rYrHZ pretty_flagsr`r r r test_pretty_flags_no_flags`sz(CodeInfoTests.test_pretty_flags_no_flagsN)rrrrHrcode_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||dSr'r)rrr.r r innerhsouter..f..inner)r+rr)r0r1rr3)r0r1r rgsouter..frur Hello world!)r&r*r)r r/rr r3r 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)rcrlargZargvalZargreproffsetZ starts_lineZis_jump_targetZ LOAD_CLOSUREr r/Z BUILD_TUPLEfrurrz'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"rb|$Z RETURN_VALUES&)r+rz(5, 6)r0r1rz!'outer..f..inner'rrNoner#Z10ZGET_ITERDZFOR_ITER],zto 44rr-Z 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_TOPrxrhy~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 210cCsdSr'r r r r r simpleSr=rncsLeZdZfddZddZddZddZd d Zd d Zd dZ Z S)InstructionTestscstj|d|_dSr')superrr)rr __class__r r r\s zInstructionTests.__init__cCstt}|t|tdSr'rHget_instructionsrnrYlistexpected_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)rHrtrexpected_outer_linerYruexpected_opinfo_outerrwr r r test_outerhszInstructionTests.test_outercCsNtt}Wdn1s"0Ytj|td}|t|tdSrz)rrrHrtexpected_f_linerYruexpected_opinfo_f)rrrxr r r test_nestedls$zInstructionTests.test_nestedcCsPtt}Wdn1s$0Ytj|td}|t|tdSrz)rrrHrtexpected_inner_linerYruexpected_opinfo_inner)rrrxr r r test_doubly_nestedrs&z#InstructionTests.test_doubly_nestedcCs"tjttd}|t|tdSrz)rHrtrexpected_jumpy_linerYruexpected_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!rrrrjrHBytecodeZassertIsInstanceZcodeobjtypesCodeTyperrr)rrr/r r r test_instantiations  0z BytecodeTests.test_instantiationc CsrttdjdtjfD]X}|j|d8tt|}tt|}| ||Wdq1sb0YqdSr) r!rrrrjrurHrrtrY)rrZ via_objectZ via_generatorr r r test_iterations zBytecodeTests.test_iterationcCs"tjttd}|t|tdSrz)rHrrr}rYrur~rwr r r test_explicit_first_linesz&BytecodeTests.test_explicit_first_linecCsltt}|dd}ttjj}|||tjtdd}|dd}||ddS)Nr,ri^r{Z350) rHrrnstrip partitionstrrco_firstlinenorY)rrxrZr r r test_source_line_in_disassemblys  z-BytecodeTests.test_source_line_in_disassemblycCs4d|_tjD]"\}}t|}|||q dSr)rrrrHrrinfo)rrrZr/r r r test_infos zBytecodeTests.test_infocCstt}||tdSr')rHrr!rYrorwr r r test_disassembledszBytecodeTests.test_disassembledcCs4t}tj|}|jr |j}q||j|jdSr')rrHrfrom_tracebackr rYZcurrent_offsetrrr r/r r r test_from_tracebacks z!BytecodeTests.test_from_tracebackcCs&t}tj|}||tdSr')rrHrrrY 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`WntyYn0tSr')rrrrpsetUpr`rqr r rs  zTestDisTraceback.setUpcCsDt}t|t|Wdn1s20Y|Sr'rDrErFrGrHdistbrJrr rPr r r rQs (z TestDisTraceback.get_disassemblycCs6|ttWdn1s(0YdSr')rrrHrr`r r r test_distb_emptys z!TestDisTraceback.test_distb_emptycCs"t}|t_||dtdSr')rrrrYrQrrr r r r test_distb_last_tracebacksz*TestDisTraceback.test_distb_last_tracebackcCst}|||tdSr')rrYrQrrr r r test_distb_explicit_argsz(TestDisTraceback.test_distb_explicit_arg) rrrrrQrrrrr r rqr rs rc@seZdZddZdS)TestDisTracebackWithFilecCsHt}t|tj||dWdn1s60Y|S)Nrrrr r r rQs ,z(TestDisTracebackWithFile.get_disassemblyNrr r r r rsr__main__)T)rr)eZ test.supportrZtest.support.bytecode_helperrZunittestrrHrDrSrrFrrrZTRACEBACK_CODErrrrrrrrrrrrr!rorr%rqr(__file__rsr~rrrrrrrrrrrr2rr4r5rrr6r7r9rArrrZTestCaserBrflagsoptimizerrrr__func__ co_constsrrrrrrrrrrr}Z _line_offsetZ code_object_frZcode_object_innerrrZ Instructionreprr~rrrrnrvrorrrmainr r r r s                          #)                     M  !#       o $8