[PATCH] use more 'parentheses'

[email protected] (Nicholas Clark) Tue, 2 Mar 2004 11:58:46 +0000
Newsgroups perl.ponie.dev
Message-ID <[email protected]>
The arguments in macros that are getting cast need brackets round them,
to cope with the case where the text sv is actually something complex, eg

  SvPVX(foo ? bar : baz)

currently expands to

  SvPVX(sv)   (* Perl_macro_SvPVX(aTHX_ (SV*) foo ? bar : baz))

whereas it should be

  SvPVX(sv)   (* Perl_macro_SvPVX(aTHX_ (SV*) (foo ? bar : baz)))

[ie cast the result of the ?:, not foo]

Also some casts are needed in av.c to keep the compiler silent.

Nicholas Clark

Index: av.c
===================================================================
RCS file: /cvs/public/ponie/perl/av.c,v
retrieving revision 1.3
diff -p -u -r1.3 av.c
--- av.c	25 Feb 2004 16:08:15 -0000	1.3
+++ av.c	2 Mar 2004 11:52:10 -0000
@@ -23,32 +23,32 @@
 #include "parrot/extend.h"
 
 SV*** Perl_macro_AvARRAY (pTHX_ AV *av) {
-  XPVAV* data = (XPV*) Parrot_PMC_get_pointer(PL_Parrot, SvANY(av));
-  return &(data->xav_array);
+  XPVAV* data = (XPVAV*) Parrot_PMC_get_pointer(PL_Parrot, SvANY(av));
+  return (SV***)&(data->xav_array);
 }
 
 U8* Perl_macro_AvFLAGS (pTHX_ AV *av) {
-  XPVAV* data = (XPV*) Parrot_PMC_get_pointer(PL_Parrot, SvANY(av));
+  XPVAV* data = (XPVAV*) Parrot_PMC_get_pointer(PL_Parrot, SvANY(av));
   return &(data->xav_flags);
 }
 
 SSize_t* Perl_macro_AvMAX (pTHX_ AV *av) {
-  XPVAV* data = (XPV*) Parrot_PMC_get_pointer(PL_Parrot, SvANY(av));
+  XPVAV* data = (XPVAV*) Parrot_PMC_get_pointer(PL_Parrot, SvANY(av));
   return &(data->xav_max);
 }
 
 SV*** Perl_macro_AvALLOC (pTHX_ AV *av) {
-  XPVAV* data = (XPV*) Parrot_PMC_get_pointer(PL_Parrot, SvANY(av));
+  XPVAV* data = (XPVAV*) Parrot_PMC_get_pointer(PL_Parrot, SvANY(av));
   return &(data->xav_alloc);
 }
 
 SV** Perl_macro_AvARYLEN (pTHX_ AV *av) {
-  XPVAV* data = (XPV*) Parrot_PMC_get_pointer(PL_Parrot, SvANY(av));
+  XPVAV* data = (XPVAV*) Parrot_PMC_get_pointer(PL_Parrot, SvANY(av));
   return &(data->xav_arylen);
 }
 
 SSize_t* Perl_macro_AvFILLp (pTHX_ AV *av) {
-  XPVAV* data = (XPV*) Parrot_PMC_get_pointer(PL_Parrot, SvANY(av));
+  XPVAV* data = (XPVAV*) Parrot_PMC_get_pointer(PL_Parrot, SvANY(av));
   return &(data->xav_fill);
 }
 
Index: av.h
===================================================================
RCS file: /cvs/public/ponie/perl/av.h,v
retrieving revision 1.3
diff -p -u -r1.3 av.h
--- av.h	25 Feb 2004 16:08:15 -0000	1.3
+++ av.h	2 Mar 2004 11:52:10 -0000
@@ -61,12 +61,12 @@ Same as C<av_len()>.  Deprecated, use C<
 
 #define Nullav Null(AV*)
 
-#define AvARRAY(av)	( * Perl_macro_AvARRAY(aTHX_  (AV*)av) )
-#define AvALLOC(av)	( * Perl_macro_AvALLOC(aTHX_  (AV*)av) )
-#define AvMAX(av)	( * Perl_macro_AvMAX(aTHX_    (AV*)av) )
-#define AvFILLp(av)     ( * Perl_macro_AvFILLp(aTHX_  (AV*)av) )
-#define AvARYLEN(av)    ( * Perl_macro_AvARYLEN(aTHX_ (AV*)av) )
-#define AvFLAGS(av)	( * Perl_macro_AvFLAGS(aTHX_  (AV*)av) )
+#define AvARRAY(av)	( * Perl_macro_AvARRAY(aTHX_  (AV*)(av)) )
+#define AvALLOC(av)	( * Perl_macro_AvALLOC(aTHX_  (AV*)(av)) )
+#define AvMAX(av)	( * Perl_macro_AvMAX(aTHX_    (AV*)(av)) )
+#define AvFILLp(av)     ( * Perl_macro_AvFILLp(aTHX_  (AV*)(av)) )
+#define AvARYLEN(av)    ( * Perl_macro_AvARYLEN(aTHX_ (AV*)(av)) )
+#define AvFLAGS(av)	( * Perl_macro_AvFLAGS(aTHX_  (AV*)(av)) )
 
 
 #define AvREAL(av)	(AvFLAGS(av) & AVf_REAL)
Index: hv.h
===================================================================
RCS file: /cvs/public/ponie/perl/hv.h,v
retrieving revision 1.3
diff -p -u -r1.3 hv.h
--- hv.h	27 Feb 2004 14:23:39 -0000	1.3
+++ hv.h	2 Mar 2004 11:52:10 -0000
@@ -160,15 +160,15 @@ C<SV*>.
 
 
 
-#define HvARRAY(hv)         (* Perl_macro_HvARRAY  (aTHX_ (HV*)hv) )
-#define HvFILL(hv)          (* Perl_macro_HvFILL   (aTHX_ (HV*)hv) )
-#define HvMAX(hv)           (* Perl_macro_HvMAX    (aTHX_ (HV*)hv) )
-#define HvRITER(hv)         (* Perl_macro_HvRITER  (aTHX_ (HV*)hv) )
-#define HvEITER(hv)         (* Perl_macro_HvEITER  (aTHX_ (HV*)hv) )
-#define HvPMROOT(hv)        (* Perl_macro_HvPMROOT (aTHX_ (HV*)hv) )
-#define HvNAME(hv)          (* Perl_macro_HvNAME   (aTHX_ (HV*)hv) )
+#define HvARRAY(hv)         (* Perl_macro_HvARRAY  (aTHX_ (HV*)(hv)) )
+#define HvFILL(hv)          (* Perl_macro_HvFILL   (aTHX_ (HV*)(hv)) )
+#define HvMAX(hv)           (* Perl_macro_HvMAX    (aTHX_ (HV*)(hv)) )
+#define HvRITER(hv)         (* Perl_macro_HvRITER  (aTHX_ (HV*)(hv)) )
+#define HvEITER(hv)         (* Perl_macro_HvEITER  (aTHX_ (HV*)(hv)) )
+#define HvPMROOT(hv)        (* Perl_macro_HvPMROOT (aTHX_ (HV*)(hv)) )
+#define HvNAME(hv)          (* Perl_macro_HvNAME   (aTHX_ (HV*)(hv)) )
 
-#define HvDATA(hv)          (* Perl_macro_HvDATA   (aTHX_ (HV*)hv) )
+#define HvDATA(hv)          (* Perl_macro_HvDATA   (aTHX_ (HV*)(hv)) )
 
 #define XHvTOTALKEYS(xhv)    (xhv->xhv_keys)
 #define XHvPLACEHOLDERS(xhv) (xhv->xhv_placeholders)
Index: sv.h
===================================================================
RCS file: /cvs/public/ponie/perl/sv.h,v
retrieving revision 1.10
diff -p -u -r1.10 sv.h
--- sv.h	2 Mar 2004 11:31:50 -0000	1.10
+++ sv.h	2 Mar 2004 11:52:10 -0000
@@ -737,23 +737,23 @@ and leaves the UTF8 status as it was.
 #define SvRV(sv) ((XRV*)  SvANY(sv))->xrv_rv
 #define SvRVx(sv) SvRV(sv)
 
-#define SvIVX(sv) (* Perl_macro_SvIVX(aTHX_ (SV*) sv))
-#define SvUVX(sv) (* Perl_macro_SvUVX(aTHX_ (SV*) sv))
-#define SvNVX(sv) (* Perl_macro_SvNVX(aTHX_ (SV*) sv))
+#define SvIVX(sv) (* Perl_macro_SvIVX(aTHX_ (SV*) (sv)))
+#define SvUVX(sv) (* Perl_macro_SvUVX(aTHX_ (SV*) (sv)))
+#define SvNVX(sv) (* Perl_macro_SvNVX(aTHX_ (SV*) (sv)))
 
 #define SvIVXx(sv) SvIVX(sv)
 #define SvUVXx(sv) SvUVX(sv)
 #define SvNVXx(sv) SvNVX(sv)
 
-#define SvPVX(sv)   (* Perl_macro_SvPVX(aTHX_ (SV*) sv))
+#define SvPVX(sv)   (* Perl_macro_SvPVX(aTHX_ (SV*) (sv)))
 #define SvPVXx(sv) SvPVX(sv)
-#define SvCUR(sv) ( * Perl_macro_SvCUR(aTHX_ (SV*) sv))
-#define SvLEN(sv) ( * Perl_macro_SvLEN(aTHX_ (SV*) sv))
+#define SvCUR(sv) ( * Perl_macro_SvCUR(aTHX_ (SV*) (sv)))
+#define SvLEN(sv) ( * Perl_macro_SvLEN(aTHX_ (SV*) (sv)))
 #define SvLENx(sv) SvLEN(sv)
 #define SvEND(sv)(SvPVX(sv) + SvCUR(sv))
 #define SvENDx(sv) ((PL_Sv = (sv)), SvEND(PL_Sv))
-#define SvMAGIC(sv)	(* Perl_macro_SvMAGIC(aTHX_ (SV*) sv))
-#define SvSTASH(sv)	(* Perl_macro_SvSTASH(aTHX_ (SV*) sv))
+#define SvMAGIC(sv)	(* Perl_macro_SvMAGIC(aTHX_ (SV*) (sv)))
+#define SvSTASH(sv)	(* Perl_macro_SvSTASH(aTHX_ (SV*) (sv)))
 
 /* Ask a scalar nicely to try to become an IV, if possible.
    Not guaranteed to stay returning void */
@@ -786,10 +786,10 @@ and leaves the UTF8 status as it was.
 
 #define FmLINES(sv)	((XPVFM*)  SvANY(sv))->xfm_lines
 
-#define LvTYPE(sv)      (*Perl_macro_LvTYPE(aTHX_ (SV*)sv))
-#define LvTARG(sv)      ((SV*)*Perl_macro_LvTARG(aTHX_ (SV*)sv))
-#define LvTARGOFF(sv)   ( * Perl_macro_LvTARGOFF(aTHX_ (SV*)sv))
-#define LvTARGLEN(sv)   ( * Perl_macro_LvTARGLEN(aTHX_ (SV*)sv))
+#define LvTYPE(sv)      (*Perl_macro_LvTYPE(aTHX_ (SV*)(sv)))
+#define LvTARG(sv)      ((SV*)*Perl_macro_LvTARG(aTHX_ (SV*)(sv)))
+#define LvTARGOFF(sv)   ( * Perl_macro_LvTARGOFF(aTHX_ (SV*)(sv)))
+#define LvTARGLEN(sv)   ( * Perl_macro_LvTARGLEN(aTHX_ (SV*)(sv)))
 
 #define IoIFP(sv)	((XPVIO*)  SvANY(sv))->xio_ifp
 #define IoOFP(sv)	((XPVIO*)  SvANY(sv))->xio_ofp