summaryrefslogtreecommitdiff
path: root/regen
diff options
context:
space:
mode:
authorNicholas Clark <nick@ccl4.org>2011-05-14 12:26:37 +0100
committerNicholas Clark <nick@ccl4.org>2011-06-11 10:39:58 +0200
commit2d1f1fe5758d1f7ec388be4bc09f029dd0df5b7c (patch)
tree5a687231add1e5afc45981f9d7347df80776e0ad /regen
parentb76b0bf9b926e6a5504a59a935a232eb91d44437 (diff)
downloadperl-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.pl17
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
}