]> git.vpit.fr Git - perl/modules/Variable-Magic.git/commitdiff
Explicitely state that C++ compilers aren't supported
authorVincent Pit <vince@profvince.com>
Sat, 16 Oct 2010 12:34:04 +0000 (14:34 +0200)
committerVincent Pit <vince@profvince.com>
Sat, 16 Oct 2010 12:34:04 +0000 (14:34 +0200)
Magic.xs
lib/Variable/Magic.pm
ptable.h

index 9aabb411d9a158cd52f5ed0127f3fad00ab1226d..2de483fd63c10169fbb789cb5413ca231340ea26 100644 (file)
--- a/Magic.xs
+++ b/Magic.xs
 
 #define __PACKAGE__ "Variable::Magic"
 
+#undef VOID2
+#ifdef __cplusplus
+# define VOID2(T, P) static_cast<T>(P)
+#else
+# define VOID2(T, P) (P)
+#endif
+
 #ifndef VMG_PERL_PATCHLEVEL
 # ifdef PERL_PATCHNUM
 #  define VMG_PERL_PATCHLEVEL PERL_PATCHNUM
@@ -543,7 +550,7 @@ STATIC MGWIZ *vmg_mgwiz_clone(pTHX_ const MGWIZ *w) {
 #if VMG_THREADSAFE
 
 #define PTABLE_NAME        ptable
-#define PTABLE_VAL_FREE(V) vmg_mgwiz_free(V)
+#define PTABLE_VAL_FREE(V) vmg_mgwiz_free(VOID2(MGWIZ *, (V)))
 
 #define pPTBL  pTHX
 #define pPTBL_ pTHX_
@@ -573,13 +580,13 @@ START_MY_CXT
 #if VMG_THREADSAFE
 
 STATIC void vmg_ptable_clone(pTHX_ ptable_ent *ent, void *ud_) {
- my_cxt_t *ud = ud_;
+ my_cxt_t *ud = VOID2(my_cxt_t *, ud_);
  MGWIZ *w;
 
  if (ud->owner == aTHX)
   return;
 
- w = vmg_mgwiz_clone(ent->val);
+ w = vmg_mgwiz_clone(VOID2(MGWIZ *, ent->val));
  if (w)
   ptable_store(ud->wizards, ent->key, w);
 }
@@ -672,7 +679,7 @@ STATIC const MGWIZ *vmg_wizard_mgwiz(pTHX_ const SV *wiz) {
 
  {
   dMY_CXT;
-  return ptable_fetch(MY_CXT.wizards, w);
+  return VOID2(const MGWIZ *, ptable_fetch(MY_CXT.wizards, w));
  }
 }
 
@@ -966,7 +973,7 @@ STATIC void vmg_op_info_init(pTHX_ unsigned int opinfo) {
   case VMG_OP_INFO_OBJECT: {
    dMY_CXT;
    if (!MY_CXT.b__op_stashes[0]) {
-    opclass c;
+    int c;
     require_pv("B.pm");
     for (c = OPc_NULL; c < OPc_MAX; ++c)
      MY_CXT.b__op_stashes[c] = gv_stashpv(vmg_opclassnames[c], 1);
@@ -1087,7 +1094,7 @@ STATIC U32 vmg_svt_len(pTHX_ SV *sv, MAGIC *mg) {
  if (t < SVt_PVAV) {
   STRLEN l;
 #if VMG_HAS_PERL(5, 9, 3)
-  const U8 *s = SvPV_const(sv, l);
+  const U8 *s = VOID2(const U8 *, VOID2(const void *, SvPV_const(sv, l)));
 #else
   U8 *s = SvPV(sv, l);
 #endif
@@ -1390,7 +1397,7 @@ PROTOTYPE: DISABLE
 PREINIT:
  ptable *t;
  U32     had_b__op_stash = 0;
opclass c;
int     c;
 PPCODE:
  {
   my_cxt_t ud;
index 475390404d5600c57ae5bd88fc63b9ee580db29c..48278de5c8db760cf8ac40b5c7dc96b1c2ae9ce2 100644 (file)
@@ -608,6 +608,9 @@ In order to define magic on hash members, you need at least L<perl> 5.10.0 (see
 
 L<perl> 5.8.
 
+A C compiler.
+This module may happen to build with a C++ compiler as well, but don't rely on it, as no guarantee is made about this.
+
 L<Carp> (standard since perl 5), L<XSLoader> (standard since perl 5.006).
 
 Copy tests need L<Tie::Array> (standard since perl 5.005) and L<Tie::Hash> (since 5.002).
index fa6434a7e8633505145f058bb1f4e7adf18279fd..b3d19e23416f16b6941f24753ed5c81f3bec41b1 100644 (file)
--- a/ptable.h
+++ b/ptable.h
@@ -9,6 +9,13 @@
 /* This header is designed to be included several times with different
  * definitions for PTABLE_NAME and PTABLE_VAL_FREE(). */
 
+#undef VOID2
+#ifdef __cplusplus
+# define VOID2(T, P) static_cast<T>(P)
+#else
+# define VOID2(T, P) (P)
+#endif
+
 #undef pPTBLMS
 #undef pPTBLMS_
 #undef aPTBLMS
@@ -79,10 +86,11 @@ typedef struct ptable {
 #ifndef ptable_new
 STATIC ptable *ptable_new(pPTBLMS) {
 #define ptable_new() ptable_new(aPTBLMS)
- ptable *t = PerlMemShared_malloc(sizeof *t);
- t->max   = 15;
- t->items = 0;
- t->ary   = PerlMemShared_calloc(t->max + 1, sizeof *t->ary);
+ ptable *t = VOID2(ptable *, PerlMemShared_malloc(sizeof *t));
+ t->max    = 15;
+ t->items  = 0;
+ t->ary    = VOID2(ptable_ent **,
+                              PerlMemShared_calloc(t->max + 1, sizeof *t->ary));
  return t;
 }
 #endif /* !ptable_new */
@@ -125,7 +133,7 @@ STATIC void ptable_split(pPTBLMS_ ptable * const t) {
  size_t newsize = oldsize * 2;
  size_t i;
 
- ary = PerlMemShared_realloc(ary, newsize * sizeof(*ary));
+ ary = VOID2(ptable_ent **, PerlMemShared_realloc(ary, newsize * sizeof(*ary)));
  Zero(&ary[oldsize], newsize - oldsize, sizeof(*ary));
  t->max = --newsize;
  t->ary = ary;
@@ -157,7 +165,7 @@ STATIC void PTABLE_PREFIX(_store)(pPTBL_ ptable * const t, const void * const ke
   ent->val = val;
  } else if (val) {
   const size_t i = PTABLE_HASH(key) & t->max;
-  ent = PerlMemShared_malloc(sizeof *ent);
+  ent = VOID2(ptable_ent *, PerlMemShared_malloc(sizeof *ent));
   ent->key  = key;
   ent->val  = val;
   ent->next = t->ary[i];