OP * Perl_pp_add(PerlInterpreter * my_perl) { extern int Perl___notused(void); SV **sp = (my_perl->Istack_sp); SV *targ = ((my_perl->Iop)->op_flags & 64 ? sp[-1] : Perl_pad_sv(my_perl, (my_perl->Iop)->op_targ)); char useleft; SV *svl, *svr; do { if (((((*(sp - 1)))->sv_flags | ((*sp))->sv_flags) & (0x00000800 | 0x00200000)) && Perl_try_amagic_bin(my_perl, add_amg, 4 | 0x10)) return (my_perl->Iop)->op_next; } while (0); svr = (*sp); svl = (*(sp - 1)); useleft = (((((svtype) ((svl)->sv_flags & 0xff)) == SVt_BIND) ? ((((svl)->sv_u.svu_rv))-> sv_flags & (0x00000100 | 0x00000200 | 0x00000400 | 0x00000800 | 0x00001000 | 0x00002000 | 0x00004000 | 0x00008000)) : ((svl)-> sv_flags & (0x00000100 | 0x00000200 | 0x00000400 | 0x00000800 | 0x00001000 | 0x00002000 | 0x00004000 | 0x00008000))) || !((my_perl->Iop)->op_flags & 64)); if ((!((svr)->sv_flags & 0x00001000) && (((svr)->sv_flags & 0x00000200) || ((svr)-> sv_flags & 0x00000400)) ? ((((svr)->sv_flags & 0x00000100) ? ((XPVIV *) (svr)->sv_any)-> xiv_u.xivu_iv : Perl_sv_2iv_flags(my_perl, svr, 0)), ((svr)->sv_flags & 0x00000100)) : ((svr)-> sv_flags & 0x00000100))) { UV auv = 0; char auvok = (0); char a_valid = 0; if (!useleft) { auv = 0; a_valid = auvok = 1; } else { if ((!((svl)->sv_flags & 0x00001000) && (((svl)->sv_flags & 0x00000200) || ((svl)-> sv_flags & 0x00000400)) ? ((((svl)->sv_flags & 0x00000100) ? ((XPVIV *) (svl)-> sv_any)->xiv_u. xivu_iv : Perl_sv_2iv_flags(my_perl, svl, 0)), ((svl)->sv_flags & 0x00000100)) : ((svl)-> sv_flags & 0x00000100))) { if ((auvok = (((svl)->sv_flags & (0x00000100 | 0x80000000)) == (0x00000100 | 0x80000000)))) auv = ((XPVUV *) (svl)->sv_any)->xuv_u.xivu_uv; else { const IV aiv = ((XPVIV *) (svl)->sv_any)->xiv_u.xivu_iv; if (aiv >= 0) { auv = aiv; auvok = 1; } else { auv = (UV) - aiv; } } a_valid = 1; } } if (a_valid) { char result_good = 0; UV result; UV buv; char buvok = (((svr)->sv_flags & (0x00000100 | 0x80000000)) == (0x00000100 | 0x80000000)); if (buvok) buv = ((XPVUV *) (svr)->sv_any)->xuv_u.xivu_uv; else { const IV biv = ((XPVIV *) (svr)->sv_any)->xiv_u.xivu_iv; if (biv >= 0) { buv = biv; buvok = 1; } else buv = (UV) - biv; } if (auvok ^ buvok) { if (auv >= buv) { result = auv - buv; if (result <= auv) result_good = 1; } else { result = buv - auv; if (result <= buv) { auvok = !auvok; result_good = 1; } } } else { result = auv + buv; if (result >= auv) result_good = 1; } if (result_good) { sp--; if (auvok) do { Perl_sv_setuv(my_perl, targ, (UV) (result)); do { do { if (((targ)->sv_flags & 0x00400000)) Perl_mg_set(my_perl, targ); } while (0); (*sp = targ); } while (0); } while (0); else { if (result <= (UV) ((long) (-2147483647L - 1))) do { Perl_sv_setiv(my_perl, targ, (IV) (-(IV) result)); do { do { if (((targ)->sv_flags & 0x00400000)) Perl_mg_set(my_perl, targ); } while (0); (*sp = targ); } while (0); } while (0); else { do { Perl_sv_setnv(my_perl, targ, (NV) (-(NV) result)); do { do { if (((targ)->sv_flags & 0x00400000)) Perl_mg_set(my_perl, targ); } while (0); (*sp = targ); } while (0); } while (0); } } return ((my_perl->Istack_sp) = sp, (my_perl->Iop)->op_next); } } } #line 609 "..\\pp_hot.c" { NV value = (((svr)->sv_flags & 0x00000200) ? ((XPVNV *) (svr)->sv_any)->xnv_u. xnv_nv : Perl_sv_2nv_flags(my_perl, svr, 0)); (void) (*sp--); if (!useleft) { do { Perl_sv_setnv(my_perl, targ, (NV) (value)); do { do { if (((targ)->sv_flags & 0x00400000)) Perl_mg_set(my_perl, targ); } while (0); (*sp = targ); } while (0); } while (0); return ((my_perl->Istack_sp) = sp, (my_perl->Iop)->op_next); } do { Perl_sv_setnv(my_perl, targ, (NV) (value + (((svl)->sv_flags & 0x00000200) ? ((XPVNV *) (svl)->sv_any)->xnv_u. xnv_nv : Perl_sv_2nv_flags(my_perl, svl, 0)))); do { do { if (((targ)->sv_flags & 0x00400000)) Perl_mg_set(my_perl, targ); } while (0); (*sp = targ); } while (0); } while (0); return ((my_perl->Istack_sp) = sp, (my_perl->Iop)->op_next); } }