summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas Clark <nick@ccl4.org>2011-05-13 14:17:22 +0100
committerNicholas Clark <nick@ccl4.org>2011-06-11 10:12:17 +0200
commit8b09643d068d86543c3782211d4a527ee93fee77 (patch)
tree32056686eb6f479513c1c0d5c0a05fd94ec70674
parent4de01b548a201d0dc90101ced2980c754fbf0e00 (diff)
downloadperl-8b09643d068d86543c3782211d4a527ee93fee77.tar.gz
Generate the definitions for magic vtables from data in a regen script.
Previously perl.h contained a long section of MGVTBL_SET() macros declaring the core's various magic vtables. Convert the information into data structures in a new script regen/mg_table.pl, and use this to generate a new file mg_vtable.h, included by perl.h This is the first step in reducing the number of places that data relating to magic vtables is declared (and has to be kept in sync), and will allow more flexibility in parts of the core's implementation.
-rw-r--r--MANIFEST2
-rwxr-xr-xPorting/makerel1
-rw-r--r--mg_vtable.h416
-rw-r--r--perl.h406
-rw-r--r--regen.pl1
-rw-r--r--regen/mg_vtable.pl102
-rw-r--r--t/porting/regen.t2
-rw-r--r--vms/descrip_mms.template11
8 files changed, 531 insertions, 410 deletions
diff --git a/MANIFEST b/MANIFEST
index 7f672e985d..1c657d4b14 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -4125,6 +4125,7 @@ metaconfig.SH Control file for the metaconfig process
META.yml Distribution meta-data in YAML
mg.c Magic code
mg.h Magic header
+mg_vtable.h Generated magic vtable data
minimod.pl Writes lib/ExtUtils/Miniperl.pm
miniperlmain.c Basic perl w/o dynamic loading or extensions
mkppport A script that distributes ppport.h
@@ -4573,6 +4574,7 @@ regcomp.h Private declarations for above
regcomp.sym Data for regnodes.h
regen/embed.pl Produces {embed,embedvar,proto}.h, global.sym
regen/keywords.pl Program to write keywords.h
+regen/mg_vtable.pl generate mg_vtable.h
regen/mk_PL_charclass.pl Populate the PL_charclass table
regen/opcode.pl Opcode header generator
regen/opcodes Opcode data
diff --git a/Porting/makerel b/Porting/makerel
index ec4dc5ed9b..1e7ca7ce13 100755
--- a/Porting/makerel
+++ b/Porting/makerel
@@ -142,6 +142,7 @@ my @writables = qw(
global.sym
overload.c
overload.h
+ mg_vtable.h
perlapi.h
perlapi.c
cpan/Devel-PPPort/module2.c
diff --git a/mg_vtable.h b/mg_vtable.h
new file mode 100644
index 0000000000..ebe448a454
--- /dev/null
+++ b/mg_vtable.h
@@ -0,0 +1,416 @@
+/* -*- buffer-read-only: t -*-
+ *
+ * mg_vtable.h
+ * !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+ * This file is built by regen/mg_vtable.pl.
+ * Any changes made here will be lost!
+ */
+
+/* These all need to be 0, not NULL, as NULL can be (void*)0, which is a
+ * pointer to data, whereas we're assigning pointers to functions, which are
+ * not the same beast. ANSI doesn't allow the assignment from one to the other.
+ * (although most, but not all, compilers are prepared to do it)
+ */
+
+/* args are:
+ vtable
+ get
+ set
+ len
+ clear
+ free
+ copy
+ dup
+ local
+*/
+
+MGVTBL_SET(
+ PL_vtbl_sv,
+ Perl_magic_get,
+ Perl_magic_set,
+ Perl_magic_len,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0
+);
+
+MGVTBL_SET(
+ PL_vtbl_env,
+ 0,
+ Perl_magic_set_all_env,
+ 0,
+ Perl_magic_clear_all_env,
+ 0,
+ 0,
+ 0,
+ 0
+);
+
+MGVTBL_SET(
+ PL_vtbl_envelem,
+ 0,
+ Perl_magic_setenv,
+ 0,
+ Perl_magic_clearenv,
+ 0,
+ 0,
+ 0,
+ 0
+);
+
+#ifndef PERL_MICRO
+MGVTBL_SET(
+ PL_vtbl_sigelem,
+ Perl_magic_getsig,
+ Perl_magic_setsig,
+ 0,
+ Perl_magic_clearsig,
+ 0,
+ 0,
+ 0,
+ 0
+);
+#endif
+
+MGVTBL_SET(
+ PL_vtbl_pack,
+ 0,
+ 0,
+ Perl_magic_sizepack,
+ Perl_magic_wipepack,
+ 0,
+ 0,
+ 0,
+ 0
+);
+
+MGVTBL_SET(
+ PL_vtbl_packelem,
+ Perl_magic_getpack,
+ Perl_magic_setpack,
+ 0,
+ Perl_magic_clearpack,
+ 0,
+ 0,
+ 0,
+ 0
+);
+
+MGVTBL_SET(
+ PL_vtbl_dbline,
+ 0,
+ Perl_magic_setdbline,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0
+);
+
+MGVTBL_SET(
+ PL_vtbl_isa,
+ 0,
+ Perl_magic_setisa,
+ 0,
+ Perl_magic_clearisa,
+ 0,
+ 0,
+ 0,
+ 0
+);
+
+MGVTBL_SET(
+ PL_vtbl_isaelem,
+ 0,
+ Perl_magic_setisa,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0
+);
+
+MGVTBL_SET_CONST_MAGIC_GET(
+ PL_vtbl_arylen,
+ Perl_magic_getarylen,
+ Perl_magic_setarylen,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0
+);
+
+MGVTBL_SET(
+ PL_vtbl_arylen_p,
+ 0,
+ 0,
+ 0,
+ 0,
+ Perl_magic_freearylen_p,
+ 0,
+ 0,
+ 0
+);
+
+MGVTBL_SET(
+ PL_vtbl_mglob,
+ 0,
+ Perl_magic_setmglob,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0
+);
+
+MGVTBL_SET(
+ PL_vtbl_nkeys,
+ Perl_magic_getnkeys,
+ Perl_magic_setnkeys,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0
+);
+
+MGVTBL_SET(
+ PL_vtbl_taint,
+ Perl_magic_gettaint,
+ Perl_magic_settaint,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0
+);
+
+MGVTBL_SET(
+ PL_vtbl_substr,
+ Perl_magic_getsubstr,
+ Perl_magic_setsubstr,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0
+);
+
+MGVTBL_SET(
+ PL_vtbl_vec,
+ Perl_magic_getvec,
+ Perl_magic_setvec,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0
+);
+
+MGVTBL_SET(
+ PL_vtbl_pos,
+ Perl_magic_getpos,
+ Perl_magic_setpos,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0
+);
+
+MGVTBL_SET(
+ PL_vtbl_bm,
+ 0,
+ Perl_magic_setregexp,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0
+);
+
+MGVTBL_SET(
+ PL_vtbl_fm,
+ 0,
+ Perl_magic_setregexp,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0
+);
+
+MGVTBL_SET(
+ PL_vtbl_uvar,
+ Perl_magic_getuvar,
+ Perl_magic_setuvar,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0
+);
+
+MGVTBL_SET(
+ PL_vtbl_defelem,
+ Perl_magic_getdefelem,
+ Perl_magic_setdefelem,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0
+);
+
+MGVTBL_SET(
+ PL_vtbl_regexp,
+ 0,
+ Perl_magic_setregexp,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0
+);
+
+MGVTBL_SET(
+ PL_vtbl_regdata,
+ 0,
+ 0,
+ Perl_magic_regdata_cnt,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0
+);
+
+MGVTBL_SET(
+ PL_vtbl_regdatum,
+ Perl_magic_regdatum_get,
+ Perl_magic_regdatum_set,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0
+);
+
+MGVTBL_SET(
+ PL_vtbl_amagic,
+ 0,
+ Perl_magic_setamagic,
+ 0,
+ 0,
+ Perl_magic_setamagic,
+ 0,
+ 0,
+ 0
+);
+
+MGVTBL_SET(
+ PL_vtbl_amagicelem,
+ 0,
+ Perl_magic_setamagic,
+ 0,
+ 0,
+ Perl_magic_setamagic,
+ 0,
+ 0,
+ 0
+);
+
+MGVTBL_SET(
+ PL_vtbl_backref,
+ 0,
+ 0,
+ 0,
+ 0,
+ Perl_magic_killbackrefs,
+ 0,
+ 0,
+ 0
+);
+
+MGVTBL_SET(
+ PL_vtbl_ovrld,
+ 0,
+ 0,
+ 0,
+ 0,
+ Perl_magic_freeovrld,
+ 0,
+ 0,
+ 0
+);
+
+MGVTBL_SET(
+ PL_vtbl_utf8,
+ 0,
+ Perl_magic_setutf8,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0
+);
+
+#ifdef USE_LOCALE_COLLATE
+MGVTBL_SET(
+ PL_vtbl_collxfrm,
+ 0,
+ Perl_magic_setcollxfrm,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0
+);
+#endif
+
+MGVTBL_SET(
+ PL_vtbl_hintselem,
+ 0,
+ Perl_magic_sethint,
+ 0,
+ Perl_magic_clearhint,
+ 0,
+ 0,
+ 0,
+ 0
+);
+
+MGVTBL_SET(
+ PL_vtbl_hints,
+ 0,
+ 0,
+ 0,
+ Perl_magic_clearhints,
+ 0,
+ 0,
+ 0,
+ 0
+);
+
+
+/* ex: set ro: */
diff --git a/perl.h b/perl.h
index e0adc105de..71ef2f57c0 100644
--- a/perl.h
+++ b/perl.h
@@ -5118,411 +5118,7 @@ START_EXTERN_C
# define MGVTBL_SET_CONST_MAGIC_GET(var,a,b,c,d,e,f,g,h) EXT_MGVTBL var
#endif
-/* These all need to be 0, not NULL, as NULL can be (void*)0, which is a
- * pointer to data, whereas we're assigning pointers to functions, which are
- * not the same beast. ANSI doesn't allow the assignment from one to the other.
- * (although most, but not all, compilers are prepared to do it)
- */
-
-/* args are:
- vtable
- get
- set
- len
- clear
- free
- copy
- dup
- local
-*/
-
-MGVTBL_SET(
- PL_vtbl_sv,
- Perl_magic_get,
- Perl_magic_set,
- Perl_magic_len,
- 0,
- 0,
- 0,
- 0,
- 0
-);
-
-MGVTBL_SET(
- PL_vtbl_env,
- 0,
- Perl_magic_set_all_env,
- 0,
- Perl_magic_clear_all_env,
- 0,
- 0,
- 0,
- 0
-);
-
-MGVTBL_SET(
- PL_vtbl_envelem,
- 0,
- Perl_magic_setenv,
- 0,
- Perl_magic_clearenv,
- 0,
- 0,
- 0,
- 0
-);
-
-#ifndef PERL_MICRO
-MGVTBL_SET(
- PL_vtbl_sigelem,
- Perl_magic_getsig,
- Perl_magic_setsig,
- 0,
- Perl_magic_clearsig,
- 0,
- 0,
- 0,
- 0
-);
-#endif
-
-MGVTBL_SET(
- PL_vtbl_pack,
- 0,
- 0,
- Perl_magic_sizepack,
- Perl_magic_wipepack,
- 0,
- 0,
- 0,
- 0
-);
-
-MGVTBL_SET(
- PL_vtbl_packelem,
- Perl_magic_getpack,
- Perl_magic_setpack,
- 0,
- Perl_magic_clearpack,
- 0,
- 0,
- 0,
- 0
-);
-
-MGVTBL_SET(
- PL_vtbl_dbline,
- 0,
- Perl_magic_setdbline,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
-);
-
-MGVTBL_SET(
- PL_vtbl_isa,
- 0,
- Perl_magic_setisa,
- 0,
- Perl_magic_clearisa,
- 0,
- 0,
- 0,
- 0
-);
-
-MGVTBL_SET(
- PL_vtbl_isaelem,
- 0,
- Perl_magic_setisa,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
-);
-
-MGVTBL_SET_CONST_MAGIC_GET(
- PL_vtbl_arylen,
- Perl_magic_getarylen,
- Perl_magic_setarylen,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
-);
-
-MGVTBL_SET(
- PL_vtbl_arylen_p,
- 0,
- 0,
- 0,
- 0,
- Perl_magic_freearylen_p,
- 0,
- 0,
- 0
-);
-
-MGVTBL_SET(
- PL_vtbl_mglob,
- 0,
- Perl_magic_setmglob,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
-);
-
-MGVTBL_SET(
- PL_vtbl_nkeys,
- Perl_magic_getnkeys,
- Perl_magic_setnkeys,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
-);
-
-MGVTBL_SET(
- PL_vtbl_taint,
- Perl_magic_gettaint,
- Perl_magic_settaint,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
-);
-
-MGVTBL_SET(
- PL_vtbl_substr,
- Perl_magic_getsubstr,
- Perl_magic_setsubstr,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
-);
-
-MGVTBL_SET(
- PL_vtbl_vec,
- Perl_magic_getvec,
- Perl_magic_setvec,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
-);
-
-MGVTBL_SET(
- PL_vtbl_pos,
- Perl_magic_getpos,
- Perl_magic_setpos,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
-);
-
-MGVTBL_SET(
- PL_vtbl_bm,
- 0,
- Perl_magic_setregexp,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
-);
-
-MGVTBL_SET(
- PL_vtbl_fm,
- 0,
- Perl_magic_setregexp,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
-);
-
-MGVTBL_SET(
- PL_vtbl_uvar,
- Perl_magic_getuvar,
- Perl_magic_setuvar,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
-);
-
-MGVTBL_SET(
- PL_vtbl_defelem,
- Perl_magic_getdefelem,
- Perl_magic_setdefelem,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
-);
-
-MGVTBL_SET(
- PL_vtbl_regexp,
- 0,
- Perl_magic_setregexp,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
-);
-
-MGVTBL_SET(
- PL_vtbl_regdata,
- 0,
- 0,
- Perl_magic_regdata_cnt,
- 0,
- 0,
- 0,
- 0,
- 0
-);
-
-MGVTBL_SET(
- PL_vtbl_regdatum,
- Perl_magic_regdatum_get,
- Perl_magic_regdatum_set,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
-);
-
-MGVTBL_SET(
- PL_vtbl_amagic,
- 0,
- Perl_magic_setamagic,
- 0,
- 0,
- Perl_magic_setamagic,
- 0,
- 0,
- 0
-);
-
-MGVTBL_SET(
- PL_vtbl_amagicelem,
- 0,
- Perl_magic_setamagic,
- 0,
- 0,
- Perl_magic_setamagic,
- 0,
- 0,
- 0
-);
-
-MGVTBL_SET(
- PL_vtbl_backref,
- 0,
- 0,
- 0,
- 0,
- Perl_magic_killbackrefs,
- 0,
- 0,
- 0
-);
-
-MGVTBL_SET(
- PL_vtbl_ovrld,
- 0,
- 0,
- 0,
- 0,
- Perl_magic_freeovrld,
- 0,
- 0,
- 0
-);
-
-MGVTBL_SET(
- PL_vtbl_utf8,
- 0,
- Perl_magic_setutf8,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
-);
-#ifdef USE_LOCALE_COLLATE
-MGVTBL_SET(
- PL_vtbl_collxfrm,
- 0,
- Perl_magic_setcollxfrm,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
-);
-#endif
-
-MGVTBL_SET(
- PL_vtbl_hintselem,
- 0,
- Perl_magic_sethint,
- 0,
- Perl_magic_clearhint,
- 0,
- 0,
- 0,
- 0
-);
-
-MGVTBL_SET(
- PL_vtbl_hints,
- 0,
- 0,
- 0,
- Perl_magic_clearhints,
- 0,
- 0,
- 0,
- 0
-);
-
+#include "mg_vtable.h"
#include "overload.h"
END_EXTERN_C
diff --git a/regen.pl b/regen.pl
index 14ef1475c8..1f2a583ed0 100644
--- a/regen.pl
+++ b/regen.pl
@@ -16,6 +16,7 @@ use strict;
# Which scripts to run.
my @scripts = qw(
+mg_vtable.pl
opcode.pl
overload.pl
reentr.pl
diff --git a/regen/mg_vtable.pl b/regen/mg_vtable.pl
new file mode 100644
index 0000000000..d3557ec43b
--- /dev/null
+++ b/regen/mg_vtable.pl
@@ -0,0 +1,102 @@
+#!/usr/bin/perl -w
+#
+# Regenerate (overwriting only if changed):
+#
+# mg_vtable.h
+#
+# from information stored in this file.
+#
+# Accepts the standard regen_lib -q and -v args.
+#
+# This script is normally invoked from regen.pl.
+
+use strict;
+require 5.004;
+
+BEGIN {
+ # Get function prototypes
+ require 'regen/regen_lib.pl';
+}
+
+my @sig =
+ (
+ 'sv' => {get => 'get', set => 'set', len => 'len'},
+ 'env' => {set => 'set_all_env', clear => 'clear_all_env'},
+ 'envelem' => {set => 'setenv', clear => 'clearenv'},
+ 'sigelem' => {get => 'getsig', set => 'setsig', clear => 'clearsig',
+ cond => '#ifndef PERL_MICRO'},
+ 'pack' => {len => 'sizepack', clear => 'wipepack'},
+ 'packelem' => {get => 'getpack', set => 'setpack', clear => 'clearpack'},
+ 'dbline' => {set => 'setdbline'},
+ 'isa' => {set => 'setisa', clear => 'clearisa'},
+ 'isaelem' => {set => 'setisa'},
+ 'arylen' => {get => 'getarylen', set => 'setarylen', const => 1},
+ 'arylen_p' => {free => 'freearylen_p'},
+ 'mglob' => {set => 'setmglob'},
+ 'nkeys' => {get => 'getnkeys', set => 'setnkeys'},
+ 'taint' => {get => 'gettaint', set => 'settaint'},
+ 'substr' => {get => 'getsubstr', set => 'setsubstr'},
+ 'vec' => {get => 'getvec', set => 'setvec'},
+ 'pos' => {get => 'getpos', set => 'setpos'},
+ 'bm' => {set => 'setregexp'},
+ 'fm' => {set => 'setregexp'},
+ 'uvar' => {get => 'getuvar', set => 'setuvar'},
+ 'defelem' => {get => 'getdefelem', set => 'setdefelem'},
+ 'regexp' => {set => 'setregexp'},
+ 'regdata' => {len => 'regdata_cnt'},
+ 'regdatum' => {get => 'regdatum_get', set => 'regdatum_set'},
+ 'amagic' => {set => 'setamagic', free => 'setamagic'},
+ 'amagicelem' => {set => 'setamagic', free => 'setamagic'},
+ 'backref' => {free => 'killbackrefs'},
+ 'ovrld' => {free => 'freeovrld'},
+ 'utf8' => {set => 'setutf8'},
+ 'collxfrm' => {set => 'setcollxfrm',
+ cond => '#ifdef USE_LOCALE_COLLATE'},
+ 'hintselem' => {set => 'sethint', clear => 'clearhint'},
+ 'hints' => {clear => 'clearhints'},
+);
+
+my $h = open_new('mg_vtable.h', '>',
+ { by => 'regen/mg_vtable.pl', file => 'mg_vtable.h',
+ style => '*' });
+
+print $h <<'EOH';
+/* These all need to be 0, not NULL, as NULL can be (void*)0, which is a
+ * pointer to data, whereas we're assigning pointers to functions, which are
+ * not the same beast. ANSI doesn't allow the assignment from one to the other.
+ * (although most, but not all, compilers are prepared to do it)
+ */
+
+/* args are:
+ vtable
+ get
+ set
+ len
+ clear
+ free
+ copy
+ dup
+ local
+*/
+
+EOH
+
+while (my ($name, $data) = splice @sig, 0, 2) {
+ my $funcs = join ",\n ", 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';
+
+ print $h "$data->{cond}\n" if $data->{cond};
+ print $h <<"EOT";
+$set_macro(
+ PL_vtbl_$name,
+ $funcs
+);
+EOT
+ print $h "#endif\n" if $data->{cond};
+ print $h "\n";
+}
+
+read_only_bottom_close_and_rename($h);
diff --git a/t/porting/regen.t b/t/porting/regen.t
index 78d0599660..0e052dd853 100644
--- a/t/porting/regen.t
+++ b/t/porting/regen.t
@@ -27,7 +27,7 @@ if ( $^O eq "VMS" ) {
skip_all( "- regen.pl needs porting." );
}
-my $in_regen_pl = 17; # I can't see a clean way to calculate this automatically.
+my $in_regen_pl = 18; # I can't see a clean way to calculate this automatically.
my @files = qw(perly.act perly.h perly.tab keywords.c keywords.h uconfig.h);
my @progs = qw(Porting/makemeta regen/regcharclass.pl regen/mk_PL_charclass.pl);
diff --git a/vms/descrip_mms.template b/vms/descrip_mms.template
index f0220a72f0..31faefb7ee 100644
--- a/vms/descrip_mms.template
+++ b/vms/descrip_mms.template
@@ -301,9 +301,9 @@ obj = $(obj0) $(obj1) $(obj2) $(obj3) $(obj4)
h0 = av.h config.h cop.h cv.h embed.h embedvar.h
h1 = EXTERN.h form.h gv.h handy.h hv.h l1_char_class_tab.h INTERN.h intrpvar.h
-h2 = iperlsys.h keywords.h mydtrace.h mg.h nostdio.h op.h op_reg_common.h
-h3 = opcode.h opnames.h overload.h pad.h parser.h patchlevel.h perl.h
-h4 = perlapi.h perlio.h perlsdio.h perlvars.h perly.h
+h2 = iperlsys.h keywords.h mydtrace.h mg.h mg_vtable.h nostdio.h op.h
+h3 = op_reg_common.h opcode.h opnames.h overload.h pad.h parser.h patchlevel.h
+h4 = perl.h perlapi.h perlio.h perlsdio.h perlvars.h perly.h
h5 = pp.h pp_proto.h proto.h regcomp.h regexp.h regnodes.h scope.h
h5 = sv.h thread.h utf8.h util.h vmsish.h warnings.h
h7 = xsub.h $(SOCKH) $(THREADH)
@@ -314,7 +314,7 @@ ac1 = $(ARCHCORE)config.h $(ARCHCORE)cop.h $(ARCHCORE)cv.h $(ARCHCORE)embed.h
ac2 = $(ARCHCORE)embedvar.h $(ARCHCORE)EXTERN.h $(ARCHCORE)fakethr.h
ac3 = $(ARCHCORE)form.h $(ARCHCORE)git_version.h $(ARCHCORE)gv.h $(ARCHCORE)handy.h $(ARCHCORE)hv.h
ac4 = $(ARCHCORE)l1_char_class_tab.h $(ARCHCORE)INTERN.h $(ARCHCORE)intrpvar.h $(ARCHCORE)iperlsys.h
-ac5 = $(ARCHCORE)keywords.h $(ARCHCORE)mydtrace.h $(ARCHCORE)mg.h $(ARCHCORE)nostdio.h
+ac5 = $(ARCHCORE)keywords.h $(ARCHCORE)mydtrace.h $(ARCHCORE)mg.h $(ARCHCORE)mg_vtable.h $(ARCHCORE)nostdio.h
ac6 = $(ARCHCORE)op_reg_common.h $(ARCHCORE)op.h $(ARCHCORE)opcode.h $(ARCHCORE)opnames.h
ac7 = $(ARCHCORE)overload.h $(ARCHCORE)pad.h $(ARCHCORE)parser.h $(ARCHCORE)patchlevel.h
ac8 = $(ARCHCORE)perl.h $(ARCHCORE)perlapi.h $(ARCHCORE)perlio.h $(ARCHCORE)perlsdio.h
@@ -1624,6 +1624,9 @@ $(ARCHCORE)mydtrace.h : mydtrace.h
$(ARCHCORE)mg.h : mg.h
@ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
Copy/NoConfirm/Log $(MMS$SOURCE) $(ARCHCORE)
+$(ARCHCORE)mg_vtable.h : mg_vtable.h
+ @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+ Copy/NoConfirm/Log $(MMS$SOURCE) $(ARCHCORE)
$(ARCHCORE)nostdio.h : nostdio.h
@ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
Copy/NoConfirm/Log $(MMS$SOURCE) $(ARCHCORE)