diff options
author | Nick Ing-Simmons <nik@tiuk.ti.com> | 2000-09-02 16:48:35 +0000 |
---|---|---|
committer | Nick Ing-Simmons <nik@tiuk.ti.com> | 2000-09-02 16:48:35 +0000 |
commit | aacdac464b116367cebe4e1e19fd4b760789bbdf (patch) | |
tree | bca36ca0578598808aea076d3ec78a98a18a3409 /pp.h | |
parent | 191408b6bdd57092aaa9c8919d6d2c67efd76493 (diff) | |
download | perl-aacdac464b116367cebe4e1e19fd4b760789bbdf.tar.gz |
If overloaded %{} etc. return the object do not loop.
Thus sub deref { $_[0] } functions if object is wanted type.
p4raw-id: //depot/perl@7009
Diffstat (limited to 'pp.h')
-rw-r--r-- | pp.h | 13 |
1 files changed, 8 insertions, 5 deletions
@@ -147,7 +147,7 @@ used, guarantees that there is room for at least C<nitems> to be pushed onto the stack. =for apidoc Am|void|PUSHs|SV* sv -Push an SV onto the stack. The stack must have room for this element. +Push an SV onto the stack. The stack must have room for this element. Does not handle 'set' magic. See C<XPUSHs>. =for apidoc Am|void|PUSHp|char* str|STRLEN len @@ -185,7 +185,7 @@ Push an integer onto the stack, extending the stack if necessary. Handles 'set' magic. See C<PUSHi>. =for apidoc Am|void|XPUSHu|UV uv -Push an unsigned integer onto the stack, extending the stack if necessary. +Push an unsigned integer onto the stack, extending the stack if necessary. See C<PUSHu>. =cut @@ -342,10 +342,13 @@ See C<PUSHu>. { dTARGETSTACKED; \ { dSP; tryAMAGICunW(meth,FORCE_SETs,shift,RETURN);}}} -#define setAGAIN(ref) sv = arg = ref; \ - if (!SvROK(ref)) \ +#define setAGAIN(ref) sv = ref; \ + if (!SvROK(ref)) \ Perl_croak(aTHX_ "Overloaded dereference did not return a reference"); \ - goto am_again; + if (ref != arg && SvRV(ref) != SvRV(arg)) { \ + arg = ref; \ + goto am_again; \ + } #define tryAMAGICunDEREF(meth) tryAMAGICunW(meth,setAGAIN,0,(void)0) |