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, perlvars.h and thrdvar.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);
83 if (ref $filename) { # filehandle
87 safer_unlink $filename if $filename ne '/dev/null';
88 open F, ">$filename" or die "Can't open $filename: $!";
92 print $F $leader if $leader;
93 seek IN, 0, 0; # so we may restart
107 @args = split /\s*\|\s*/, $_;
109 my @outs = &{$function}(@args);
110 print $F @outs; # $function->(@args) is not 5.003
112 print $F $trailer if $trailer;
113 unless (ref $filename) {
114 close $F or die "Error closing $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,$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;
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";
180 $retval = "PERL_CALLCONV $splint_flags$retval";
182 $func = "Perl_$func";
185 $ret .= "$retval\t$func(";
186 if ( $has_context ) {
187 $ret .= @args ? "pTHX_ " : "pTHX";
191 for my $arg ( @args ) {
193 if ( $arg =~ /\*/ && $arg !~ /\b(NN|NULLOK)\b/ ) {
194 warn "$func: $arg needs NN or NULLOK\n";
195 our $unflagged_pointers;
196 ++$unflagged_pointers;
198 my $nn = ( $arg =~ s/\s*\bNN\b\s+// );
199 push( @nonnull, $n ) if $nn;
201 my $nullok = ( $arg =~ s/\s*\bNULLOK\b\s+// ); # strip NULLOK with no effect
203 # Make sure each arg has at least a type and a var name.
204 # An arg of "int" is valid C, but want it to be "int foo".
206 $temp_arg =~ s/\*//g;
207 $temp_arg =~ s/\s*\bstruct\b\s*/ /g;
208 if ( ($temp_arg ne "...") && ($temp_arg !~ /\w+\s+\w+/) ) {
209 warn "$func: $arg doesn't have a name\n";
211 if ( $SPLINT && $nullok && !$commented_out ) {
212 $arg = '/*@null@*/ ' . $arg;
215 $ret .= join ", ", @args;
218 $ret .= "void" if !$has_context;
222 if ( $flags =~ /r/ ) {
223 push @attrs, "__attribute__noreturn__";
226 push @attrs, "__attribute__malloc__";
228 if ( !$can_ignore ) {
229 push @attrs, "__attribute__warn_unused_result__";
231 if ( $flags =~ /P/ ) {
232 push @attrs, "__attribute__pure__";
234 if( $flags =~ /f/ ) {
235 my $prefix = $has_context ? 'pTHX_' : '';
236 my $args = scalar @args;
238 my $macro = @nonnull && $nonnull[-1] == $pat
239 ? '__attribute__format__'
240 : '__attribute__format__null_ok__';
241 push @attrs, sprintf "%s(__printf__,%s%d,%s%d)", $macro,
242 $prefix, $pat, $prefix, $args;
245 my @pos = map { $has_context ? "pTHX_$_" : $_ } @nonnull;
246 push @attrs, map { sprintf( "__attribute__nonnull__(%s)", $_ ) } @pos;
250 $ret .= join( "\n", map { "\t\t\t$_" } @attrs );
253 $ret = "/* $ret */" if $commented_out;
254 $ret .= @attrs ? "\n\n" : "\n";
259 # generates global.sym (API export list)
262 sub write_global_sym {
265 my ($flags,$retval,$func,@args) = @_;
266 # If a function is defined twice, for example before and after an
267 # #else, only process the flags on the first instance for global.sym
268 return $ret if $seen{$func}++;
269 if ($flags =~ /[AX]/ && $flags !~ /[xm]/
270 || $flags =~ /b/) { # public API, so export
271 $func = "Perl_$func" if $flags =~ /[pbX]/;
280 our $unflagged_pointers;
281 walk_table(\&write_protos, "proto.h", undef, "/* ex: set ro: */\n");
282 warn "$unflagged_pointers pointer arguments to clean up\n" if $unflagged_pointers;
283 walk_table(\&write_global_sym, "global.sym", undef, "# ex: set ro:\n");
285 # XXX others that may need adding
289 my @extvars = qw(sv_undef sv_yes sv_no na dowarn
291 tainting tainted stack_base stack_sp sv_arenaroot
293 curstash DBsub DBsingle DBassertion debstash
307 my ($syms, $file) = @_;
309 open(FILE, "< $file")
310 or die "embed.pl: Can't open $file: $!\n";
312 s/[ \t]*#.*//; # Delete comments.
313 if (/^\s*(\S+)\s*$/) {
315 warn "duplicate symbol $sym while processing $file\n"
316 if exists $$syms{$sym};
323 # Perl_pp_* and Perl_ck_* are in pp.sym
324 readsyms my %ppsym, 'pp.sym';
326 sub readvars(\%$$@) {
327 my ($syms, $file,$pre,$keep_pre) = @_;
329 open(FILE, "< $file")
330 or die "embed.pl: Can't open $file: $!\n";
332 s/[ \t]*#.*//; # Delete comments.
333 if (/PERLVARA?I?S?C?\($pre(\w+)/) {
335 $sym = $pre . $sym if $keep_pre;
336 warn "duplicate symbol $sym while processing $file\n"
337 if exists $$syms{$sym};
338 $$syms{$sym} = $pre || 1;
348 readvars %intrp, 'intrpvar.h','I';
349 readvars %thread, 'thrdvar.h','T';
350 readvars %globvar, 'perlvars.h','G';
353 foreach $sym (sort keys %thread) {
354 warn "$sym in intrpvar.h as well as thrdvar.h\n" if exists $intrp{$sym};
363 my ($from, $to) = @_;
364 my $t = int(length($from) / 8);
365 "#define $from" . "\t" x ($t < 3 ? 3 - $t : 1) . "$to\n";
368 sub bincompat_var ($$) {
369 my ($pfx, $sym) = @_;
370 my $arg = ($pfx eq 'G' ? 'NULL' : 'aTHX');
371 undefine("PL_$sym") . hide("PL_$sym", "(*Perl_${pfx}${sym}_ptr($arg))");
375 my ($sym,$pre,$ptr) = @_;
376 hide("PL_$sym", "($ptr$pre$sym)");
381 return hide("PL_$pre$sym", "PL_$sym");
384 safer_unlink 'embed.h';
385 open(EM, '> embed.h') or die "Can't create embed.h: $!\n";
388 print EM do_not_edit ("embed.h"), <<'END';
390 /* (Doing namespace management portably in C is really gross.) */
392 /* By defining PERL_NO_SHORT_NAMES (not done by default) the short forms
393 * (like warn instead of Perl_warn) for the API are not defined.
394 * Not defining the short forms is a good thing for cleaner embedding. */
396 #ifndef PERL_NO_SHORT_NAMES
398 /* Hide global symbols */
400 #if !defined(PERL_IMPLICIT_CONTEXT)
404 # Try to elimiate lots of repeated
411 # by tracking state and merging foo and bar into one block.
412 my $ifdef_state = '';
416 my $new_ifdef_state = '';
419 $ret .= "$arg\n" if $arg =~ /^#\s*(if|ifn?def|else|endif)\b/;
422 my ($flags,$retval,$func,@args) = @_;
423 unless ($flags =~ /[om]/) {
425 $ret .= hide($func,"S_$func");
427 elsif ($flags =~ /p/) {
428 $ret .= hide($func,"Perl_$func");
431 if ($ret ne '' && $flags !~ /A/) {
434 = "#if defined(PERL_CORE) || defined(PERL_EXT)\n";
437 $new_ifdef_state = "#ifdef PERL_CORE\n";
440 if ($new_ifdef_state ne $ifdef_state) {
441 $ret = $new_ifdef_state . $ret;
445 if ($ifdef_state && $new_ifdef_state ne $ifdef_state) {
446 # Close the old one ahead of opening the new one.
447 $ret = "#endif\n$ret";
449 # Remember the new state.
450 $ifdef_state = $new_ifdef_state;
458 for $sym (sort keys %ppsym) {
460 print EM hide($sym, "Perl_$sym");
465 #else /* PERL_IMPLICIT_CONTEXT */
474 my $new_ifdef_state = '';
477 $ret .= "$arg\n" if $arg =~ /^#\s*(if|ifn?def|else|endif)\b/;
480 my ($flags,$retval,$func,@args) = @_;
481 unless ($flags =~ /[om]/) {
482 my $args = scalar @args;
483 if ($args and $args[$args-1] =~ /\.\.\./) {
484 # we're out of luck for varargs functions under CPP
486 elsif ($flags =~ /n/) {
488 $ret .= hide($func,"S_$func");
490 elsif ($flags =~ /p/) {
491 $ret .= hide($func,"Perl_$func");
495 my $alist = join(",", @az[0..$args-1]);
496 $ret = "#define $func($alist)";
497 my $t = int(length($ret) / 8);
498 $ret .= "\t" x ($t < 4 ? 4 - $t : 1);
500 $ret .= "S_$func(aTHX";
502 elsif ($flags =~ /p/) {
503 $ret .= "Perl_$func(aTHX";
505 $ret .= "_ " if $alist;
506 $ret .= $alist . ")\n";
509 unless ($flags =~ /A/) {
512 = "#if defined(PERL_CORE) || defined(PERL_EXT)\n";
515 $new_ifdef_state = "#ifdef PERL_CORE\n";
518 if ($new_ifdef_state ne $ifdef_state) {
519 $ret = $new_ifdef_state . $ret;
523 if ($ifdef_state && $new_ifdef_state ne $ifdef_state) {
524 # Close the old one ahead of opening the new one.
525 $ret = "#endif\n$ret";
527 # Remember the new state.
528 $ifdef_state = $new_ifdef_state;
536 for $sym (sort keys %ppsym) {
538 if ($sym =~ /^ck_/) {
539 print EM hide("$sym(a)", "Perl_$sym(aTHX_ a)");
541 elsif ($sym =~ /^pp_/) {
542 print EM hide("$sym()", "Perl_$sym(aTHX)");
545 warn "Illegal symbol '$sym' in pp.sym";
551 #endif /* PERL_IMPLICIT_CONTEXT */
553 #endif /* #ifndef PERL_NO_SHORT_NAMES */
559 /* Compatibility stubs. Compile extensions with -DPERL_NOCOMPAT to
563 #if !defined(PERL_CORE)
564 # define sv_setptrobj(rv,ptr,name) sv_setref_iv(rv,name,PTR2IV(ptr))
565 # define sv_setptrref(rv,ptr) sv_setref_iv(rv,NULL,PTR2IV(ptr))
568 #if !defined(PERL_CORE) && !defined(PERL_NOCOMPAT)
570 /* Compatibility for various misnamed functions. All functions
571 in the API that begin with "perl_" (not "Perl_") take an explicit
572 interpreter context pointer.
573 The following are not like that, but since they had a "perl_"
574 prefix in previous versions, we provide compatibility macros.
576 # define perl_atexit(a,b) call_atexit(a,b)
577 # define perl_call_argv(a,b,c) call_argv(a,b,c)
578 # define perl_call_pv(a,b) call_pv(a,b)
579 # define perl_call_method(a,b) call_method(a,b)
580 # define perl_call_sv(a,b) call_sv(a,b)
581 # define perl_eval_sv(a,b) eval_sv(a,b)
582 # define perl_eval_pv(a,b) eval_pv(a,b)
583 # define perl_require_pv(a) require_pv(a)
584 # define perl_get_sv(a,b) get_sv(a,b)
585 # define perl_get_av(a,b) get_av(a,b)
586 # define perl_get_hv(a,b) get_hv(a,b)
587 # define perl_get_cv(a,b) get_cv(a,b)
588 # define perl_init_i18nl10n(a) init_i18nl10n(a)
589 # define perl_init_i18nl14n(a) init_i18nl14n(a)
590 # define perl_new_ctype(a) new_ctype(a)
591 # define perl_new_collate(a) new_collate(a)
592 # define perl_new_numeric(a) new_numeric(a)
594 /* varargs functions can't be handled with CPP macros. :-(
595 This provides a set of compatibility functions that don't take
596 an extra argument but grab the context pointer using the macro
599 #if defined(PERL_IMPLICIT_CONTEXT) && !defined(PERL_NO_SHORT_NAMES)
600 # define croak Perl_croak_nocontext
601 # define deb Perl_deb_nocontext
602 # define die Perl_die_nocontext
603 # define form Perl_form_nocontext
604 # define load_module Perl_load_module_nocontext
605 # define mess Perl_mess_nocontext
606 # define newSVpvf Perl_newSVpvf_nocontext
607 # define sv_catpvf Perl_sv_catpvf_nocontext
608 # define sv_setpvf Perl_sv_setpvf_nocontext
609 # define warn Perl_warn_nocontext
610 # define warner Perl_warner_nocontext
611 # define sv_catpvf_mg Perl_sv_catpvf_mg_nocontext
612 # define sv_setpvf_mg Perl_sv_setpvf_mg_nocontext
615 #endif /* !defined(PERL_CORE) && !defined(PERL_NOCOMPAT) */
617 #if !defined(PERL_IMPLICIT_CONTEXT)
618 /* undefined symbols, point them back at the usual ones */
619 # define Perl_croak_nocontext Perl_croak
620 # define Perl_die_nocontext Perl_die
621 # define Perl_deb_nocontext Perl_deb
622 # define Perl_form_nocontext Perl_form
623 # define Perl_load_module_nocontext Perl_load_module
624 # define Perl_mess_nocontext Perl_mess
625 # define Perl_newSVpvf_nocontext Perl_newSVpvf
626 # define Perl_sv_catpvf_nocontext Perl_sv_catpvf
627 # define Perl_sv_setpvf_nocontext Perl_sv_setpvf
628 # define Perl_warn_nocontext Perl_warn
629 # define Perl_warner_nocontext Perl_warner
630 # define Perl_sv_catpvf_mg_nocontext Perl_sv_catpvf_mg
631 # define Perl_sv_setpvf_mg_nocontext Perl_sv_setpvf_mg
637 close(EM) or die "Error closing EM: $!";
639 safer_unlink 'embedvar.h';
640 open(EM, '> embedvar.h')
641 or die "Can't create embedvar.h: $!\n";
644 print EM do_not_edit ("embedvar.h"), <<'END';
646 /* (Doing namespace management portably in C is really gross.) */
649 The following combinations of MULTIPLICITY and PERL_IMPLICIT_CONTEXT
652 2) MULTIPLICITY # supported for compatibility
653 3) MULTIPLICITY && PERL_IMPLICIT_CONTEXT
655 All other combinations of these flags are errors.
657 only #3 is supported directly, while #2 is a special
658 case of #3 (supported by redefining vTHX appropriately).
661 #if defined(MULTIPLICITY)
662 /* cases 2 and 3 above */
664 # if defined(PERL_IMPLICIT_CONTEXT)
667 # define vTHX PERL_GET_INTERP
672 for $sym (sort keys %thread) {
673 print EM multon($sym,'T','vTHX->');
678 /* cases 2 and 3 above */
682 for $sym (sort keys %intrp) {
683 print EM multon($sym,'I','vTHX->');
688 #else /* !MULTIPLICITY */
694 for $sym (sort keys %intrp) {
695 print EM multoff($sym,'I');
702 for $sym (sort keys %thread) {
703 print EM multoff($sym,'T');
708 #endif /* MULTIPLICITY */
710 #if defined(PERL_GLOBAL_STRUCT)
714 for $sym (sort keys %globvar) {
715 print EM multon($sym, 'G','my_vars->');
716 print EM multon("G$sym",'', 'my_vars->');
721 #else /* !PERL_GLOBAL_STRUCT */
725 for $sym (sort keys %globvar) {
726 print EM multoff($sym,'G');
731 #endif /* PERL_GLOBAL_STRUCT */
733 #ifdef PERL_POLLUTE /* disabled by default in 5.6.0 */
737 for $sym (sort @extvars) {
738 print EM hide($sym,"PL_$sym");
743 #endif /* PERL_POLLUTE */
748 close(EM) or die "Error closing EM: $!";
750 safer_unlink 'perlapi.h';
751 safer_unlink 'perlapi.c';
752 open(CAPI, '> perlapi.c') or die "Can't create perlapi.c: $!\n";
754 open(CAPIH, '> perlapi.h') or die "Can't create perlapi.h: $!\n";
757 print CAPIH do_not_edit ("perlapi.h"), <<'EOT';
759 /* declare accessor functions for Perl variables */
760 #ifndef __perlapi_h__
761 #define __perlapi_h__
763 #if defined (MULTIPLICITY)
772 #define PERLVAR(v,t) EXTERN_C t* Perl_##v##_ptr(pTHX);
773 #define PERLVARA(v,n,t) typedef t PL_##v##_t[n]; \
774 EXTERN_C PL_##v##_t* Perl_##v##_ptr(pTHX);
775 #define PERLVARI(v,t,i) PERLVAR(v,t)
776 #define PERLVARIC(v,t,i) PERLVAR(v, const t)
777 #define PERLVARISC(v,i) typedef const char PL_##v##_t[sizeof(i)]; \
778 EXTERN_C PL_##v##_t* Perl_##v##_ptr(pTHX);
781 #include "intrpvar.h"
782 #include "perlvars.h"
790 #ifndef PERL_GLOBAL_STRUCT
791 EXTERN_C Perl_ppaddr_t** Perl_Gppaddr_ptr(pTHX);
792 EXTERN_C Perl_check_t** Perl_Gcheck_ptr(pTHX);
793 EXTERN_C unsigned char** Perl_Gfold_locale_ptr(pTHX);
794 #define Perl_ppaddr_ptr Perl_Gppaddr_ptr
795 #define Perl_check_ptr Perl_Gcheck_ptr
796 #define Perl_fold_locale_ptr Perl_Gfold_locale_ptr
801 #if defined(PERL_CORE)
803 /* accessor functions for Perl variables (provide binary compatibility) */
805 /* these need to be mentioned here, or most linkers won't put them in
806 the perl executable */
808 #ifndef PERL_NO_FORCE_LINK
813 EXTCONST void * const PL_force_link_funcs[];
815 EXTCONST void * const PL_force_link_funcs[] = {
820 #define PERLVAR(v,t) (void*)Perl_##v##_ptr,
821 #define PERLVARA(v,n,t) PERLVAR(v,t)
822 #define PERLVARI(v,t,i) PERLVAR(v,t)
823 #define PERLVARIC(v,t,i) PERLVAR(v,t)
824 #define PERLVARISC(v,i) PERLVAR(v,char)
826 /* In Tru64 (__DEC && __osf__) the cc option -std1 causes that one
827 * cannot cast between void pointers and function pointers without
828 * info level warnings. The PL_force_link_funcs[] would cause a few
829 * hundred of those warnings. In code one can circumnavigate this by using
830 * unions that overlay the different pointers, but in declarations one
831 * cannot use this trick. Therefore we just disable the warning here
832 * for the duration of the PL_force_link_funcs[] declaration. */
834 #if defined(__DECC) && defined(__osf__)
836 #pragma message disable (nonstandcast)
840 #include "intrpvar.h"
841 #include "perlvars.h"
843 #if defined(__DECC) && defined(__osf__)
844 #pragma message restore
857 #endif /* PERL_NO_FORCE_LINK */
859 #else /* !PERL_CORE */
863 foreach $sym (sort keys %intrp) {
864 print CAPIH bincompat_var('I',$sym);
867 foreach $sym (sort keys %thread) {
868 print CAPIH bincompat_var('T',$sym);
871 foreach $sym (sort keys %globvar) {
872 print CAPIH bincompat_var('G',$sym);
877 #endif /* !PERL_CORE */
878 #endif /* MULTIPLICITY */
880 #endif /* __perlapi_h__ */
884 close CAPIH or die "Error closing CAPIH: $!";
886 print CAPI do_not_edit ("perlapi.c"), <<'EOT';
892 #if defined (MULTIPLICITY)
894 /* accessor functions for Perl variables (provides binary compatibility) */
903 #define PERLVAR(v,t) t* Perl_##v##_ptr(pTHX) \
904 { dVAR; PERL_UNUSED_CONTEXT; return &(aTHX->v); }
905 #define PERLVARA(v,n,t) PL_##v##_t* Perl_##v##_ptr(pTHX) \
906 { dVAR; PERL_UNUSED_CONTEXT; return &(aTHX->v); }
908 #define PERLVARI(v,t,i) PERLVAR(v,t)
909 #define PERLVARIC(v,t,i) PERLVAR(v, const t)
910 #define PERLVARISC(v,i) PL_##v##_t* Perl_##v##_ptr(pTHX) \
911 { dVAR; PERL_UNUSED_CONTEXT; return &(aTHX->v); }
914 #include "intrpvar.h"
918 #define PERLVAR(v,t) t* Perl_##v##_ptr(pTHX) \
919 { dVAR; PERL_UNUSED_CONTEXT; return &(PL_##v); }
920 #define PERLVARA(v,n,t) PL_##v##_t* Perl_##v##_ptr(pTHX) \
921 { dVAR; PERL_UNUSED_CONTEXT; return &(PL_##v); }
924 #define PERLVARIC(v,t,i) \
925 const t* Perl_##v##_ptr(pTHX) \
926 { PERL_UNUSED_CONTEXT; return (const t *)&(PL_##v); }
927 #define PERLVARISC(v,i) PL_##v##_t* Perl_##v##_ptr(pTHX) \
928 { dVAR; PERL_UNUSED_CONTEXT; return &(PL_##v); }
929 #include "perlvars.h"
937 #ifndef PERL_GLOBAL_STRUCT
938 /* A few evil special cases. Could probably macrofy this. */
941 #undef PL_fold_locale
942 Perl_ppaddr_t** Perl_Gppaddr_ptr(pTHX) {
943 static Perl_ppaddr_t* const ppaddr_ptr = PL_ppaddr;
945 return (Perl_ppaddr_t**)&ppaddr_ptr;
947 Perl_check_t** Perl_Gcheck_ptr(pTHX) {
948 static Perl_check_t* const check_ptr = PL_check;
950 return (Perl_check_t**)&check_ptr;
952 unsigned char** Perl_Gfold_locale_ptr(pTHX) {
953 static unsigned char* const fold_locale_ptr = PL_fold_locale;
955 return (unsigned char**)&fold_locale_ptr;
961 #endif /* MULTIPLICITY */
966 close(CAPI) or die "Error closing CAPI: $!";
968 # functions that take va_list* for implementing vararg functions
969 # NOTE: makedef.pl must be updated if you add symbols to %vfuncs
970 # XXX %vfuncs currently unused
972 Perl_croak Perl_vcroak
974 Perl_warner Perl_vwarner
977 Perl_load_module Perl_vload_module
980 Perl_newSVpvf Perl_vnewSVpvf
981 Perl_sv_setpvf Perl_sv_vsetpvf
982 Perl_sv_setpvf_mg Perl_sv_vsetpvf_mg
983 Perl_sv_catpvf Perl_sv_vcatpvf
984 Perl_sv_catpvf_mg Perl_sv_vcatpvf_mg
985 Perl_dump_indent Perl_dump_vindent
986 Perl_default_protect Perl_vdefault_protect
989 # ex: set ts=8 sts=4 sw=4 noet: