summaryrefslogtreecommitdiff
path: root/handy.h
diff options
context:
space:
mode:
authorNicholas Clark <nick@ccl4.org>2008-10-27 20:25:46 +0000
committerNicholas Clark <nick@ccl4.org>2008-10-27 20:25:46 +0000
commitb1bc3f345d4dfe19cd94c120c46649336b5cb92b (patch)
treebdfcef0c7875037af6a5fa8195d2203fe76e6b27 /handy.h
parentbb5dd93d07e2d54d352e519c7b43ff2d3e5c5f36 (diff)
downloadperl-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 'handy.h')
-rw-r--r--handy.h7
1 files changed, 7 insertions, 0 deletions
diff --git a/handy.h b/handy.h
index d51b75dc81..d6a9026740 100644
--- a/handy.h
+++ b/handy.h
@@ -48,6 +48,13 @@ Null SV pointer. (No longer available when C<PERL_CORE> is defined.)
#define TRUE (1)
#define FALSE (0)
+#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
+# define MUTABLE_PTR(p) ({ void *_p = (p); (void *) _p; })
+#else
+# define MUTABLE_PTR(p) ((void *) (p))
+#endif
+
+#define MUTABLE_SV(p) ((SV *)MUTABLE_PTR(p))
/* XXX Configure ought to have a test for a boolean type, if I can
just figure out all the headers such a test needs.