in reply to Re^3: Puzzled by value of $overload::ops{binary}
in thread Puzzled by value of $overload::ops{binary}
which is simply doing p = p + 1, with "p" being a Math::GMPz object.void overload_inc(pTHX_ SV * p, SV * a, SV * b) { mpz_add_ui(*(INT2PTR(mpz_t *, SvIVX(SvRV(p)))), *(INT2PTR(mpz_t * +, SvIVX(SvRV(p)))), 1); }
Works fine.void overload_inc (p, a, b) SV * p SV * a SV * b CODE: overload_inc(aTHX_ p, a, b); XSRETURN_EMPTY; /* return empty stack */
which is just doing p = p + a, and returning p (after increasing the refcount).SV * overload_add_eq(pTHX_ SV * p, SV * a, SV * b) { mpz_add_ui(*(INT2PTR(mpz_t *, SvIVX(SvRV(p)))), *(INT2PTR(mpz_t * +, SvIVX(SvRV(p)))), SvUV(a)); SvREFCNT_inc(p); return p; }
Now, it's not hard to work out what that overload_add_eq() would look like if I were to apply the same approach as used by overload_inc():SV * overload_add_eq (p, a, b) SV * p SV * a SV * b CODE: RETVAL = overload_add_eq (aTHX_ p, a, b); OUTPUT: RETVAL
andvoid overload_add_eq(pTHX_ SV * p, SV * a, SV * b) { mpz_add_ui(*(INT2PTR(mpz_t *, SvIVX(SvRV(p)))), *(INT2PTR(mpz_t * +, SvIVX(SvRV(p)))), SvUV(a)); }
But I've never managed to get that to work.void overload_add_eq (p, second, third) SV * p SV * a SV * b CODE: overload_add_eq(aTHX_ p, a, b); XSRETURN_EMPTY; /* return empty stack */
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^5: Puzzled by value of $overload::ops{binary}
by syphilis (Archbishop) on Jun 26, 2024 at 02:10 UTC | |
by etj (Priest) on Jun 26, 2024 at 11:35 UTC | |
by syphilis (Archbishop) on Jun 26, 2024 at 14:28 UTC | |
by etj (Priest) on Jun 26, 2024 at 22:08 UTC | |
by syphilis (Archbishop) on Jun 27, 2024 at 02:30 UTC | |
|