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);
83 if (ref $filename) { # filehandle
87 # safer_unlink $filename if $filename ne '/dev/null';
88 open F, ">$filename-new" 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: $!";
115 safer_rename("$filename-new", $filename);
119 sub munge_c_files () {
122 warn "\@ARGV empty, nothing to do\n";
127 $functions->{$_[2]} = \@_ if $_[@_-1] =~ /\.\.\./;
129 } '/dev/null', '', '';
132 s{(\b(\w+)[ \t]*\([ \t]*(?!aTHX))}
136 if (exists $functions->{$f}) {
138 warn("$ARGV:$.:$`#$repl#$'");
143 close ARGV if eof; # restart $.
151 my $wrote_protected = 0;
160 my ($flags,$retval,$plain_func,@args) = @_;
162 my $has_context = ( $flags !~ /n/ );
163 my $never_returns = ( $flags =~ /r/ );
164 my $commented_out = ( $flags =~ /m/ );
165 my $is_malloc = ( $flags =~ /a/ );
166 my $can_ignore = ( $flags !~ /R/ ) && !$is_malloc;
170 my $splint_flags = "";
171 if ( $SPLINT && !$commented_out ) {
172 $splint_flags .= '/*@noreturn@*/ ' if $never_returns;
173 if ($can_ignore && ($retval ne 'void') && ($retval !~ /\*/)) {
174 $retval .= " /*\@alt void\@*/";
179 $retval = "STATIC $splint_flags$retval";
180 $func = "S_$plain_func";
183 $retval = "PERL_CALLCONV $splint_flags$retval";
184 if ($flags =~ /[bp]/) {
185 $func = "Perl_$plain_func";
190 $ret .= "$retval\t$func(";
191 if ( $has_context ) {
192 $ret .= @args ? "pTHX_ " : "pTHX";
196 for my $arg ( @args ) {
198 if ( $arg =~ /\*/ && $arg !~ /\b(NN|NULLOK)\b/ ) {
199 warn "$func: $arg needs NN or NULLOK\n";
200 our $unflagged_pointers;
201 ++$unflagged_pointers;
203 my $nn = ( $arg =~ s/\s*\bNN\b\s+// );
204 push( @nonnull, $n ) if $nn;
206 my $nullok = ( $arg =~ s/\s*\bNULLOK\b\s+// ); # strip NULLOK with no effect
208 # Make sure each arg has at least a type and a var name.
209 # An arg of "int" is valid C, but want it to be "int foo".
211 $temp_arg =~ s/\*//g;
212 $temp_arg =~ s/\s*\bstruct\b\s*/ /g;
213 if ( ($temp_arg ne "...")
214 && ($temp_arg !~ /\w+\s+(\w+)(?:\[\d+\])?\s*$/) ) {
215 warn "$func: $arg ($n) doesn't have a name\n";
217 if ( $SPLINT && $nullok && !$commented_out ) {
218 $arg = '/*@null@*/ ' . $arg;
220 if (defined $1 && $nn) {
221 push @names_of_nn, $1;
224 $ret .= join ", ", @args;
227 $ret .= "void" if !$has_context;
231 if ( $flags =~ /r/ ) {
232 push @attrs, "__attribute__noreturn__";
235 push @attrs, "__attribute__malloc__";
237 if ( !$can_ignore ) {
238 push @attrs, "__attribute__warn_unused_result__";
240 if ( $flags =~ /P/ ) {
241 push @attrs, "__attribute__pure__";
243 if( $flags =~ /f/ ) {
244 my $prefix = $has_context ? 'pTHX_' : '';
245 my $args = scalar @args;
247 my $macro = @nonnull && $nonnull[-1] == $pat
248 ? '__attribute__format__'
249 : '__attribute__format__null_ok__';
250 push @attrs, sprintf "%s(__printf__,%s%d,%s%d)", $macro,
251 $prefix, $pat, $prefix, $args;
254 my @pos = map { $has_context ? "pTHX_$_" : $_ } @nonnull;
255 push @attrs, map { sprintf( "__attribute__nonnull__(%s)", $_ ) } @pos;
259 $ret .= join( "\n", map { "\t\t\t$_" } @attrs );
262 $ret = "/* $ret */" if $commented_out;
264 $ret .= "\n#define PERL_ARGS_ASSERT_\U$plain_func\E\t\\\n\t"
265 . join '; ', map "assert($_)", @names_of_nn;
267 $ret .= @attrs ? "\n\n" : "\n";
272 # generates global.sym (API export list)
275 sub write_global_sym {
278 my ($flags,$retval,$func,@args) = @_;
279 # If a function is defined twice, for example before and after an
280 # #else, only process the flags on the first instance for global.sym
281 return $ret if $seen{$func}++;
282 if ($flags =~ /[AX]/ && $flags !~ /[xm]/
283 || $flags =~ /b/) { # public API, so export
284 $func = "Perl_$func" if $flags =~ /[pbX]/;
293 our $unflagged_pointers;
294 walk_table(\&write_protos, "proto.h", undef, "/* ex: set ro: */\n");
295 warn "$unflagged_pointers pointer arguments to clean up\n" if $unflagged_pointers;
296 walk_table(\&write_global_sym, "global.sym", undef, "# ex: set ro:\n");
298 # XXX others that may need adding
302 my @extvars = qw(sv_undef sv_yes sv_no na dowarn
304 tainting tainted stack_base stack_sp sv_arenaroot
306 curstash DBsub DBsingle DBassertion debstash
320 my ($syms, $file) = @_;
322 open(FILE, "< $file")
323 or die "embed.pl: Can't open $file: $!\n";
325 s/[ \t]*#.*//; # Delete comments.
326 if (/^\s*(\S+)\s*$/) {
328 warn "duplicate symbol $sym while processing $file line $.\n"
329 if exists $$syms{$sym};
336 # Perl_pp_* and Perl_ck_* are in pp.sym
337 readsyms my %ppsym, 'pp.sym';
339 sub readvars(\%$$@) {
340 my ($syms, $file,$pre,$keep_pre) = @_;
342 open(FILE, "< $file")
343 or die "embed.pl: Can't open $file: $!\n";
345 s/[ \t]*#.*//; # Delete comments.
346 if (/PERLVARA?I?S?C?\($pre(\w+)/) {
348 $sym = $pre . $sym if $keep_pre;
349 warn "duplicate symbol $sym while processing $file line $.\n"
350 if exists $$syms{$sym};
351 $$syms{$sym} = $pre || 1;
360 readvars %intrp, 'intrpvar.h','I';
361 readvars %globvar, 'perlvars.h','G';
371 my ($from, $to) = @_;
372 my $t = int(length($from) / 8);
373 "#define $from" . "\t" x ($t < 3 ? 3 - $t : 1) . "$to\n";
376 sub bincompat_var ($$) {
377 my ($pfx, $sym) = @_;
378 my $arg = ($pfx eq 'G' ? 'NULL' : 'aTHX');
379 undefine("PL_$sym") . hide("PL_$sym", "(*Perl_${pfx}${sym}_ptr($arg))");
383 my ($sym,$pre,$ptr) = @_;
384 hide("PL_$sym", "($ptr$pre$sym)");
389 return hide("PL_$pre$sym", "PL_$sym");
392 open(EM, '> embed.h-new') or die "Can't create embed.h: $!\n";
395 print EM do_not_edit ("embed.h"), <<'END';
397 /* (Doing namespace management portably in C is really gross.) */
399 /* By defining PERL_NO_SHORT_NAMES (not done by default) the short forms
400 * (like warn instead of Perl_warn) for the API are not defined.
401 * Not defining the short forms is a good thing for cleaner embedding. */
403 #ifndef PERL_NO_SHORT_NAMES
405 /* Hide global symbols */
407 #if !defined(PERL_IMPLICIT_CONTEXT)
411 # Try to elimiate lots of repeated
418 # by tracking state and merging foo and bar into one block.
419 my $ifdef_state = '';
423 my $new_ifdef_state = '';
426 $ret .= "$arg\n" if $arg =~ /^#\s*(if|ifn?def|else|endif)\b/;
429 my ($flags,$retval,$func,@args) = @_;
430 unless ($flags =~ /[om]/) {
432 $ret .= hide($func,"S_$func");
434 elsif ($flags =~ /p/) {
435 $ret .= hide($func,"Perl_$func");
438 if ($ret ne '' && $flags !~ /A/) {
441 = "#if defined(PERL_CORE) || defined(PERL_EXT)\n";
444 $new_ifdef_state = "#ifdef PERL_CORE\n";
447 if ($new_ifdef_state ne $ifdef_state) {
448 $ret = $new_ifdef_state . $ret;
452 if ($ifdef_state && $new_ifdef_state ne $ifdef_state) {
453 # Close the old one ahead of opening the new one.
454 $ret = "#endif\n$ret";
456 # Remember the new state.
457 $ifdef_state = $new_ifdef_state;
465 for $sym (sort keys %ppsym) {
467 print EM hide($sym, "Perl_$sym");
472 #else /* PERL_IMPLICIT_CONTEXT */
481 my $new_ifdef_state = '';
484 $ret .= "$arg\n" if $arg =~ /^#\s*(if|ifn?def|else|endif)\b/;
487 my ($flags,$retval,$func,@args) = @_;
488 unless ($flags =~ /[om]/) {
489 my $args = scalar @args;
490 if ($args and $args[$args-1] =~ /\.\.\./) {
491 # we're out of luck for varargs functions under CPP
493 elsif ($flags =~ /n/) {
495 $ret .= hide($func,"S_$func");
497 elsif ($flags =~ /p/) {
498 $ret .= hide($func,"Perl_$func");
502 my $alist = join(",", @az[0..$args-1]);
503 $ret = "#define $func($alist)";
504 my $t = int(length($ret) / 8);
505 $ret .= "\t" x ($t < 4 ? 4 - $t : 1);
507 $ret .= "S_$func(aTHX";
509 elsif ($flags =~ /p/) {
510 $ret .= "Perl_$func(aTHX";
512 $ret .= "_ " if $alist;
513 $ret .= $alist . ")\n";
516 unless ($flags =~ /A/) {
519 = "#if defined(PERL_CORE) || defined(PERL_EXT)\n";
522 $new_ifdef_state = "#ifdef PERL_CORE\n";
525 if ($new_ifdef_state ne $ifdef_state) {
526 $ret = $new_ifdef_state . $ret;
530 if ($ifdef_state && $new_ifdef_state ne $ifdef_state) {
531 # Close the old one ahead of opening the new one.
532 $ret = "#endif\n$ret";
534 # Remember the new state.
535 $ifdef_state = $new_ifdef_state;
543 for $sym (sort keys %ppsym) {
545 if ($sym =~ /^ck_/) {
546 print EM hide("$sym(a)", "Perl_$sym(aTHX_ a)");
548 elsif ($sym =~ /^pp_/) {
549 print EM hide("$sym()", "Perl_$sym(aTHX)");
552 warn "Illegal symbol '$sym' in pp.sym";
558 #endif /* PERL_IMPLICIT_CONTEXT */
560 #endif /* #ifndef PERL_NO_SHORT_NAMES */
566 /* Compatibility stubs. Compile extensions with -DPERL_NOCOMPAT to
570 #if !defined(PERL_CORE)
571 # define sv_setptrobj(rv,ptr,name) sv_setref_iv(rv,name,PTR2IV(ptr))
572 # define sv_setptrref(rv,ptr) sv_setref_iv(rv,NULL,PTR2IV(ptr))
575 #if !defined(PERL_CORE) && !defined(PERL_NOCOMPAT)
577 /* Compatibility for various misnamed functions. All functions
578 in the API that begin with "perl_" (not "Perl_") take an explicit
579 interpreter context pointer.
580 The following are not like that, but since they had a "perl_"
581 prefix in previous versions, we provide compatibility macros.
583 # define perl_atexit(a,b) call_atexit(a,b)
584 # define perl_call_argv(a,b,c) call_argv(a,b,c)
585 # define perl_call_pv(a,b) call_pv(a,b)
586 # define perl_call_method(a,b) call_method(a,b)
587 # define perl_call_sv(a,b) call_sv(a,b)
588 # define perl_eval_sv(a,b) eval_sv(a,b)
589 # define perl_eval_pv(a,b) eval_pv(a,b)
590 # define perl_require_pv(a) require_pv(a)
591 # define perl_get_sv(a,b) get_sv(a,b)
592 # define perl_get_av(a,b) get_av(a,b)
593 # define perl_get_hv(a,b) get_hv(a,b)
594 # define perl_get_cv(a,b) get_cv(a,b)
595 # define perl_init_i18nl10n(a) init_i18nl10n(a)
596 # define perl_init_i18nl14n(a) init_i18nl14n(a)
597 # define perl_new_ctype(a) new_ctype(a)
598 # define perl_new_collate(a) new_collate(a)
599 # define perl_new_numeric(a) new_numeric(a)
601 /* varargs functions can't be handled with CPP macros. :-(
602 This provides a set of compatibility functions that don't take
603 an extra argument but grab the context pointer using the macro
606 #if defined(PERL_IMPLICIT_CONTEXT) && !defined(PERL_NO_SHORT_NAMES)
607 # define croak Perl_croak_nocontext
608 # define deb Perl_deb_nocontext
609 # define die Perl_die_nocontext
610 # define form Perl_form_nocontext
611 # define load_module Perl_load_module_nocontext
612 # define mess Perl_mess_nocontext
613 # define newSVpvf Perl_newSVpvf_nocontext
614 # define sv_catpvf Perl_sv_catpvf_nocontext
615 # define sv_setpvf Perl_sv_setpvf_nocontext
616 # define warn Perl_warn_nocontext
617 # define warner Perl_warner_nocontext
618 # define sv_catpvf_mg Perl_sv_catpvf_mg_nocontext
619 # define sv_setpvf_mg Perl_sv_setpvf_mg_nocontext
622 #endif /* !defined(PERL_CORE) && !defined(PERL_NOCOMPAT) */
624 #if !defined(PERL_IMPLICIT_CONTEXT)
625 /* undefined symbols, point them back at the usual ones */
626 # define Perl_croak_nocontext Perl_croak
627 # define Perl_die_nocontext Perl_die
628 # define Perl_deb_nocontext Perl_deb
629 # define Perl_form_nocontext Perl_form
630 # define Perl_load_module_nocontext Perl_load_module
631 # define Perl_mess_nocontext Perl_mess
632 # define Perl_newSVpvf_nocontext Perl_newSVpvf
633 # define Perl_sv_catpvf_nocontext Perl_sv_catpvf
634 # define Perl_sv_setpvf_nocontext Perl_sv_setpvf
635 # define Perl_warn_nocontext Perl_warn
636 # define Perl_warner_nocontext Perl_warner
637 # define Perl_sv_catpvf_mg_nocontext Perl_sv_catpvf_mg
638 # define Perl_sv_setpvf_mg_nocontext Perl_sv_setpvf_mg
644 close(EM) or die "Error closing EM: $!";
645 safer_rename('embed.h-new', 'embed.h');
647 open(EM, '> embedvar.h-new')
648 or die "Can't create embedvar.h: $!\n";
651 print EM do_not_edit ("embedvar.h"), <<'END';
653 /* (Doing namespace management portably in C is really gross.) */
656 The following combinations of MULTIPLICITY and PERL_IMPLICIT_CONTEXT
659 2) MULTIPLICITY # supported for compatibility
660 3) MULTIPLICITY && PERL_IMPLICIT_CONTEXT
662 All other combinations of these flags are errors.
664 only #3 is supported directly, while #2 is a special
665 case of #3 (supported by redefining vTHX appropriately).
668 #if defined(MULTIPLICITY)
669 /* cases 2 and 3 above */
671 # if defined(PERL_IMPLICIT_CONTEXT)
674 # define vTHX PERL_GET_INTERP
679 for $sym (sort keys %intrp) {
680 print EM multon($sym,'I','vTHX->');
685 #else /* !MULTIPLICITY */
691 for $sym (sort keys %intrp) {
692 print EM multoff($sym,'I');
701 #endif /* MULTIPLICITY */
703 #if defined(PERL_GLOBAL_STRUCT)
707 for $sym (sort keys %globvar) {
708 print EM multon($sym, 'G','my_vars->');
709 print EM multon("G$sym",'', 'my_vars->');
714 #else /* !PERL_GLOBAL_STRUCT */
718 for $sym (sort keys %globvar) {
719 print EM multoff($sym,'G');
724 #endif /* PERL_GLOBAL_STRUCT */
726 #ifdef PERL_POLLUTE /* disabled by default in 5.6.0 */
730 for $sym (sort @extvars) {
731 print EM hide($sym,"PL_$sym");
736 #endif /* PERL_POLLUTE */
741 close(EM) or die "Error closing EM: $!";
742 safer_rename('embedvar.h-new', 'embedvar.h');
744 open(CAPI, '> perlapi.c-new') or die "Can't create perlapi.c: $!\n";
746 open(CAPIH, '> perlapi.h-new') or die "Can't create perlapi.h: $!\n";
749 print CAPIH do_not_edit ("perlapi.h"), <<'EOT';
751 /* declare accessor functions for Perl variables */
752 #ifndef __perlapi_h__
753 #define __perlapi_h__
755 #if defined (MULTIPLICITY)
764 #define PERLVAR(v,t) EXTERN_C t* Perl_##v##_ptr(pTHX);
765 #define PERLVARA(v,n,t) typedef t PL_##v##_t[n]; \
766 EXTERN_C PL_##v##_t* Perl_##v##_ptr(pTHX);
767 #define PERLVARI(v,t,i) PERLVAR(v,t)
768 #define PERLVARIC(v,t,i) PERLVAR(v, const t)
769 #define PERLVARISC(v,i) typedef const char PL_##v##_t[sizeof(i)]; \
770 EXTERN_C PL_##v##_t* Perl_##v##_ptr(pTHX);
772 #include "intrpvar.h"
773 #include "perlvars.h"
781 #ifndef PERL_GLOBAL_STRUCT
782 EXTERN_C Perl_ppaddr_t** Perl_Gppaddr_ptr(pTHX);
783 EXTERN_C Perl_check_t** Perl_Gcheck_ptr(pTHX);
784 EXTERN_C unsigned char** Perl_Gfold_locale_ptr(pTHX);
785 #define Perl_ppaddr_ptr Perl_Gppaddr_ptr
786 #define Perl_check_ptr Perl_Gcheck_ptr
787 #define Perl_fold_locale_ptr Perl_Gfold_locale_ptr
792 #if defined(PERL_CORE)
794 /* accessor functions for Perl variables (provide binary compatibility) */
796 /* these need to be mentioned here, or most linkers won't put them in
797 the perl executable */
799 #ifndef PERL_NO_FORCE_LINK
804 EXTCONST void * const PL_force_link_funcs[];
806 EXTCONST void * const PL_force_link_funcs[] = {
811 #define PERLVAR(v,t) (void*)Perl_##v##_ptr,
812 #define PERLVARA(v,n,t) PERLVAR(v,t)
813 #define PERLVARI(v,t,i) PERLVAR(v,t)
814 #define PERLVARIC(v,t,i) PERLVAR(v,t)
815 #define PERLVARISC(v,i) PERLVAR(v,char)
817 /* In Tru64 (__DEC && __osf__) the cc option -std1 causes that one
818 * cannot cast between void pointers and function pointers without
819 * info level warnings. The PL_force_link_funcs[] would cause a few
820 * hundred of those warnings. In code one can circumnavigate this by using
821 * unions that overlay the different pointers, but in declarations one
822 * cannot use this trick. Therefore we just disable the warning here
823 * for the duration of the PL_force_link_funcs[] declaration. */
825 #if defined(__DECC) && defined(__osf__)
827 #pragma message disable (nonstandcast)
830 #include "intrpvar.h"
831 #include "perlvars.h"
833 #if defined(__DECC) && defined(__osf__)
834 #pragma message restore
847 #endif /* PERL_NO_FORCE_LINK */
849 #else /* !PERL_CORE */
853 foreach $sym (sort keys %intrp) {
854 print CAPIH bincompat_var('I',$sym);
857 foreach $sym (sort keys %globvar) {
858 print CAPIH bincompat_var('G',$sym);
863 #endif /* !PERL_CORE */
864 #endif /* MULTIPLICITY */
866 #endif /* __perlapi_h__ */
870 close CAPIH or die "Error closing CAPIH: $!";
871 safer_rename('perlapi.h-new', 'perlapi.h');
873 print CAPI do_not_edit ("perlapi.c"), <<'EOT';
879 #if defined (MULTIPLICITY)
881 /* accessor functions for Perl variables (provides binary compatibility) */
890 #define PERLVAR(v,t) t* Perl_##v##_ptr(pTHX) \
891 { dVAR; PERL_UNUSED_CONTEXT; return &(aTHX->v); }
892 #define PERLVARA(v,n,t) PL_##v##_t* Perl_##v##_ptr(pTHX) \
893 { dVAR; PERL_UNUSED_CONTEXT; return &(aTHX->v); }
895 #define PERLVARI(v,t,i) PERLVAR(v,t)
896 #define PERLVARIC(v,t,i) PERLVAR(v, const t)
897 #define PERLVARISC(v,i) PL_##v##_t* Perl_##v##_ptr(pTHX) \
898 { dVAR; PERL_UNUSED_CONTEXT; return &(aTHX->v); }
900 #include "intrpvar.h"
904 #define PERLVAR(v,t) t* Perl_##v##_ptr(pTHX) \
905 { dVAR; PERL_UNUSED_CONTEXT; return &(PL_##v); }
906 #define PERLVARA(v,n,t) PL_##v##_t* Perl_##v##_ptr(pTHX) \
907 { dVAR; PERL_UNUSED_CONTEXT; return &(PL_##v); }
910 #define PERLVARIC(v,t,i) \
911 const t* Perl_##v##_ptr(pTHX) \
912 { PERL_UNUSED_CONTEXT; return (const t *)&(PL_##v); }
913 #define PERLVARISC(v,i) PL_##v##_t* Perl_##v##_ptr(pTHX) \
914 { dVAR; PERL_UNUSED_CONTEXT; return &(PL_##v); }
915 #include "perlvars.h"
923 #ifndef PERL_GLOBAL_STRUCT
924 /* A few evil special cases. Could probably macrofy this. */
927 #undef PL_fold_locale
928 Perl_ppaddr_t** Perl_Gppaddr_ptr(pTHX) {
929 static Perl_ppaddr_t* const ppaddr_ptr = PL_ppaddr;
931 return (Perl_ppaddr_t**)&ppaddr_ptr;
933 Perl_check_t** Perl_Gcheck_ptr(pTHX) {
934 static Perl_check_t* const check_ptr = PL_check;
936 return (Perl_check_t**)&check_ptr;
938 unsigned char** Perl_Gfold_locale_ptr(pTHX) {
939 static unsigned char* const fold_locale_ptr = PL_fold_locale;
941 return (unsigned char**)&fold_locale_ptr;
947 #endif /* MULTIPLICITY */
952 close(CAPI) or die "Error closing CAPI: $!";
953 safer_rename('perlapi.c-new', 'perlapi.c');
955 # functions that take va_list* for implementing vararg functions
956 # NOTE: makedef.pl must be updated if you add symbols to %vfuncs
957 # XXX %vfuncs currently unused
959 Perl_croak Perl_vcroak
961 Perl_warner Perl_vwarner
964 Perl_load_module Perl_vload_module
967 Perl_newSVpvf Perl_vnewSVpvf
968 Perl_sv_setpvf Perl_sv_vsetpvf
969 Perl_sv_setpvf_mg Perl_sv_vsetpvf_mg
970 Perl_sv_catpvf Perl_sv_vcatpvf
971 Perl_sv_catpvf_mg Perl_sv_vcatpvf_mg
972 Perl_dump_indent Perl_dump_vindent
973 Perl_default_protect Perl_vdefault_protect
976 # ex: set ts=8 sts=4 sw=4 noet: