3 require 5.003; # keep this compatible, an old perl is all we may have before
9 # Get function prototypes
10 require 'regen_lib.pl';
13 my $SPLINT = 0; # Turn true for experimental splint support http://www.splint.org
16 # See database of global and static function prototypes in embed.fnc
17 # This is used to generate prototype headers under various configurations,
18 # export symbols lists for different platforms, and macros to provide an
19 # implicit interpreter context argument.
26 my $years = '1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007';
28 $years =~ s/1999,/1999,\n / if length $years > 40;
31 -*- buffer-read-only: t -*-
35 Copyright (C) $years, by Larry Wall and others
37 You may distribute under the terms of either the GNU General Public
38 License or the Artistic License, as specified in the README file.
40 !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
41 This file is built by embed.pl from data in embed.fnc, embed.pl,
42 pp.sym, intrpvar.h, and perlvars.h.
43 Any changes made here will be lost!
45 Edit those files and run 'make regen_headers' to effect changes.
49 $warning .= <<EOW if $file eq 'perlapi.c';
51 Up to the threshold of the door there mounted a flight of twenty-seven
52 broad stairs, hewn by some unknown art of the same black stone. This
53 was the only entrance to the tower.
58 if ($file =~ m:\.[ch]$:) {
59 $warning =~ s:^: * :gm;
60 $warning =~ s: +$::gm;
65 $warning =~ s:^:# :gm;
66 $warning =~ s: +$::gm;
71 open IN, "embed.fnc" or die $!;
73 # walk table providing an array of components in each line to
74 # subroutine, printing the result
77 my $filename = shift || '-';
79 defined $leader or $leader = do_not_edit ($filename);
82 if (ref $filename) { # filehandle
86 # safer_unlink $filename if $filename ne '/dev/null';
87 $F = safer_open("$filename-new");
89 print $F $leader if $leader;
90 seek IN, 0, 0; # so we may restart
104 @args = split /\s*\|\s*/, $_;
106 my @outs = &{$function}(@args);
107 print $F @outs; # $function->(@args) is not 5.003
109 print $F $trailer if $trailer;
110 unless (ref $filename) {
112 rename_if_different("$filename-new", $filename);
116 sub munge_c_files () {
119 warn "\@ARGV empty, nothing to do\n";
124 $functions->{$_[2]} = \@_ if $_[@_-1] =~ /\.\.\./;
126 } '/dev/null', '', '';
129 s{(\b(\w+)[ \t]*\([ \t]*(?!aTHX))}
133 if (exists $functions->{$f}) {
135 warn("$ARGV:$.:$`#$repl#$'");
140 close ARGV if eof; # restart $.
148 my $wrote_protected = 0;
157 my ($flags,$retval,$plain_func,@args) = @_;
159 my $has_context = ( $flags !~ /n/ );
160 my $never_returns = ( $flags =~ /r/ );
161 my $commented_out = ( $flags =~ /m/ );
162 my $is_malloc = ( $flags =~ /a/ );
163 my $can_ignore = ( $flags !~ /R/ ) && !$is_malloc;
167 my $splint_flags = "";
168 if ( $SPLINT && !$commented_out ) {
169 $splint_flags .= '/*@noreturn@*/ ' if $never_returns;
170 if ($can_ignore && ($retval ne 'void') && ($retval !~ /\*/)) {
171 $retval .= " /*\@alt void\@*/";
176 $retval = "STATIC $splint_flags$retval";
177 $func = "S_$plain_func";
180 $retval = "PERL_CALLCONV $splint_flags$retval";
181 if ($flags =~ /[bp]/) {
182 $func = "Perl_$plain_func";
187 $ret .= "$retval\t$func(";
188 if ( $has_context ) {
189 $ret .= @args ? "pTHX_ " : "pTHX";
193 for my $arg ( @args ) {
195 if ( $arg =~ /\*/ && $arg !~ /\b(NN|NULLOK)\b/ ) {
196 warn "$func: $arg needs NN or NULLOK\n";
197 our $unflagged_pointers;
198 ++$unflagged_pointers;
200 my $nn = ( $arg =~ s/\s*\bNN\b\s+// );
201 push( @nonnull, $n ) if $nn;
203 my $nullok = ( $arg =~ s/\s*\bNULLOK\b\s+// ); # strip NULLOK with no effect
205 # Make sure each arg has at least a type and a var name.
206 # An arg of "int" is valid C, but want it to be "int foo".
208 $temp_arg =~ s/\*//g;
209 $temp_arg =~ s/\s*\bstruct\b\s*/ /g;
210 if ( ($temp_arg ne "...")
211 && ($temp_arg !~ /\w+\s+(\w+)(?:\[\d+\])?\s*$/) ) {
212 warn "$func: $arg ($n) doesn't have a name\n";
214 if ( $SPLINT && $nullok && !$commented_out ) {
215 $arg = '/*@null@*/ ' . $arg;
217 if (defined $1 && $nn) {
218 push @names_of_nn, $1;
221 $ret .= join ", ", @args;
224 $ret .= "void" if !$has_context;
228 if ( $flags =~ /r/ ) {
229 push @attrs, "__attribute__noreturn__";
232 push @attrs, "__attribute__malloc__";
234 if ( !$can_ignore ) {
235 push @attrs, "__attribute__warn_unused_result__";
237 if ( $flags =~ /P/ ) {
238 push @attrs, "__attribute__pure__";
240 if( $flags =~ /f/ ) {
241 my $prefix = $has_context ? 'pTHX_' : '';
242 my $args = scalar @args;
244 my $macro = @nonnull && $nonnull[-1] == $pat
245 ? '__attribute__format__'
246 : '__attribute__format__null_ok__';
247 push @attrs, sprintf "%s(__printf__,%s%d,%s%d)", $macro,
248 $prefix, $pat, $prefix, $args;
251 my @pos = map { $has_context ? "pTHX_$_" : $_ } @nonnull;
252 push @attrs, map { sprintf( "__attribute__nonnull__(%s)", $_ ) } @pos;
256 $ret .= join( "\n", map { "\t\t\t$_" } @attrs );
259 $ret = "/* $ret */" if $commented_out;
261 $ret .= "\n#define PERL_ARGS_ASSERT_\U$plain_func\E\t\\\n\t"
262 . join '; ', map "assert($_)", @names_of_nn;
264 $ret .= @attrs ? "\n\n" : "\n";
269 # generates global.sym (API export list)
272 sub write_global_sym {
275 my ($flags,$retval,$func,@args) = @_;
276 # If a function is defined twice, for example before and after an
277 # #else, only process the flags on the first instance for global.sym
278 return $ret if $seen{$func}++;
279 if ($flags =~ /[AX]/ && $flags !~ /[xm]/
280 || $flags =~ /b/) { # public API, so export
281 $func = "Perl_$func" if $flags =~ /[pbX]/;
290 our $unflagged_pointers;
291 walk_table(\&write_protos, "proto.h", undef, "/* ex: set ro: */\n");
292 warn "$unflagged_pointers pointer arguments to clean up\n" if $unflagged_pointers;
293 walk_table(\&write_global_sym, "global.sym", undef, "# ex: set ro:\n");
295 # XXX others that may need adding
299 my @extvars = qw(sv_undef sv_yes sv_no na dowarn
301 tainting tainted stack_base stack_sp sv_arenaroot
303 curstash DBsub DBsingle DBassertion debstash
317 my ($syms, $file) = @_;
319 open(FILE, "< $file")
320 or die "embed.pl: Can't open $file: $!\n";
322 s/[ \t]*#.*//; # Delete comments.
323 if (/^\s*(\S+)\s*$/) {
325 warn "duplicate symbol $sym while processing $file line $.\n"
326 if exists $$syms{$sym};
333 # Perl_pp_* and Perl_ck_* are in pp.sym
334 readsyms my %ppsym, 'pp.sym';
336 sub readvars(\%$$@) {
337 my ($syms, $file,$pre,$keep_pre) = @_;
339 open(FILE, "< $file")
340 or die "embed.pl: Can't open $file: $!\n";
342 s/[ \t]*#.*//; # Delete comments.
343 if (/PERLVARA?I?S?C?\($pre(\w+)/) {
345 $sym = $pre . $sym if $keep_pre;
346 warn "duplicate symbol $sym while processing $file line $.\n"
347 if exists $$syms{$sym};
348 $$syms{$sym} = $pre || 1;
357 readvars %intrp, 'intrpvar.h','I';
358 readvars %globvar, 'perlvars.h','G';
368 my ($from, $to) = @_;
369 my $t = int(length($from) / 8);
370 "#define $from" . "\t" x ($t < 3 ? 3 - $t : 1) . "$to\n";
373 sub bincompat_var ($$) {
374 my ($pfx, $sym) = @_;
375 my $arg = ($pfx eq 'G' ? 'NULL' : 'aTHX');
376 undefine("PL_$sym") . hide("PL_$sym", "(*Perl_${pfx}${sym}_ptr($arg))");
380 my ($sym,$pre,$ptr) = @_;
381 hide("PL_$sym", "($ptr$pre$sym)");
386 return hide("PL_$pre$sym", "PL_$sym");
389 my $em = safer_open('embed.h-new');
391 print $em do_not_edit ("embed.h"), <<'END';
393 /* (Doing namespace management portably in C is really gross.) */
395 /* By defining PERL_NO_SHORT_NAMES (not done by default) the short forms
396 * (like warn instead of Perl_warn) for the API are not defined.
397 * Not defining the short forms is a good thing for cleaner embedding. */
399 #ifndef PERL_NO_SHORT_NAMES
401 /* Hide global symbols */
403 #if !defined(PERL_IMPLICIT_CONTEXT)
407 # Try to elimiate lots of repeated
414 # by tracking state and merging foo and bar into one block.
415 my $ifdef_state = '';
419 my $new_ifdef_state = '';
422 $ret .= "$arg\n" if $arg =~ /^#\s*(if|ifn?def|else|endif)\b/;
425 my ($flags,$retval,$func,@args) = @_;
426 unless ($flags =~ /[om]/) {
428 $ret .= hide($func,"S_$func");
430 elsif ($flags =~ /p/) {
431 $ret .= hide($func,"Perl_$func");
434 if ($ret ne '' && $flags !~ /A/) {
437 = "#if defined(PERL_CORE) || defined(PERL_EXT)\n";
440 $new_ifdef_state = "#ifdef PERL_CORE\n";
443 if ($new_ifdef_state ne $ifdef_state) {
444 $ret = $new_ifdef_state . $ret;
448 if ($ifdef_state && $new_ifdef_state ne $ifdef_state) {
449 # Close the old one ahead of opening the new one.
450 $ret = "#endif\n$ret";
452 # Remember the new state.
453 $ifdef_state = $new_ifdef_state;
458 print $em "#endif\n";
461 for $sym (sort keys %ppsym) {
463 print $em hide($sym, "Perl_$sym");
468 #else /* PERL_IMPLICIT_CONTEXT */
477 my $new_ifdef_state = '';
480 $ret .= "$arg\n" if $arg =~ /^#\s*(if|ifn?def|else|endif)\b/;
483 my ($flags,$retval,$func,@args) = @_;
484 unless ($flags =~ /[om]/) {
485 my $args = scalar @args;
486 if ($args and $args[$args-1] =~ /\.\.\./) {
487 # we're out of luck for varargs functions under CPP
489 elsif ($flags =~ /n/) {
491 $ret .= hide($func,"S_$func");
493 elsif ($flags =~ /p/) {
494 $ret .= hide($func,"Perl_$func");
498 my $alist = join(",", @az[0..$args-1]);
499 $ret = "#define $func($alist)";
500 my $t = int(length($ret) / 8);
501 $ret .= "\t" x ($t < 4 ? 4 - $t : 1);
503 $ret .= "S_$func(aTHX";
505 elsif ($flags =~ /p/) {
506 $ret .= "Perl_$func(aTHX";
508 $ret .= "_ " if $alist;
509 $ret .= $alist . ")\n";
512 unless ($flags =~ /A/) {
515 = "#if defined(PERL_CORE) || defined(PERL_EXT)\n";
518 $new_ifdef_state = "#ifdef PERL_CORE\n";
521 if ($new_ifdef_state ne $ifdef_state) {
522 $ret = $new_ifdef_state . $ret;
526 if ($ifdef_state && $new_ifdef_state ne $ifdef_state) {
527 # Close the old one ahead of opening the new one.
528 $ret = "#endif\n$ret";
530 # Remember the new state.
531 $ifdef_state = $new_ifdef_state;
536 print $em "#endif\n";
539 for $sym (sort keys %ppsym) {
541 if ($sym =~ /^ck_/) {
542 print $em hide("$sym(a)", "Perl_$sym(aTHX_ a)");
544 elsif ($sym =~ /^pp_/) {
545 print $em hide("$sym()", "Perl_$sym(aTHX)");
548 warn "Illegal symbol '$sym' in pp.sym";
554 #endif /* PERL_IMPLICIT_CONTEXT */
556 #endif /* #ifndef PERL_NO_SHORT_NAMES */
562 /* Compatibility stubs. Compile extensions with -DPERL_NOCOMPAT to
566 #if !defined(PERL_CORE)
567 # define sv_setptrobj(rv,ptr,name) sv_setref_iv(rv,name,PTR2IV(ptr))
568 # define sv_setptrref(rv,ptr) sv_setref_iv(rv,NULL,PTR2IV(ptr))
571 #if !defined(PERL_CORE) && !defined(PERL_NOCOMPAT)
573 /* Compatibility for various misnamed functions. All functions
574 in the API that begin with "perl_" (not "Perl_") take an explicit
575 interpreter context pointer.
576 The following are not like that, but since they had a "perl_"
577 prefix in previous versions, we provide compatibility macros.
579 # define perl_atexit(a,b) call_atexit(a,b)
580 # define perl_call_argv(a,b,c) call_argv(a,b,c)
581 # define perl_call_pv(a,b) call_pv(a,b)
582 # define perl_call_method(a,b) call_method(a,b)
583 # define perl_call_sv(a,b) call_sv(a,b)
584 # define perl_eval_sv(a,b) eval_sv(a,b)
585 # define perl_eval_pv(a,b) eval_pv(a,b)
586 # define perl_require_pv(a) require_pv(a)
587 # define perl_get_sv(a,b) get_sv(a,b)
588 # define perl_get_av(a,b) get_av(a,b)
589 # define perl_get_hv(a,b) get_hv(a,b)
590 # define perl_get_cv(a,b) get_cv(a,b)
591 # define perl_init_i18nl10n(a) init_i18nl10n(a)
592 # define perl_init_i18nl14n(a) init_i18nl14n(a)
593 # define perl_new_ctype(a) new_ctype(a)
594 # define perl_new_collate(a) new_collate(a)
595 # define perl_new_numeric(a) new_numeric(a)
597 /* varargs functions can't be handled with CPP macros. :-(
598 This provides a set of compatibility functions that don't take
599 an extra argument but grab the context pointer using the macro
602 #if defined(PERL_IMPLICIT_CONTEXT) && !defined(PERL_NO_SHORT_NAMES)
603 # define croak Perl_croak_nocontext
604 # define deb Perl_deb_nocontext
605 # define die Perl_die_nocontext
606 # define form Perl_form_nocontext
607 # define load_module Perl_load_module_nocontext
608 # define mess Perl_mess_nocontext
609 # define newSVpvf Perl_newSVpvf_nocontext
610 # define sv_catpvf Perl_sv_catpvf_nocontext
611 # define sv_setpvf Perl_sv_setpvf_nocontext
612 # define warn Perl_warn_nocontext
613 # define warner Perl_warner_nocontext
614 # define sv_catpvf_mg Perl_sv_catpvf_mg_nocontext
615 # define sv_setpvf_mg Perl_sv_setpvf_mg_nocontext
618 #endif /* !defined(PERL_CORE) && !defined(PERL_NOCOMPAT) */
620 #if !defined(PERL_IMPLICIT_CONTEXT)
621 /* undefined symbols, point them back at the usual ones */
622 # define Perl_croak_nocontext Perl_croak
623 # define Perl_die_nocontext Perl_die
624 # define Perl_deb_nocontext Perl_deb
625 # define Perl_form_nocontext Perl_form
626 # define Perl_load_module_nocontext Perl_load_module
627 # define Perl_mess_nocontext Perl_mess
628 # define Perl_newSVpvf_nocontext Perl_newSVpvf
629 # define Perl_sv_catpvf_nocontext Perl_sv_catpvf
630 # define Perl_sv_setpvf_nocontext Perl_sv_setpvf
631 # define Perl_warn_nocontext Perl_warn
632 # define Perl_warner_nocontext Perl_warner
633 # define Perl_sv_catpvf_mg_nocontext Perl_sv_catpvf_mg
634 # define Perl_sv_setpvf_mg_nocontext Perl_sv_setpvf_mg
641 rename_if_different('embed.h-new', 'embed.h');
643 $em = safer_open('embedvar.h-new');
645 print $em do_not_edit ("embedvar.h"), <<'END';
647 /* (Doing namespace management portably in C is really gross.) */
650 The following combinations of MULTIPLICITY and PERL_IMPLICIT_CONTEXT
653 2) MULTIPLICITY # supported for compatibility
654 3) MULTIPLICITY && PERL_IMPLICIT_CONTEXT
656 All other combinations of these flags are errors.
658 only #3 is supported directly, while #2 is a special
659 case of #3 (supported by redefining vTHX appropriately).
662 #if defined(MULTIPLICITY)
663 /* cases 2 and 3 above */
665 # if defined(PERL_IMPLICIT_CONTEXT)
668 # define vTHX PERL_GET_INTERP
673 for $sym (sort keys %intrp) {
674 print $em multon($sym,'I','vTHX->');
679 #else /* !MULTIPLICITY */
685 for $sym (sort keys %intrp) {
686 print $em multoff($sym,'I');
695 #endif /* MULTIPLICITY */
697 #if defined(PERL_GLOBAL_STRUCT)
701 for $sym (sort keys %globvar) {
702 print $em multon($sym, 'G','my_vars->');
703 print $em multon("G$sym",'', 'my_vars->');
708 #else /* !PERL_GLOBAL_STRUCT */
712 for $sym (sort keys %globvar) {
713 print $em multoff($sym,'G');
718 #endif /* PERL_GLOBAL_STRUCT */
720 #ifdef PERL_POLLUTE /* disabled by default in 5.6.0 */
724 for $sym (sort @extvars) {
725 print $em hide($sym,"PL_$sym");
730 #endif /* PERL_POLLUTE */
736 rename_if_different('embedvar.h-new', 'embedvar.h');
738 my $capi = safer_open('perlapi.c-new');
739 my $capih = safer_open('perlapi.h-new');
741 print $capih do_not_edit ("perlapi.h"), <<'EOT';
743 /* declare accessor functions for Perl variables */
744 #ifndef __perlapi_h__
745 #define __perlapi_h__
747 #if defined (MULTIPLICITY)
756 #define PERLVAR(v,t) EXTERN_C t* Perl_##v##_ptr(pTHX);
757 #define PERLVARA(v,n,t) typedef t PL_##v##_t[n]; \
758 EXTERN_C PL_##v##_t* Perl_##v##_ptr(pTHX);
759 #define PERLVARI(v,t,i) PERLVAR(v,t)
760 #define PERLVARIC(v,t,i) PERLVAR(v, const t)
761 #define PERLVARISC(v,i) typedef const char PL_##v##_t[sizeof(i)]; \
762 EXTERN_C PL_##v##_t* Perl_##v##_ptr(pTHX);
764 #include "intrpvar.h"
765 #include "perlvars.h"
773 #ifndef PERL_GLOBAL_STRUCT
774 EXTERN_C Perl_ppaddr_t** Perl_Gppaddr_ptr(pTHX);
775 EXTERN_C Perl_check_t** Perl_Gcheck_ptr(pTHX);
776 EXTERN_C unsigned char** Perl_Gfold_locale_ptr(pTHX);
777 #define Perl_ppaddr_ptr Perl_Gppaddr_ptr
778 #define Perl_check_ptr Perl_Gcheck_ptr
779 #define Perl_fold_locale_ptr Perl_Gfold_locale_ptr
784 #if defined(PERL_CORE)
786 /* accessor functions for Perl variables (provide binary compatibility) */
788 /* these need to be mentioned here, or most linkers won't put them in
789 the perl executable */
791 #ifndef PERL_NO_FORCE_LINK
796 EXTCONST void * const PL_force_link_funcs[];
798 EXTCONST void * const PL_force_link_funcs[] = {
803 #define PERLVAR(v,t) (void*)Perl_##v##_ptr,
804 #define PERLVARA(v,n,t) PERLVAR(v,t)
805 #define PERLVARI(v,t,i) PERLVAR(v,t)
806 #define PERLVARIC(v,t,i) PERLVAR(v,t)
807 #define PERLVARISC(v,i) PERLVAR(v,char)
809 /* In Tru64 (__DEC && __osf__) the cc option -std1 causes that one
810 * cannot cast between void pointers and function pointers without
811 * info level warnings. The PL_force_link_funcs[] would cause a few
812 * hundred of those warnings. In code one can circumnavigate this by using
813 * unions that overlay the different pointers, but in declarations one
814 * cannot use this trick. Therefore we just disable the warning here
815 * for the duration of the PL_force_link_funcs[] declaration. */
817 #if defined(__DECC) && defined(__osf__)
819 #pragma message disable (nonstandcast)
822 #include "intrpvar.h"
823 #include "perlvars.h"
825 #if defined(__DECC) && defined(__osf__)
826 #pragma message restore
839 #endif /* PERL_NO_FORCE_LINK */
841 #else /* !PERL_CORE */
845 foreach $sym (sort keys %intrp) {
846 print $capih bincompat_var('I',$sym);
849 foreach $sym (sort keys %globvar) {
850 print $capih bincompat_var('G',$sym);
853 print $capih <<'EOT';
855 #endif /* !PERL_CORE */
856 #endif /* MULTIPLICITY */
858 #endif /* __perlapi_h__ */
863 rename_if_different('perlapi.h-new', 'perlapi.h');
865 print $capi do_not_edit ("perlapi.c"), <<'EOT';
871 #if defined (MULTIPLICITY)
873 /* accessor functions for Perl variables (provides binary compatibility) */
882 #define PERLVAR(v,t) t* Perl_##v##_ptr(pTHX) \
883 { dVAR; PERL_UNUSED_CONTEXT; return &(aTHX->v); }
884 #define PERLVARA(v,n,t) PL_##v##_t* Perl_##v##_ptr(pTHX) \
885 { dVAR; PERL_UNUSED_CONTEXT; return &(aTHX->v); }
887 #define PERLVARI(v,t,i) PERLVAR(v,t)
888 #define PERLVARIC(v,t,i) PERLVAR(v, const t)
889 #define PERLVARISC(v,i) PL_##v##_t* Perl_##v##_ptr(pTHX) \
890 { dVAR; PERL_UNUSED_CONTEXT; return &(aTHX->v); }
892 #include "intrpvar.h"
896 #define PERLVAR(v,t) t* Perl_##v##_ptr(pTHX) \
897 { dVAR; PERL_UNUSED_CONTEXT; return &(PL_##v); }
898 #define PERLVARA(v,n,t) PL_##v##_t* Perl_##v##_ptr(pTHX) \
899 { dVAR; PERL_UNUSED_CONTEXT; return &(PL_##v); }
902 #define PERLVARIC(v,t,i) \
903 const t* Perl_##v##_ptr(pTHX) \
904 { PERL_UNUSED_CONTEXT; return (const t *)&(PL_##v); }
905 #define PERLVARISC(v,i) PL_##v##_t* Perl_##v##_ptr(pTHX) \
906 { dVAR; PERL_UNUSED_CONTEXT; return &(PL_##v); }
907 #include "perlvars.h"
915 #ifndef PERL_GLOBAL_STRUCT
916 /* A few evil special cases. Could probably macrofy this. */
919 #undef PL_fold_locale
920 Perl_ppaddr_t** Perl_Gppaddr_ptr(pTHX) {
921 static Perl_ppaddr_t* const ppaddr_ptr = PL_ppaddr;
923 return (Perl_ppaddr_t**)&ppaddr_ptr;
925 Perl_check_t** Perl_Gcheck_ptr(pTHX) {
926 static Perl_check_t* const check_ptr = PL_check;
928 return (Perl_check_t**)&check_ptr;
930 unsigned char** Perl_Gfold_locale_ptr(pTHX) {
931 static unsigned char* const fold_locale_ptr = PL_fold_locale;
933 return (unsigned char**)&fold_locale_ptr;
939 #endif /* MULTIPLICITY */
945 rename_if_different('perlapi.c-new', 'perlapi.c');
947 # functions that take va_list* for implementing vararg functions
948 # NOTE: makedef.pl must be updated if you add symbols to %vfuncs
949 # XXX %vfuncs currently unused
951 Perl_croak Perl_vcroak
953 Perl_warner Perl_vwarner
956 Perl_load_module Perl_vload_module
959 Perl_newSVpvf Perl_vnewSVpvf
960 Perl_sv_setpvf Perl_sv_vsetpvf
961 Perl_sv_setpvf_mg Perl_sv_vsetpvf_mg
962 Perl_sv_catpvf Perl_sv_vcatpvf
963 Perl_sv_catpvf_mg Perl_sv_vcatpvf_mg
964 Perl_dump_indent Perl_dump_vindent
965 Perl_default_protect Perl_vdefault_protect
968 # ex: set ts=8 sts=4 sw=4 noet: