As I noted a few weeks ago, I was getting warnings from the Sun C compiler
on solaris when I used XSRETURN_UNDEF in my extensions. This do...while(0)
wrapper is being used all over the Perl source, as Larry pointed out, so it
seemed odd that I would see the errors only in extensions. The warning is
printed because the XSUB.h wrappers have 'return' inside them.
This patch moves the return outside the wrapper. My extensions now compile
quietly (sure, they still work :). Apply over 5.002beta1. (Are the
wrappers still necessary?)
Dean
*** XSUB.h Fri Nov 10 12:11:02 1995
--- ../patches/XSUB.h Sun Dec 3 12:55:22 1995
***************
*** 15,21 ****
#define dXSI32 I32 ix = XSANY.any_i32
! #define XSRETURN(off) stack_sp = stack_base + ax + ((off) - 1); return
/* Simple macros to put new mortal values onto the stack. */
/* Typically used to return values from XS functions. */
--- 15,22 ----
#define dXSI32 I32 ix = XSANY.any_i32
! #define XSRETSTACK(off) stack_sp = stack_base + ax + ((off) - 1)
! #define XSRETURN(off) XSRETSTACK(off); return
/* Simple macros to put new mortal values onto the stack. */
/* Typically used to return values from XS functions. */
***************
*** 26,35 ****
#define XST_mYES(i) (ST(i) = &sv_yes )
#define XST_mUNDEF(i) (ST(i) = &sv_undef)
! #define XSRETURN_IV(v) do { XST_mIV(0,v); XSRETURN(1); } while (0)
! #define XSRETURN_NV(v) do { XST_mNV(0,v); XSRETURN(1); } while (0)
! #define XSRETURN_PV(v) do { XST_mPV(0,v); XSRETURN(1); } while (0)
! #define XSRETURN_NO do { XST_mNO(0); XSRETURN(1); } while (0)
! #define XSRETURN_YES do { XST_mYES(0); XSRETURN(1); } while (0)
! #define XSRETURN_UNDEF do { XST_mUNDEF(0); XSRETURN(1); } while (0)
! #define XSRETURN_EMPTY do { XSRETURN(0); } while (0)
--- 27,36 ----
#define XST_mYES(i) (ST(i) = &sv_yes )
#define XST_mUNDEF(i) (ST(i) = &sv_undef)
! #define XSRETURN_IV(v) do { XST_mIV(0,v); XSRETSTACK(1); } while (0); return
! #define XSRETURN_NV(v) do { XST_mNV(0,v); XSRETSTACK(1); } while (0); return
! #define XSRETURN_PV(v) do { XST_mPV(0,v); XSRETSTACK(1); } while (0); return
! #define XSRETURN_NO do { XST_mNO(0); XSRETSTACK(1); } while (0); return
! #define XSRETURN_YES do { XST_mYES(0); XSRETSTACK(1); } while (0); return
! #define XSRETURN_UNDEF do { XST_mUNDEF(0); XSRETSTACK(1); } while (0); return
! #define XSRETURN_EMPTY do { XSRETSTACK(0); } while (0); return
on solaris when I used XSRETURN_UNDEF in my extensions. This do...while(0)
wrapper is being used all over the Perl source, as Larry pointed out, so it
seemed odd that I would see the errors only in extensions. The warning is
printed because the XSUB.h wrappers have 'return' inside them.
This patch moves the return outside the wrapper. My extensions now compile
quietly (sure, they still work :). Apply over 5.002beta1. (Are the
wrappers still necessary?)
Dean
*** XSUB.h Fri Nov 10 12:11:02 1995
--- ../patches/XSUB.h Sun Dec 3 12:55:22 1995
***************
*** 15,21 ****
#define dXSI32 I32 ix = XSANY.any_i32
! #define XSRETURN(off) stack_sp = stack_base + ax + ((off) - 1); return
/* Simple macros to put new mortal values onto the stack. */
/* Typically used to return values from XS functions. */
--- 15,22 ----
#define dXSI32 I32 ix = XSANY.any_i32
! #define XSRETSTACK(off) stack_sp = stack_base + ax + ((off) - 1)
! #define XSRETURN(off) XSRETSTACK(off); return
/* Simple macros to put new mortal values onto the stack. */
/* Typically used to return values from XS functions. */
***************
*** 26,35 ****
#define XST_mYES(i) (ST(i) = &sv_yes )
#define XST_mUNDEF(i) (ST(i) = &sv_undef)
! #define XSRETURN_IV(v) do { XST_mIV(0,v); XSRETURN(1); } while (0)
! #define XSRETURN_NV(v) do { XST_mNV(0,v); XSRETURN(1); } while (0)
! #define XSRETURN_PV(v) do { XST_mPV(0,v); XSRETURN(1); } while (0)
! #define XSRETURN_NO do { XST_mNO(0); XSRETURN(1); } while (0)
! #define XSRETURN_YES do { XST_mYES(0); XSRETURN(1); } while (0)
! #define XSRETURN_UNDEF do { XST_mUNDEF(0); XSRETURN(1); } while (0)
! #define XSRETURN_EMPTY do { XSRETURN(0); } while (0)
--- 27,36 ----
#define XST_mYES(i) (ST(i) = &sv_yes )
#define XST_mUNDEF(i) (ST(i) = &sv_undef)
! #define XSRETURN_IV(v) do { XST_mIV(0,v); XSRETSTACK(1); } while (0); return
! #define XSRETURN_NV(v) do { XST_mNV(0,v); XSRETSTACK(1); } while (0); return
! #define XSRETURN_PV(v) do { XST_mPV(0,v); XSRETSTACK(1); } while (0); return
! #define XSRETURN_NO do { XST_mNO(0); XSRETSTACK(1); } while (0); return
! #define XSRETURN_YES do { XST_mYES(0); XSRETSTACK(1); } while (0); return
! #define XSRETURN_UNDEF do { XST_mUNDEF(0); XSRETSTACK(1); } while (0); return
! #define XSRETURN_EMPTY do { XSRETSTACK(0); } while (0); return