NL iddlmZddlZddlmZmZmZddlmZddl m Z m Z m Z ddl mZmZmZmZmZmZmZmZmZddlmZddlmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#dd Z$dd Z%ede Z&Gd d ejNZ(y)) annotationsN)FnError can_coerce_to check_func_ir)ClassIR)FuncDeclFuncIR FuncSignature) Assign BasicBlockGotoInteger LoadAddress LoadLiteralOpRegisterReturn) format_func) RInstanceRTypeRUnionbytes_rprimitiveint32_rprimitiveint64_rprimitivenone_rprimitiveobject_rprimitivepointer_rprimitivestr_rprimitivec*t|}||gk(sJyNr)fnerrorerrorss ]/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/mypyc/test/test_ircheck.pyassert_has_errorr&"s 2 F eW  ct|rJyr r!)r"s r%assert_no_errorsr)'sR   r')rtypeceZdZddZddZdddZddZddZddZddZ dd Z dd Z dd Z dd Z dd ZddZddZddZy) TestIrcheckcd|_y)Nrlabelselfs r%setUpzTestIrcheck.setUp/s  r'ch|xjdz c_t|j}||_|S)N)r/r ops)r1r5blocks r% basic_blockzTestIrcheck.basic_block2s) a 4::&  r'Nc F|t}t|ddtg|S)Nmodule)argsret_type)name class_name module_namesig)rrr )r1r<r;s r% func_declzTestIrcheck.func_decl8s-  &H 29   r'c tt|jdg|jt t ggy)Nfunc_1r<valuer5declarg_regsblocks)r)r r@r7r NONE_VALUEr0s r% test_valid_fnzTestIrcheck.test_valid_fnBs? ^^^2((f:.F-G(HI  r'c|jg}t|jdg|g}t|t |dy)NrBrCrGzBlock not terminatedsourcedesc)r7r r@r&r)r1r6r"s r%%test_block_not_terminated_empty_blockz1TestIrcheck.test_block_not_terminated_empty_blockKs?  $ X6UG TWE8NOPr'c|jttg}|jt|g}t |j dg||g}t |y)NrDr.rBrCrG)r7rrKr r r@r))r1block_1block_2r"s r%test_valid_gotozTestIrcheck.test_valid_gotoPsY""F$<#=>""Dw$7#89 X6WV]L^ _r'c|jttg}t|}|j|g}t |j dg|g}t |t|dy)NrDr.rBrCrG#Invalid control operation target: 1rN)r7rrKr r r@r&r)r1rSgotorTr"s r%test_invalid_gotozTestIrcheck.test_invalid_gotoVsj""F$<#=>'"""D6* X.9   WD7\]^r'ctttd}|j|g}t |j dg|g}t |t|dy) Nr1typer<rDrBrCrGz%Invalid op reference to register 'r1'rN)rrrr7r r@r&rr1retr6r"s r%test_invalid_register_sourcez(TestIrcheck.test_invalid_register_sourcebsR8tDE  #' X6UG TWC6]^_r'cttdt}|j|g}t |j dg|g}t |t|dy) NfoorEr*rDrBrCrGz.Invalid op reference to op of type LoadLiteralrN)rrrr7r r@r&rr^s r%test_invalid_op_sourcez"TestIrcheck.test_invalid_op_sourcehsU;U.IJ  #' X6UG T s)YZ r'cttdt}t|j dt g|j |gg}t|t|dy) NrcrDrB)r<r;rG.Cannot coerce source type i32 to dest type i64rN) rrrr r@rr7r&r)r1r_r"s r%test_invalid_return_typez$TestIrcheck.test_invalid_return_typeps\72BCD X8HI$$cU+,   s)YZ r'cttd}t|tdt}t t }t|jd|g|j||gg }t|t|d y) Nr[r\rfrcdestsrcrDrBrCrGrgrN) rrr rrrrKr r@r7r&r)r1arg_regassignr_r"s r%test_invalid_assignzTestIrcheck.test_invalid_assign{sv 0t<W'AQ*RS:& X.Y$$fc]34   v,\] r'c tdd}ttfttfttfttft t tgtftt t tgft |tfg}ttft |tftt fg}|D]\}}t||rJ|D]\}}t||sJy)NClscls)r<r>) rrrrrrrrr)r1rr valid_cases invalid_casesrlrks r%test_can_coerce_tozTestIrcheck.test_can_coerce_tos5e4 / 0 ^ , . /  / %~6 7 H V%5~$FG H s^. / / 0 s^^ , - . % ,IC d+ ++ ,& 0IC$S$/ // 0r'cttd}t|tdt}|j ||t t g}t|jdg|g }t|t|d y) Nr[r\rfrcrjrDrBrCrGzFunc has a duplicate oprN) rrr rr7rrKr r@r&r)r1rmrnr6r"s r%test_duplicate_opzTestIrcheck.test_duplicate_opsl 0t<W'AQ*RS  &&&z2J!KL X6UG TWF9RSTr'c|jttg}t|}|j|g}t |j dg|g}|dfg}t ||}|gdk(sJy)NrDr.rBrCrGrW)z def func_1():zL0:z goto L1z* ERR: Invalid control operation target: 1)r7rrKr r r@r)r1rSrXrTr"r$ formatteds r% test_pprintzTestIrcheck.test_pprints""F$<#=>'"""D6* X.9   >?@F+     r'c  ttd}ttd}tt|}t t |j dg|j|t||ttggy)NxyrBrCrDrFrG) rrrrr)r r@r7r rrK)r1rxry load_addrs r%#test_load_address_declares_registerz/TestIrcheck.test_load_address_declares_registersw nc * (# . 2B7  ^^^2$$&r9(=vJ?WX%  r')returnNone)r5zlist[Op]rr r )r<strr;z RType | Nonerr)__name__ __module__ __qualname__r2r7r@rLrQrUrYr`rdrhrorurwrzrr'r%r,r,.sQ   Q  _`      0.U & r'r,)r"r r#rrr)r"r rr)) __future__runittestmypyc.analysis.ircheckrrrmypyc.ir.class_irrmypyc.ir.func_irrr r mypyc.ir.opsr r r rrrrrrmypyc.ir.pprintrmypyc.ir.rtypesrrrrrrrrrrr&r)rKTestCaser,rr'r%rsi"HH%<<   (    !Qo . Y (##Y r'