#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"
require 'regen/regen_lib.pl';
}
+# These have a subtly different "namespace" from the magic types.
my @sig =
(
'sv' => {get => 'get', set => 'set', len => 'len'},
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
);