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, 2008';
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; ...
55 [p.577 of _The Lord of the Rings_, III/x: "The Voice of Saruman"]
60 if ($file =~ m:\.[ch]$:) {
61 $warning =~ s:^: * :gm;
62 $warning =~ s: +$::gm;
67 $warning =~ s:^:# :gm;
68 $warning =~ s: +$::gm;
73 open IN, "embed.fnc" or die $!;
75 # walk table providing an array of components in each line to
76 # subroutine, printing the result
79 my $filename = shift || '-';
81 defined $leader or $leader = do_not_edit ($filename);
84 if (ref $filename) { # filehandle
88 # safer_unlink $filename if $filename ne '/dev/null';
89 $F = safer_open("$filename-new");
91 print $F $leader if $leader;
92 seek IN, 0, 0; # so we may restart
106 @args = split /\s*\|\s*/, $_;
108 my @outs = &{$function}(@args);
109 print $F @outs; # $function->(@args) is not 5.003
111 print $F $trailer if $trailer;
112 unless (ref $filename) {
114 rename_if_different("$filename-new", $filename);
118 sub munge_c_files () {
121 warn "\@ARGV empty, nothing to do\n";
126 $functions->{$_[2]} = \@_ if $_[@_-1] =~ /\.\.\./;
128 } '/dev/null', '', '';
131 s{(\b(\w+)[ \t]*\([ \t]*(?!aTHX))}
135 if (exists $functions->{$f}) {
137 warn("$ARGV:$.:$`#$repl#$'");
142 close ARGV if eof; # restart $.
150 my $wrote_protected = 0;
159 my ($flags,$retval,$plain_func,@args) = @_;
161 my $has_context = ( $flags !~ /n/ );
162 my $never_returns = ( $flags =~ /r/ );
163 my $commented_out = ( $flags =~ /m/ );
164 my $is_malloc = ( $flags =~ /a/ );
165 my $can_ignore = ( $flags !~ /R/ ) && !$is_malloc;
169 my $splint_flags = "";
170 if ( $SPLINT && !$commented_out ) {
171 $splint_flags .= '/*@noreturn@*/ ' if $never_returns;
172 if ($can_ignore && ($retval ne 'void') && ($retval !~ /\*/)) {
173 $retval .= " /*\@alt void\@*/";
178 $retval = "STATIC $splint_flags$retval";
179 $func = "S_$plain_func";
182 $retval = "PERL_CALLCONV $splint_flags$retval";
183 if ($flags =~ /[bp]/) {
184 $func = "Perl_$plain_func";
189 $ret .= "$retval\t$func(";
190 if ( $has_context ) {
191 $ret .= @args ? "pTHX_ " : "pTHX";
195 for my $arg ( @args ) {
197 if ( $arg =~ /\*/ && $arg !~ /\b(NN|NULLOK)\b/ ) {
198 warn "$func: $arg needs NN or NULLOK\n";
199 our $unflagged_pointers;
200 ++$unflagged_pointers;
202 my $nn = ( $arg =~ s/\s*\bNN\b\s+// );
203 push( @nonnull, $n ) if $nn;
205 my $nullok = ( $arg =~ s/\s*\bNULLOK\b\s+// ); # strip NULLOK with no effect
207 # Make sure each arg has at least a type and a var name.
208 # An arg of "int" is valid C, but want it to be "int foo".
210 $temp_arg =~ s/\*//g;
211 $temp_arg =~ s/\s*\bstruct\b\s*/ /g;
212 if ( ($temp_arg ne "...")
213 && ($temp_arg !~ /\w+\s+(\w+)(?:\[\d+\])?\s*$/) ) {
214 warn "$func: $arg ($n) doesn't have a name\n";
216 if ( $SPLINT && $nullok && !$commented_out ) {
217 $arg = '/*@null@*/ ' . $arg;
219 if (defined $1 && $nn) {
220 push @names_of_nn, $1;
223 $ret .= join ", ", @args;
226 $ret .= "void" if !$has_context;
230 if ( $flags =~ /r/ ) {
231 push @attrs, "__attribute__noreturn__";
234 push @attrs, "__attribute__malloc__";
236 if ( !$can_ignore ) {
237 push @attrs, "__attribute__warn_unused_result__";
239 if ( $flags =~ /P/ ) {
240 push @attrs, "__attribute__pure__";
242 if( $flags =~ /f/ ) {
243 my $prefix = $has_context ? 'pTHX_' : '';
244 my $args = scalar @args;
246 my $macro = @nonnull && $nonnull[-1] == $pat
247 ? '__attribute__format__'
248 : '__attribute__format__null_ok__';
249 push @attrs, sprintf "%s(__printf__,%s%d,%s%d)", $macro,
250 $prefix, $pat, $prefix, $args;
253 my @pos = map { $has_context ? "pTHX_$_" : $_ } @nonnull;
254 push @attrs, map { sprintf( "__attribute__nonnull__(%s)", $_ ) } @pos;
258 $ret .= join( "\n", map { "\t\t\t$_" } @attrs );
261 $ret = "/* $ret */" if $commented_out;
263 $ret .= "\n#define PERL_ARGS_ASSERT_\U$plain_func\E\t\\\n\t"
264 . join '; ', map "assert($_)", @names_of_nn;
266 $ret .= @attrs ? "\n\n" : "\n";
271 # generates global.sym (API export list)
274 sub write_global_sym {
277 my ($flags,$retval,$func,@args) = @_;
278 # If a function is defined twice, for example before and after an
279 # #else, only process the flags on the first instance for global.sym
280 return $ret if $seen{$func}++;
281 if ($flags =~ /[AX]/ && $flags !~ /[xm]/
282 || $flags =~ /b/) { # public API, so export
283 $func = "Perl_$func" if $flags =~ /[pbX]/;
292 our $unflagged_pointers;
293 walk_table(\&write_protos, "proto.h", undef, "/* ex: set ro: */\n");
294 warn "$unflagged_pointers pointer arguments to clean up\n" if $unflagged_pointers;
295 walk_table(\&write_global_sym, "global.sym", undef, "# ex: set ro:\n");
297 # XXX others that may need adding
301 my @extvars = qw(sv_undef sv_yes sv_no na dowarn
303 tainting tainted stack_base stack_sp sv_arenaroot
305 curstash DBsub DBsingle DBassertion debstash
319 my ($syms, $file) = @_;
321 open(FILE, "< $file")
322 or die "embed.pl: Can't open $file: $!\n";
324 s/[ \t]*#.*//; # Delete comments.
325 if (/^\s*(\S+)\s*$/) {
327 warn "duplicate symbol $sym while processing $file line $.\n"
328 if exists $$syms{$sym};
335 # Perl_pp_* and Perl_ck_* are in pp.sym
336 readsyms my %ppsym, 'pp.sym';
338 sub readvars(\%$$@) {
339 my ($syms, $file,$pre,$keep_pre) = @_;
341 open(FILE, "< $file")
342 or die "embed.pl: Can't open $file: $!\n";
344 s/[ \t]*#.*//; # Delete comments.
345 if (/PERLVARA?I?S?C?\($pre(\w+)/) {
347 $sym = $pre . $sym if $keep_pre;
348 warn "duplicate symbol $sym while processing $file line $.\n"
349 if exists $$syms{$sym};
350 $$syms{$sym} = $pre || 1;
359 readvars %intrp, 'intrpvar.h','I';
360 readvars %globvar, 'perlvars.h','G';
370 my ($from, $to) = @_;
371 my $t = int(length($from) / 8);
372 "#define $from" . "\t" x ($t < 3 ? 3 - $t : 1) . "$to\n";
375 sub bincompat_var ($$) {
376 my ($pfx, $sym) = @_;
377 my $arg = ($pfx eq 'G' ? 'NULL' : 'aTHX');
378 undefine("PL_$sym") . hide("PL_$sym", "(*Perl_${pfx}${sym}_ptr($arg))");
382 my ($sym,$pre,$ptr) = @_;
383 hide("PL_$sym", "($ptr$pre$sym)");
388 return hide("PL_$pre$sym", "PL_$sym");
391 my $em = safer_open('embed.h-new');
393 print $em do_not_edit ("embed.h"), <<'END';
395 /* (Doing namespace management portably in C is really gross.) */
397 /* By defining PERL_NO_SHORT_NAMES (not done by default) the short forms
398 * (like warn instead of Perl_warn) for the API are not defined.
399 * Not defining the short forms is a good thing for cleaner embedding. */
401 #ifndef PERL_NO_SHORT_NAMES
403 /* Hide global symbols */
405 #if !defined(PERL_IMPLICIT_CONTEXT)
409 # Try to elimiate lots of repeated
416 # by tracking state and merging foo and bar into one block.
417 my $ifdef_state = '';
421 my $new_ifdef_state = '';
424 $ret .= "$arg\n" if $arg =~ /^#\s*(if|ifn?def|else|endif)\b/;
427 my ($flags,$retval,$func,@args) = @_;
428 unless ($flags =~ /[om]/) {
430 $ret .= hide($func,"S_$func");
432 elsif ($flags =~ /p/) {
433 $ret .= hide($func,"Perl_$func");
436 if ($ret ne '' && $flags !~ /A/) {
439 = "#if defined(PERL_CORE) || defined(PERL_EXT)\n";
442 $new_ifdef_state = "#ifdef PERL_CORE\n";
445 if ($new_ifdef_state ne $ifdef_state) {
446 $ret = $new_ifdef_state . $ret;
450 if ($ifdef_state && $new_ifdef_state ne $ifdef_state) {
451 # Close the old one ahead of opening the new one.
452 $ret = "#endif\n$ret";
454 # Remember the new state.
455 $ifdef_state = $new_ifdef_state;
460 print $em "#endif\n";
463 for $sym (sort keys %ppsym) {
465 print $em hide($sym, "Perl_$sym");
470 #else /* PERL_IMPLICIT_CONTEXT */
479 my $new_ifdef_state = '';
482 $ret .= "$arg\n" if $arg =~ /^#\s*(if|ifn?def|else|endif)\b/;
485 my ($flags,$retval,$func,@args) = @_;
486 unless ($flags =~ /[om]/) {
487 my $args = scalar @args;
488 if ($args and $args[$args-1] =~ /\.\.\./) {
489 # we're out of luck for varargs functions under CPP
491 elsif ($flags =~ /n/) {
493 $ret .= hide($func,"S_$func");
495 elsif ($flags =~ /p/) {
496 $ret .= hide($func,"Perl_$func");
500 my $alist = join(",", @az[0..$args-1]);
501 $ret = "#define $func($alist)";
502 my $t = int(length($ret) / 8);
503 $ret .= "\t" x ($t < 4 ? 4 - $t : 1);
505 $ret .= "S_$func(aTHX";
507 elsif ($flags =~ /p/) {
508 $ret .= "Perl_$func(aTHX";
510 $ret .= "_ " if $alist;
511 $ret .= $alist . ")\n";
514 unless ($flags =~ /A/) {
517 = "#if defined(PERL_CORE) || defined(PERL_EXT)\n";
520 $new_ifdef_state = "#ifdef PERL_CORE\n";
523 if ($new_ifdef_state ne $ifdef_state) {
524 $ret = $new_ifdef_state . $ret;
528 if ($ifdef_state && $new_ifdef_state ne $ifdef_state) {
529 # Close the old one ahead of opening the new one.
530 $ret = "#endif\n$ret";
532 # Remember the new state.
533 $ifdef_state = $new_ifdef_state;
538 print $em "#endif\n";
541 for $sym (sort keys %ppsym) {
543 if ($sym =~ /^ck_/) {
544 print $em hide("$sym(a)", "Perl_$sym(aTHX_ a)");
546 elsif ($sym =~ /^pp_/) {
547 print $em hide("$sym()", "Perl_$sym(aTHX)");
550 warn "Illegal symbol '$sym' in pp.sym";
556 #endif /* PERL_IMPLICIT_CONTEXT */
558 #endif /* #ifndef PERL_NO_SHORT_NAMES */
564 /* Compatibility stubs. Compile extensions with -DPERL_NOCOMPAT to
568 #if !defined(PERL_CORE)
569 # define sv_setptrobj(rv,ptr,name) sv_setref_iv(rv,name,PTR2IV(ptr))
570 # define sv_setptrref(rv,ptr) sv_setref_iv(rv,NULL,PTR2IV(ptr))
573 #if !defined(PERL_CORE) && !defined(PERL_NOCOMPAT)
575 /* Compatibility for various misnamed functions. All functions
576 in the API that begin with "perl_" (not "Perl_") take an explicit
577 interpreter context pointer.
578 The following are not like that, but since they had a "perl_"
579 prefix in previous versions, we provide compatibility macros.
581 # define perl_atexit(a,b) call_atexit(a,b)
582 # define perl_call_argv(a,b,c) call_argv(a,b,c)
583 # define perl_call_pv(a,b) call_pv(a,b)
584 # define perl_call_method(a,b) call_method(a,b)
585 # define perl_call_sv(a,b) call_sv(a,b)
586 # define perl_eval_sv(a,b) eval_sv(a,b)
587 # define perl_eval_pv(a,b) eval_pv(a,b)
588 # define perl_require_pv(a) require_pv(a)
589 # define perl_get_sv(a,b) get_sv(a,b)
590 # define perl_get_av(a,b) get_av(a,b)
591 # define perl_get_hv(a,b) get_hv(a,b)
592 # define perl_get_cv(a,b) get_cv(a,b)
593 # define perl_init_i18nl10n(a) init_i18nl10n(a)
594 # define perl_init_i18nl14n(a) init_i18nl14n(a)
595 # define perl_new_ctype(a) new_ctype(a)
596 # define perl_new_collate(a) new_collate(a)
597 # define perl_new_numeric(a) new_numeric(a)
599 /* varargs functions can't be handled with CPP macros. :-(
600 This provides a set of compatibility functions that don't take
601 an extra argument but grab the context pointer using the macro
604 #if defined(PERL_IMPLICIT_CONTEXT) && !defined(PERL_NO_SHORT_NAMES)
605 # define croak Perl_croak_nocontext
606 # define deb Perl_deb_nocontext
607 # define die Perl_die_nocontext
608 # define form Perl_form_nocontext
609 # define load_module Perl_load_module_nocontext
610 # define mess Perl_mess_nocontext
611 # define newSVpvf Perl_newSVpvf_nocontext
612 # define sv_catpvf Perl_sv_catpvf_nocontext
613 # define sv_setpvf Perl_sv_setpvf_nocontext
614 # define warn Perl_warn_nocontext
615 # define warner Perl_warner_nocontext
616 # define sv_catpvf_mg Perl_sv_catpvf_mg_nocontext
617 # define sv_setpvf_mg Perl_sv_setpvf_mg_nocontext
620 #endif /* !defined(PERL_CORE) && !defined(PERL_NOCOMPAT) */
622 #if !defined(PERL_IMPLICIT_CONTEXT)
623 /* undefined symbols, point them back at the usual ones */
624 # define Perl_croak_nocontext Perl_croak
625 # define Perl_die_nocontext Perl_die
626 # define Perl_deb_nocontext Perl_deb
627 # define Perl_form_nocontext Perl_form
628 # define Perl_load_module_nocontext Perl_load_module
629 # define Perl_mess_nocontext Perl_mess
630 # define Perl_newSVpvf_nocontext Perl_newSVpvf
631 # define Perl_sv_catpvf_nocontext Perl_sv_catpvf
632 # define Perl_sv_setpvf_nocontext Perl_sv_setpvf
633 # define Perl_warn_nocontext Perl_warn
634 # define Perl_warner_nocontext Perl_warner
635 # define Perl_sv_catpvf_mg_nocontext Perl_sv_catpvf_mg
636 # define Perl_sv_setpvf_mg_nocontext Perl_sv_setpvf_mg
643 rename_if_different('embed.h-new', 'embed.h');
645 $em = safer_open('embedvar.h-new');
647 print $em do_not_edit ("embedvar.h"), <<'END';
649 /* (Doing namespace management portably in C is really gross.) */
652 The following combinations of MULTIPLICITY and PERL_IMPLICIT_CONTEXT
655 2) MULTIPLICITY # supported for compatibility
656 3) MULTIPLICITY && PERL_IMPLICIT_CONTEXT
658 All other combinations of these flags are errors.
660 only #3 is supported directly, while #2 is a special
661 case of #3 (supported by redefining vTHX appropriately).
664 #if defined(MULTIPLICITY)
665 /* cases 2 and 3 above */
667 # if defined(PERL_IMPLICIT_CONTEXT)
670 # define vTHX PERL_GET_INTERP
675 for $sym (sort keys %intrp) {
676 print $em multon($sym,'I','vTHX->');
681 #else /* !MULTIPLICITY */
687 for $sym (sort keys %intrp) {
688 print $em multoff($sym,'I');
697 #endif /* MULTIPLICITY */
699 #if defined(PERL_GLOBAL_STRUCT)
703 for $sym (sort keys %globvar) {
704 print $em multon($sym, 'G','my_vars->');
705 print $em multon("G$sym",'', 'my_vars->');
710 #else /* !PERL_GLOBAL_STRUCT */
714 for $sym (sort keys %globvar) {
715 print $em multoff($sym,'G');
720 #endif /* PERL_GLOBAL_STRUCT */
722 #ifdef PERL_POLLUTE /* disabled by default in 5.6.0 */
726 for $sym (sort @extvars) {
727 print $em hide($sym,"PL_$sym");
732 #endif /* PERL_POLLUTE */
738 rename_if_different('embedvar.h-new', 'embedvar.h');
740 my $capi = safer_open('perlapi.c-new');
741 my $capih = safer_open('perlapi.h-new');
743 print $capih do_not_edit ("perlapi.h"), <<'EOT';
745 /* declare accessor functions for Perl variables */
746 #ifndef __perlapi_h__
747 #define __perlapi_h__
749 #if defined (MULTIPLICITY)
758 #define PERLVAR(v,t) EXTERN_C t* Perl_##v##_ptr(pTHX);
759 #define PERLVARA(v,n,t) typedef t PL_##v##_t[n]; \
760 EXTERN_C PL_##v##_t* Perl_##v##_ptr(pTHX);
761 #define PERLVARI(v,t,i) PERLVAR(v,t)
762 #define PERLVARIC(v,t,i) PERLVAR(v, const t)
763 #define PERLVARISC(v,i) typedef const char PL_##v##_t[sizeof(i)]; \
764 EXTERN_C PL_##v##_t* Perl_##v##_ptr(pTHX);
766 #include "intrpvar.h"
767 #include "perlvars.h"
775 #ifndef PERL_GLOBAL_STRUCT
776 EXTERN_C Perl_ppaddr_t** Perl_Gppaddr_ptr(pTHX);
777 EXTERN_C Perl_check_t** Perl_Gcheck_ptr(pTHX);
778 EXTERN_C unsigned char** Perl_Gfold_locale_ptr(pTHX);
779 #define Perl_ppaddr_ptr Perl_Gppaddr_ptr
780 #define Perl_check_ptr Perl_Gcheck_ptr
781 #define Perl_fold_locale_ptr Perl_Gfold_locale_ptr
786 #if defined(PERL_CORE)
788 /* accessor functions for Perl variables (provide binary compatibility) */
790 /* these need to be mentioned here, or most linkers won't put them in
791 the perl executable */
793 #ifndef PERL_NO_FORCE_LINK
798 EXTCONST void * const PL_force_link_funcs[];
800 EXTCONST void * const PL_force_link_funcs[] = {
805 #define PERLVAR(v,t) (void*)Perl_##v##_ptr,
806 #define PERLVARA(v,n,t) PERLVAR(v,t)
807 #define PERLVARI(v,t,i) PERLVAR(v,t)
808 #define PERLVARIC(v,t,i) PERLVAR(v,t)
809 #define PERLVARISC(v,i) PERLVAR(v,char)
811 /* In Tru64 (__DEC && __osf__) the cc option -std1 causes that one
812 * cannot cast between void pointers and function pointers without
813 * info level warnings. The PL_force_link_funcs[] would cause a few
814 * hundred of those warnings. In code one can circumnavigate this by using
815 * unions that overlay the different pointers, but in declarations one
816 * cannot use this trick. Therefore we just disable the warning here
817 * for the duration of the PL_force_link_funcs[] declaration. */
819 #if defined(__DECC) && defined(__osf__)
821 #pragma message disable (nonstandcast)
824 #include "intrpvar.h"
825 #include "perlvars.h"
827 #if defined(__DECC) && defined(__osf__)
828 #pragma message restore
841 #endif /* PERL_NO_FORCE_LINK */
843 #else /* !PERL_CORE */
847 foreach $sym (sort keys %intrp) {
848 print $capih bincompat_var('I',$sym);
851 foreach $sym (sort keys %globvar) {
852 print $capih bincompat_var('G',$sym);
855 print $capih <<'EOT';
857 #endif /* !PERL_CORE */
858 #endif /* MULTIPLICITY */
860 #endif /* __perlapi_h__ */
865 rename_if_different('perlapi.h-new', 'perlapi.h');
867 print $capi do_not_edit ("perlapi.c"), <<'EOT';
873 #if defined (MULTIPLICITY)
875 /* accessor functions for Perl variables (provides binary compatibility) */
884 #define PERLVAR(v,t) t* Perl_##v##_ptr(pTHX) \
885 { dVAR; PERL_UNUSED_CONTEXT; return &(aTHX->v); }
886 #define PERLVARA(v,n,t) PL_##v##_t* Perl_##v##_ptr(pTHX) \
887 { dVAR; PERL_UNUSED_CONTEXT; return &(aTHX->v); }
889 #define PERLVARI(v,t,i) PERLVAR(v,t)
890 #define PERLVARIC(v,t,i) PERLVAR(v, const t)
891 #define PERLVARISC(v,i) PL_##v##_t* Perl_##v##_ptr(pTHX) \
892 { dVAR; PERL_UNUSED_CONTEXT; return &(aTHX->v); }
894 #include "intrpvar.h"
898 #define PERLVAR(v,t) t* Perl_##v##_ptr(pTHX) \
899 { dVAR; PERL_UNUSED_CONTEXT; return &(PL_##v); }
900 #define PERLVARA(v,n,t) PL_##v##_t* Perl_##v##_ptr(pTHX) \
901 { dVAR; PERL_UNUSED_CONTEXT; return &(PL_##v); }
904 #define PERLVARIC(v,t,i) \
905 const t* Perl_##v##_ptr(pTHX) \
906 { PERL_UNUSED_CONTEXT; return (const t *)&(PL_##v); }
907 #define PERLVARISC(v,i) PL_##v##_t* Perl_##v##_ptr(pTHX) \
908 { dVAR; PERL_UNUSED_CONTEXT; return &(PL_##v); }
909 #include "perlvars.h"
917 #ifndef PERL_GLOBAL_STRUCT
918 /* A few evil special cases. Could probably macrofy this. */
921 #undef PL_fold_locale
922 Perl_ppaddr_t** Perl_Gppaddr_ptr(pTHX) {
923 static Perl_ppaddr_t* const ppaddr_ptr = PL_ppaddr;
925 return (Perl_ppaddr_t**)&ppaddr_ptr;
927 Perl_check_t** Perl_Gcheck_ptr(pTHX) {
928 static Perl_check_t* const check_ptr = PL_check;
930 return (Perl_check_t**)&check_ptr;
932 unsigned char** Perl_Gfold_locale_ptr(pTHX) {
933 static unsigned char* const fold_locale_ptr = PL_fold_locale;
935 return (unsigned char**)&fold_locale_ptr;
941 #endif /* MULTIPLICITY */
947 rename_if_different('perlapi.c-new', 'perlapi.c');
949 # functions that take va_list* for implementing vararg functions
950 # NOTE: makedef.pl must be updated if you add symbols to %vfuncs
951 # XXX %vfuncs currently unused
953 Perl_croak Perl_vcroak
955 Perl_warner Perl_vwarner
958 Perl_load_module Perl_vload_module
961 Perl_newSVpvf Perl_vnewSVpvf
962 Perl_sv_setpvf Perl_sv_vsetpvf
963 Perl_sv_setpvf_mg Perl_sv_vsetpvf_mg
964 Perl_sv_catpvf Perl_sv_vcatpvf
965 Perl_sv_catpvf_mg Perl_sv_vcatpvf_mg
966 Perl_dump_indent Perl_dump_vindent
967 Perl_default_protect Perl_vdefault_protect
970 # ex: set ts=8 sts=4 sw=4 noet: