RhdZddlZddlZddlZddlmZmZmZeZ GddejZ GddejZ Gdd e Z Gd d e ZGd d e Zy)zGbytecode_helper - support tools for testing correct bytecode generationN)compiler_codegen optimize_cfgassemble_code_objectc*eZdZdZdZefdZefdZy)BytecodeTestCasez1Custom assertion methods for inspecting bytecode.cxtj}tj|||jS)N)file)ioStringIOdisgetvalue)selfcoss 3/usr/lib/python3.12/test/support/bytecode_helper.pyget_disassembly_as_stringz*BytecodeTestCase.get_disassembly_as_string s' KKM zz|cF|j|tjtj|D]-}|j|k(s|t us|j |k(s+|cS|j|}|t ur|d|}n d}||||fz}|j|y)zAReturns instr if opname is found, otherwise throws AssertionErrorz not found in bytecode: z!(%s,%r) not found in bytecode: %sN) assertInr opmapget_instructionsopname _UNSPECIFIEDargvalrfailrxrrinstr disassemblymsgs rassertInBytecodez!BytecodeTestCase.assertInBytecodes fcii())!, !E||v%\)U\\V-C L !44Q7 \ !5;[IC6C55C #rcR|j|tjtj|D]o}|j|k(s|j |}|t ur|d|}|j|E|j|k(sUd}||||fz}|j|qy)z(Throws AssertionError if opname is foundz occurs in bytecode: z(%s,%r) occurs in bytecode: %sN) rr rrrrrrrrs rassertNotInBytecodez$BytecodeTestCase.assertNotInBytecode!s fcii())!, #E||v%"< 5A #rrceZdZeej ZeejejzejzZ eje Z GddZ dZdZdZdZy)CompilationStepTestCasec eZdZy)CompilationStepTestCase.LabelN)r$r%r&r(rrLabelr,5s rr-c|j|t|j|t|j|}|j|}|jt |t |t ||D]\}}t |tr|j||)|j|t|j|tt |t |kDr|dt |}|j||yN) assertIsInstancelistnormalize_insts assertEquallenzip isinstanceinttuple)ractual_ expected_actualexpectedactexps rassertInstructionsMatchz/CompilationStepTestCase.assertInstructionsMatch8s gt, i.%%g.'' 2 Vc(m4FH- 'HC#s#  c*  ! !#u -  ! !#u -3x#c(")3s8n   S# & 'rcd}g}|D]T}t||jtfsJt||jr||_?|dz }|j |V|S)Nr)r6r-r8valueappend)rinstsidxresitems rresolveAndRemoveLabelsz.CompilationStepTestCase.resolveAndRemoveLabelsPse !DdTZZ$78 88$ +  q 4  ! rcd|j|}g}|D]}t|tsJ|^}}}tjj ||}t||j r |j}n||jvr|nd}tj|}|j||g||S)zN Map labels to instruction index. Map opcodes to opnames. N) rHr6r8r rgetr-rBHAS_ARGrrC)rrDrFrGopcodeoparglocargs rr2z'CompilationStepTestCase.normalize_insts]s++E2 ,DdE* **"& FECYY]]662F%,kk%5e4ZZ'F JJ*c* + , rcg}|D]h}t|tsJt|}tj|d}|d}|dddgdt |z zz}|j ||g|j|S)NrrA)r6r8r1r rr4rC)rrDrFrGinstrLrMrNs rcomplete_insts_infoz+CompilationStepTestCase.complete_insts_infoos .DdE* **:DYYtAw'FGEqr(bTQT]33C JJ,, -  . rN)r$r%r&setr hasargrKhasjrelhasjabshasexc HAS_TARGETunionHAS_ARG_OR_TARGETr-r?rHr2rUr(rrr*r*/s\#**oGS[[3;;.;rtsmM RRx ##x((##JJh//JZ-5/r