Change 29487 by [EMAIL PROTECTED] on 2006/12/08 22:11:56

        Assert that BmRARE, BmUSEFUL and BmPREVIOUS are only called on SVtPVBM

Affected files ...

... //depot/perl/sv.h#287 edit

Differences ...

==== //depot/perl/sv.h#287 (text) ====
Index: perl/sv.h
--- perl/sv.h#286~29248~        2006-11-12 12:22:28.000000000 -0800
+++ perl/sv.h   2006-12-08 14:11:56.000000000 -0800
@@ -1300,9 +1300,27 @@
                     }                                                  \
                 } STMT_END
 
-#define BmRARE(sv)     ((XPVBM*)  SvANY(sv))->xbm_rare
-#define BmUSEFUL(sv)   ((XPVBM*)  SvANY(sv))->xbm_useful
-#define BmPREVIOUS(sv) ((XPVBM*)  SvANY(sv))->xbm_previous
+#if defined (DEBUGGING) && defined(__GNUC__) && 
!defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
+#  define BmRARE(sv)                                                   \
+       (*({ SV *const _svi = (SV *) (sv);                              \
+           assert(SvTYPE(_svi) == SVt_PVBM);                           \
+           &(((XPVBM*) SvANY(_svi))->xbm_rare);                        \
+        }))
+#  define BmUSEFUL(sv)                                                 \
+       (*({ SV *const _svi = (SV *) (sv);                              \
+           assert(SvTYPE(_svi) == SVt_PVBM);                           \
+           &(((XPVBM*) SvANY(_svi))->xbm_useful);                      \
+        }))
+#  define BmPREVIOUS(sv)                                               \
+       (*({ SV *const _svi = (SV *) (sv);                              \
+           assert(SvTYPE(_svi) == SVt_PVBM);                           \
+           &(((XPVBM*) SvANY(_svi))->xbm_previous);                    \
+        }))
+#else
+#  define BmRARE(sv)   ((XPVBM*)  SvANY(sv))->xbm_rare
+#  define BmUSEFUL(sv) ((XPVBM*)  SvANY(sv))->xbm_useful
+#  define BmPREVIOUS(sv)       ((XPVBM*)  SvANY(sv))->xbm_previous
+#endif
 
 #define FmLINES(sv)    ((XPVFM*)  SvANY(sv))->xfm_lines
 
End of Patch.

Reply via email to