This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Move the cast for a magic vtable with const get into mg_vtable.h
authorNicholas Clark <nick@ccl4.org>
Fri, 13 May 2011 15:35:59 +0000 (16:35 +0100)
committerNicholas Clark <nick@ccl4.org>
Sat, 11 Jun 2011 08:12:17 +0000 (10:12 +0200)
Putting the cast inside the initialiser (the only initialiser using it)
eliminates use of the macro MGVTBL_SET_CONST_MAGIC_GET(), which can be deleted
as nothing outside the core is relying on it.

mg_vtable.h
perl.h
regen/mg_vtable.pl

index ebe448a..4353088 100644 (file)
@@ -134,9 +134,9 @@ MGVTBL_SET(
     0
 );
 
-MGVTBL_SET_CONST_MAGIC_GET(
+MGVTBL_SET(
     PL_vtbl_arylen,
-    Perl_magic_getarylen,
+    (int (*)(pTHX_ SV *, MAGIC *))Perl_magic_getarylen,
     Perl_magic_setarylen,
     0,
     0,
diff --git a/perl.h b/perl.h
index 71ef2f5..c4e3d6d 100644 (file)
--- a/perl.h
+++ b/perl.h
@@ -5110,12 +5110,8 @@ START_EXTERN_C
 
 #ifdef DOINIT
 #  define MGVTBL_SET(var,a,b,c,d,e,f,g,h) EXT_MGVTBL var = {a,b,c,d,e,f,g,h}
-/* Like MGVTBL_SET but with the get magic having a const MG* */
-#  define MGVTBL_SET_CONST_MAGIC_GET(var,a,b,c,d,e,f,g,h) EXT_MGVTBL var \
-    = {(int (*)(pTHX_ SV *, MAGIC *))a,b,c,d,e,f,g,h}
 #else
 #  define MGVTBL_SET(var,a,b,c,d,e,f,g,h) EXT_MGVTBL var
-#  define MGVTBL_SET_CONST_MAGIC_GET(var,a,b,c,d,e,f,g,h) EXT_MGVTBL var
 #endif
 
 #include "mg_vtable.h"
index d3557ec..6322b8b 100644 (file)
@@ -18,6 +18,7 @@ BEGIN {
     require 'regen/regen_lib.pl';
 }
 
+# These have a subtly different "namespace" from the magic types.
 my @sig =
     (
      'sv' => {get => 'get', set => 'set', len => 'len'},
@@ -82,15 +83,16 @@ print $h <<'EOH';
 EOH
 
 while (my ($name, $data) = splice @sig, 0, 2) {
-    my $funcs = join ",\n    ", map {
+    my @funcs = map {
        $data->{$_} ? "Perl_magic_$data->{$_}" : 0;
     } qw(get set len clear free copy dup local);
 
-    my $set_macro = $data->{const} ? 'MGVTBL_SET_CONST_MAGIC_GET' : 'MGVTBL_SET';
+    $funcs[0] = "(int (*)(pTHX_ SV *, MAGIC *))" . $funcs[0] if $data->{const};
+    my $funcs = join ",\n    ", @funcs;
 
     print $h "$data->{cond}\n" if $data->{cond};
     print $h <<"EOT";
-$set_macro(
+MGVTBL_SET(
     PL_vtbl_$name,
     $funcs
 );