diff options
author | Nicholas Clark <nick@ccl4.org> | 2011-05-14 12:26:37 +0100 |
---|---|---|
committer | Nicholas Clark <nick@ccl4.org> | 2011-06-11 10:39:58 +0200 |
commit | 2d1f1fe5758d1f7ec388be4bc09f029dd0df5b7c (patch) | |
tree | 5a687231add1e5afc45981f9d7347df80776e0ad /regen | |
parent | b76b0bf9b926e6a5504a59a935a232eb91d44437 (diff) | |
download | perl-2d1f1fe5758d1f7ec388be4bc09f029dd0df5b7c.tar.gz |
Provide the names of the magic vtables in PL_magic_vtable_names[].
As it's a 1 to 1 mapping with the vtables in PL_magic_vtables[], refactor
Perl_do_magic_dump() to index into it directly to find the name for an
arbitrary mg_virtual, avoiding a long switch statement.
Diffstat (limited to 'regen')
-rw-r--r-- | regen/mg_vtable.pl | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/regen/mg_vtable.pl b/regen/mg_vtable.pl index 0e78029571..f527a3ed76 100644 --- a/regen/mg_vtable.pl +++ b/regen/mg_vtable.pl @@ -60,13 +60,22 @@ my $h = open_new('mg_vtable.h', '>', style => '*' }); { - my @names = map {"want_vtbl_$_"} grep {!ref $_} @sig; - push @names, 'magic_vtable_max'; - local $" = ",\n "; + my @names = grep {!ref $_} @sig; + my $want = join ",\n ", (map {"want_vtbl_$_"} @names), 'magic_vtable_max'; + my $names = join qq{",\n "}, @names; + print $h <<"EOH"; enum { /* pass one of these to get_vtbl */ - @names + $want +}; + +#ifdef DOINIT +EXTCONST char *PL_magic_vtable_names[magic_vtable_max] = { + "$names" }; +#else +EXTCONST char *PL_magic_vtable_names[magic_vtable_max]; +#endif EOH } |