diff options
author | Nicholas Clark <nick@ccl4.org> | 2008-10-27 20:25:46 +0000 |
---|---|---|
committer | Nicholas Clark <nick@ccl4.org> | 2008-10-27 20:25:46 +0000 |
commit | b1bc3f345d4dfe19cd94c120c46649336b5cb92b (patch) | |
tree | bdfcef0c7875037af6a5fa8195d2203fe76e6b27 /scope.h | |
parent | bb5dd93d07e2d54d352e519c7b43ff2d3e5c5f36 (diff) | |
download | perl-b1bc3f345d4dfe19cd94c120c46649336b5cb92b.tar.gz |
Add a macro MUTABLE_PTR(p), which on (non-pedantic) gcc will not cast
away const, returning a void *. Add MUTABLE_SV(sv) which uses this, and
replace all (SV *) casts either with MUTABLE_SV(sv), or (const SV *).
This probably still needs some work - assigning to SvPVX() and SvRV()
is now likely to generate a casting error. The core doesn't do this.
But as-is it's finding bugs that can be fixed.
p4raw-id: //depot/perl@34605
Diffstat (limited to 'scope.h')
-rw-r--r-- | scope.h | 10 |
1 files changed, 5 insertions, 5 deletions
@@ -127,8 +127,8 @@ Closing bracket on a callback. See C<ENTER> and L<perlcall>. #define SAVEPPTR(s) save_pptr((char**)&(s)) #define SAVEVPTR(s) save_vptr((void*)&(s)) #define SAVEPADSVANDMORTALIZE(s) save_padsv_and_mortalize(s) -#define SAVEFREESV(s) save_freesv((SV*)(s)) -#define SAVEMORTALIZESV(s) save_mortalizesv((SV*)(s)) +#define SAVEFREESV(s) save_freesv(MUTABLE_SV(s)) +#define SAVEMORTALIZESV(s) save_mortalizesv(MUTABLE_SV(s)) #define SAVEFREEOP(o) save_freeop((OP*)(o)) #define SAVEFREEPV(p) save_freepv((char*)(p)) #define SAVECLEARSV(sv) save_clearsv((SV**)&(sv)) @@ -173,15 +173,15 @@ Closing bracket on a callback. See C<ENTER> and L<perlcall>. #define SAVECOMPPAD() \ STMT_START { \ SSCHECK(2); \ - SSPUSHPTR((SV*)PL_comppad); \ + SSPUSHPTR(MUTABLE_SV(PL_comppad)); \ SSPUSHINT(SAVEt_COMPPAD); \ } STMT_END #define SAVESWITCHSTACK(f,t) \ STMT_START { \ SSCHECK(3); \ - SSPUSHPTR((SV*)(f)); \ - SSPUSHPTR((SV*)(t)); \ + SSPUSHPTR(MUTABLE_SV(f)); \ + SSPUSHPTR(MUTABLE_SV(t)); \ SSPUSHINT(SAVEt_SAVESWITCHSTACK); \ SWITCHSTACK((f),(t)); \ PL_curstackinfo->si_stack = (t); \ |