This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
minor efficiency tweak
[perl5.git] / embed.pl
CommitLineData
5f05dabc 1#!/usr/bin/perl -w
e50aee73 2
5f05dabc 3require 5.003;
4
cea2e8a9
GS
5#
6# See database of global and static function prototypes at the __END__.
7# This is used to generate prototype headers under various configurations,
8# export symbols lists for different platforms, and macros to provide an
9# implicit interpreter context argument.
10#
11
12my $END = tell DATA;
13
14# walk table providing an array of components in each line to
15# subroutine, printing the result
16sub walk_table (&@) {
17 my $function = shift;
18 my $filename = shift || '-';
19 my $leader = shift;
20 my $trailer = shift;
21 my $F;
22 local *F;
23 if (ref $filename) { # filehandle
24 $F = $filename;
25 }
26 else {
27 open F, ">$filename" or die "Can't open $filename: $!";
28 $F = \*F;
29 }
30 print $F $leader if $leader;
31 seek DATA, $END, 0; # so we may restart
32 while (<DATA>) {
33 chomp;
34 while (s|\\$||) {
35 $_ .= <DATA>;
36 chomp;
37 }
38 my @args;
39 if (/^\s*(#|$)/) {
40 @args = $_;
41 }
42 else {
43 @args = split /\s*\|\s*/, $_;
44 }
45 print $F $function->(@args);
46 }
47 print $F $trailer if $trailer;
48 close $F unless ref $filename;
49}
50
51sub munge_c_files () {
52 my $functions = {};
53 unless (@ARGV) {
54 warn "\@ARGV empty, nothing to do\n";
55 return;
56 }
57 walk_table {
58 if (@_ > 1) {
59 $functions->{$_[2]} = \@_ if $_[@_-1] =~ /\.\.\./;
60 }
61 } '/dev/null';
62 local $^I = '.bak';
63 while (<>) {
64# if (/^#\s*include\s+"perl.h"/) {
65# my $file = uc $ARGV;
66# $file =~ s/\./_/g;
67# print "#define PERL_IN_$file\n";
68# }
69# s{^(\w+)\s*\(}
70# {
71# my $f = $1;
72# my $repl = "$f(";
73# if (exists $functions->{$f}) {
74# my $flags = $functions->{$f}[0];
75# $repl = "Perl_$repl" if $flags =~ /p/;
76# unless ($flags =~ /n/) {
77# $repl .= "pTHX";
78# $repl .= "_ " if @{$functions->{$f}} > 3;
79# }
80# warn("$ARGV:$.:$repl\n");
81# }
82# $repl;
83# }e;
84 s{(\b(\w+)[ \t]*\([ \t]*(?!aTHX))}
85 {
86 my $repl = $1;
87 my $f = $2;
88 if (exists $functions->{$f}) {
89 $repl .= "aTHX_ ";
90 warn("$ARGV:$.:$`#$repl#$'");
91 }
92 $repl;
93 }eg;
94 print;
95 close ARGV if eof; # restart $.
96 }
97 exit;
98}
99
100#munge_c_files();
101
102# generate proto.h
0cb96387
GS
103my $wrote_protected = 0;
104
cea2e8a9
GS
105sub write_protos {
106 my $ret = "";
107 if (@_ == 1) {
108 my $arg = shift;
0cb96387
GS
109 $ret .= "$arg\n" if $arg =~ /^#\s*(if|ifdef|else|endif)\b/
110 or $arg =~ /^\s*(public|protected|private):/;
cea2e8a9
GS
111 }
112 else {
113 my ($flags,$retval,$func,@args) = @_;
114 if ($flags =~ /s/) {
115 $retval = "STATIC $retval";
116 $func = "S_$func";
117 }
0cb96387
GS
118 else {
119 $retval = "VIRTUAL $retval";
120 if ($flags =~ /p/) {
121 $func = "Perl_$func";
122 }
cea2e8a9
GS
123 }
124 $ret .= "$retval\t$func(";
125 unless ($flags =~ /n/) {
126 $ret .= "pTHX";
127 $ret .= "_ " if @args;
128 }
129 if (@args) {
130 $ret .= join ", ", @args;
131 }
132 else {
133 $ret .= "void" if $flags =~ /n/;
134 }
135 $ret .= ")";
136 $ret .= " __attribute__((noreturn))" if $flags =~ /r/;
137 $ret .= ";\n";
138 }
139 $ret;
140}
141
142# generates global.sym, and populates %global with global symbols
143sub write_global_sym {
144 my $ret = "";
145 if (@_ > 1) {
146 my ($flags,$retval,$func,@args) = @_;
147 unless ($flags =~ /s/) {
148 $func = "Perl_$func" if $flags =~ /p/;
149 $ret = "$func\n";
150 }
151 }
152 $ret;
153}
154
155
156walk_table(\&write_protos, 'proto.h', <<'EOT');
157/*
158 * !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
159 * This file is autogenerated from data in embed.pl. Edit that file
160 * and run 'make regen_headers' to effect changes.
161 */
162
163EOT
164
165walk_table(\&write_global_sym, 'global.sym', <<'EOT');
166#
167# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
168# This file is autogenerated from data in embed.pl. Edit that file
169# and run 'make regen_headers' to effect changes.
170#
171
172EOT
173
709f4e38
GS
174# XXX others that may need adding
175# warnhook
176# hints
177# copline
84fee439
NIS
178my @extvars = qw(sv_undef sv_yes sv_no na dowarn
179 curcop compiling
180 tainting tainted stack_base stack_sp sv_arenaroot
256a4781 181 no_modify
84fee439
NIS
182 curstash DBsub DBsingle debstash
183 rsfp
184 stdingv
6b88bc9c
GS
185 defgv
186 errgv
3070f6ec
GS
187 rsfp_filters
188 perldb
709f4e38
GS
189 diehook
190 dirty
191 perl_destruct_level
84fee439
NIS
192 );
193
5f05dabc 194sub readsyms (\%$) {
195 my ($syms, $file) = @_;
5f05dabc 196 local (*FILE, $_);
197 open(FILE, "< $file")
198 or die "embed.pl: Can't open $file: $!\n";
199 while (<FILE>) {
200 s/[ \t]*#.*//; # Delete comments.
201 if (/^\s*(\S+)\s*$/) {
22c35a8c
GS
202 my $sym = $1;
203 warn "duplicate symbol $sym while processing $file\n"
204 if exists $$syms{$sym};
205 $$syms{$sym} = 1;
5f05dabc 206 }
207 }
208 close(FILE);
209}
210
cea2e8a9
GS
211# Perl_pp_* and Perl_ck_* are in pp.sym
212readsyms my %ppsym, 'pp.sym';
5f05dabc 213
c6af7a1a
GS
214sub readvars(\%$$@) {
215 my ($syms, $file,$pre,$keep_pre) = @_;
d4cce5f1
NIS
216 local (*FILE, $_);
217 open(FILE, "< $file")
218 or die "embed.pl: Can't open $file: $!\n";
219 while (<FILE>) {
220 s/[ \t]*#.*//; # Delete comments.
51371543 221 if (/PERLVARA?I?C?\($pre(\w+)/) {
22c35a8c 222 my $sym = $1;
c6af7a1a 223 $sym = $pre . $sym if $keep_pre;
22c35a8c
GS
224 warn "duplicate symbol $sym while processing $file\n"
225 if exists $$syms{$sym};
51371543 226 $$syms{$sym} = $pre || 1;
d4cce5f1
NIS
227 }
228 }
229 close(FILE);
230}
231
232my %intrp;
233my %thread;
234
235readvars %intrp, 'intrpvar.h','I';
236readvars %thread, 'thrdvar.h','T';
22239a37 237readvars %globvar, 'perlvars.h','G';
d4cce5f1 238
51371543 239foreach my $sym (sort keys %thread) {
34b58025 240 warn "$sym in intrpvar.h as well as thrdvar.h\n" if exists $intrp{$sym};
51371543 241}
d4cce5f1 242
c6af7a1a
GS
243sub undefine ($) {
244 my ($sym) = @_;
245 "#undef $sym\n";
246}
247
5f05dabc 248sub hide ($$) {
249 my ($from, $to) = @_;
250 my $t = int(length($from) / 8);
251 "#define $from" . "\t" x ($t < 3 ? 3 - $t : 1) . "$to\n";
252}
c6af7a1a 253
51371543
GS
254sub objxsub_var ($$) {
255 my ($pfx, $sym) = @_;
c5be433b
GS
256 my $arg = ($pfx eq 'G' ? 'NULL' : 'aTHXo');
257 undefine("PL_$sym") . hide("PL_$sym", "(*Perl_${pfx}${sym}_ptr($arg))");
c6af7a1a
GS
258}
259
3280af22
NIS
260sub embedvar ($) {
261 my ($sym) = @_;
262# hide($sym, "Perl_$sym");
263 return '';
264}
265
d4cce5f1
NIS
266sub multon ($$$) {
267 my ($sym,$pre,$ptr) = @_;
3280af22 268 hide("PL_$sym", "($ptr$pre$sym)");
5f05dabc 269}
d4cce5f1
NIS
270sub multoff ($$) {
271 my ($sym,$pre) = @_;
533c011a 272 return hide("PL_$pre$sym", "PL_$sym");
5f05dabc 273}
274
275unlink 'embed.h';
cea2e8a9 276open(EM, '> embed.h') or die "Can't create embed.h: $!\n";
e50aee73
AD
277
278print EM <<'END';
76b72cf1 279/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
cea2e8a9 280 This file is built by embed.pl from data in embed.pl, pp.sym, intrpvar.h,
c6af7a1a 281 perlvars.h and thrdvar.h. Any changes made here will be lost!
76b72cf1 282*/
e50aee73
AD
283
284/* (Doing namespace management portably in C is really gross.) */
285
22c35a8c 286/* NO_EMBED is no longer supported. i.e. EMBED is always active. */
820c3be9 287
22c35a8c 288/* Hide global symbols */
5f05dabc 289
22c35a8c 290#if !defined(PERL_OBJECT)
cea2e8a9 291#if !defined(PERL_IMPLICIT_CONTEXT)
e50aee73 292
e50aee73
AD
293END
294
cea2e8a9
GS
295walk_table {
296 my $ret = "";
297 if (@_ == 1) {
298 my $arg = shift;
299 $ret .= "$arg\n" if $arg =~ /^#\s*(if|ifdef|else|endif)\b/;
300 }
301 else {
302 my ($flags,$retval,$func,@args) = @_;
303 unless ($flags =~ /o/) {
304 if ($flags =~ /s/) {
305 $ret .= hide($func,"S_$func");
306 }
307 elsif ($flags =~ /p/) {
308 $ret .= hide($func,"Perl_$func");
309 }
310 }
311 }
312 $ret;
313} \*EM;
314
315for $sym (sort keys %ppsym) {
316 $sym =~ s/^Perl_//;
317 print EM hide($sym, "Perl_$sym");
318}
319
320print EM <<'END';
321
322#else /* PERL_IMPLICIT_CONTEXT */
323
324END
325
326my @az = ('a'..'z');
327
328walk_table {
329 my $ret = "";
330 if (@_ == 1) {
331 my $arg = shift;
332 $ret .= "$arg\n" if $arg =~ /^#\s*(if|ifdef|else|endif)\b/;
333 }
334 else {
335 my ($flags,$retval,$func,@args) = @_;
336 unless ($flags =~ /o/) {
337 my $args = scalar @args;
338 if ($args and $args[$args-1] =~ /\.\.\./) {
339 # we're out of luck for varargs functions under CPP
340 }
341 elsif ($flags =~ /n/) {
342 if ($flags =~ /s/) {
343 $ret .= hide($func,"S_$func");
344 }
345 elsif ($flags =~ /p/) {
346 $ret .= hide($func,"Perl_$func");
347 }
348 }
349 else {
350 my $alist = join(",", @az[0..$args-1]);
351 $ret = "#define $func($alist)";
352 my $t = int(length($ret) / 8);
353 $ret .= "\t" x ($t < 4 ? 4 - $t : 1);
354 if ($flags =~ /s/) {
355 $ret .= "S_$func(aTHX";
356 }
357 elsif ($flags =~ /p/) {
358 $ret .= "Perl_$func(aTHX";
359 }
360 $ret .= "_ " if $alist;
361 $ret .= $alist . ")\n";
362 }
363 }
364 }
365 $ret;
366} \*EM;
367
368for $sym (sort keys %ppsym) {
369 $sym =~ s/^Perl_//;
370 if ($sym =~ /^ck_/) {
371 print EM hide("$sym(a)", "Perl_$sym(aTHX_ a)");
372 }
373 elsif ($sym =~ /^pp_/) {
374 print EM hide("$sym()", "Perl_$sym(aTHX)");
375 }
376 else {
377 warn "Illegal symbol '$sym' in pp.sym";
378 }
e50aee73
AD
379}
380
e50aee73
AD
381print EM <<'END';
382
cea2e8a9 383#endif /* PERL_IMPLICIT_CONTEXT */
22c35a8c
GS
384#else /* PERL_OBJECT */
385
386END
387
cea2e8a9
GS
388walk_table {
389 my $ret = "";
390 if (@_ == 1) {
391 my $arg = shift;
392 $ret .= "$arg\n" if $arg =~ /^#\s*(if|ifdef|else|endif)\b/;
393 }
394 else {
395 my ($flags,$retval,$func,@args) = @_;
0cb96387
GS
396 if ($flags =~ /s/) {
397 $ret .= hide("S_$func","CPerlObj::S_$func");
398 $ret .= hide($func,"S_$func");
399 }
400 elsif ($flags =~ /p/) {
401 $ret .= hide("Perl_$func","CPerlObj::Perl_$func");
402 $ret .= hide($func,"Perl_$func");
403 }
404 else {
405 $ret .= hide($func,"CPerlObj::$func");
cea2e8a9
GS
406 }
407 }
408 $ret;
409} \*EM;
410
411for $sym (sort keys %ppsym) {
412 $sym =~ s/^Perl_//;
0cb96387
GS
413 print EM hide("Perl_$sym", "CPerlObj::Perl_$sym");
414 print EM hide($sym, "Perl_$sym");
22c35a8c
GS
415}
416
417print EM <<'END';
418
419#endif /* PERL_OBJECT */
e50aee73 420
cea2e8a9
GS
421/* Compatibility stubs. Compile extensions with -DPERL_NOCOMPAT to
422 disable them.
423 */
424
425#if !defined(PERL_CORE) && !defined(PERL_NOCOMPAT)
426
427# define sv_setptrobj(rv,ptr,name) sv_setref_iv(rv,name,(IV)ptr)
428# define sv_setptrref(rv,ptr) sv_setref_iv(rv,Nullch,(IV)ptr)
429
430
431/* Compatibility for various misnamed functions. All functions
432 in the API that begin with "perl_" (not "Perl_") take an explicit
433 interpreter context pointer.
434 The following are not like that, but since they had a "perl_"
435 prefix in previous versions, we provide compatibility macros.
436 */
437# define perl_atexit call_atexit
438# define perl_call_argv call_argv
439# define perl_call_pv call_pv
440# define perl_call_method call_method
441# define perl_call_sv call_sv
442# define perl_eval_sv eval_sv
443# define perl_eval_pv eval_pv
444# define perl_require_pv require_pv
445# define perl_get_sv get_sv
446# define perl_get_av get_av
447# define perl_get_hv get_hv
448# define perl_get_cv get_cv
449# define perl_init_i18nl10n init_i18nl10n
450# define perl_init_i18nl14n init_i18nl14n
451# define perl_new_ctype new_ctype
452# define perl_new_collate new_collate
453# define perl_new_numeric new_numeric
454
455/* varargs functions can't be handled with CPP macros. :-(
456 This provides a set of compatibility functions that don't take
457 an extra argument but grab the context pointer using the macro
458 dTHX.
459 */
c5be433b 460#if defined(PERL_IMPLICIT_CONTEXT) && !defined(PERL_OBJECT)
cea2e8a9 461# define croak Perl_croak_nocontext
c5be433b 462# define deb Perl_deb_nocontext
cea2e8a9
GS
463# define die Perl_die_nocontext
464# define form Perl_form_nocontext
465# define newSVpvf Perl_newSVpvf_nocontext
466# define sv_catpvf Perl_sv_catpvf_nocontext
467# define sv_setpvf Perl_sv_setpvf_nocontext
468# define warn Perl_warn_nocontext
c5be433b 469# define warner Perl_warner_nocontext
cea2e8a9
GS
470# define sv_catpvf_mg Perl_sv_catpvf_mg_nocontext
471# define sv_setpvf_mg Perl_sv_setpvf_mg_nocontext
472#endif
473
474#endif /* !defined(PERL_CORE) && !defined(PERL_NOCOMPAT) */
475
476#if !defined(PERL_IMPLICIT_CONTEXT)
477/* undefined symbols, point them back at the usual ones */
478# define Perl_croak_nocontext Perl_croak
479# define Perl_die_nocontext Perl_die
c5be433b 480# define Perl_deb_nocontext Perl_deb
cea2e8a9 481# define Perl_form_nocontext Perl_form
c5be433b
GS
482# define Perl_newSVpvf_nocontext Perl_newSVpvf
483# define Perl_sv_catpvf_nocontext Perl_sv_catpvf
484# define Perl_sv_setpvf_nocontext Perl_sv_setpvf
cea2e8a9 485# define Perl_warn_nocontext Perl_warn
c5be433b 486# define Perl_warner_nocontext Perl_warner
cea2e8a9
GS
487# define Perl_sv_catpvf_mg_nocontext Perl_sv_catpvf_mg
488# define Perl_sv_setpvf_mg_nocontext Perl_sv_setpvf_mg
489#endif
db5cf5a9 490
d4cce5f1
NIS
491END
492
493close(EM);
494
495unlink 'embedvar.h';
496open(EM, '> embedvar.h')
497 or die "Can't create embedvar.h: $!\n";
498
499print EM <<'END';
500/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
cea2e8a9 501 This file is built by embed.pl from data in embed.pl, pp.sym, intrpvar.h,
c6af7a1a 502 perlvars.h and thrdvar.h. Any changes made here will be lost!
d4cce5f1
NIS
503*/
504
505/* (Doing namespace management portably in C is really gross.) */
506
5f05dabc 507/* Put interpreter-specific symbols into a struct? */
e50aee73
AD
508
509#ifdef MULTIPLICITY
510
d4cce5f1
NIS
511#ifndef USE_THREADS
512/* If we do not have threads then per-thread vars are per-interpreter */
513
cea2e8a9
GS
514#ifdef PERL_IMPLICIT_CONTEXT
515
516/* everything has an implicit context pointer */
517
518END
519
520for $sym (sort keys %thread) {
521 print EM multon($sym,'T','my_perl->');
522}
523
524print EM <<'END';
525
526#else /* !PERL_IMPLICIT_CONTEXT */
527
528/* traditional MULTIPLICITY (intepreter is in a global) */
529
e50aee73
AD
530END
531
cea2e8a9 532
d4cce5f1 533for $sym (sort keys %thread) {
c5be433b 534 print EM multon($sym,'T','PERL_GET_INTERP->');
d4cce5f1
NIS
535}
536
537print EM <<'END';
538
cea2e8a9 539#endif /* !PERL_IMPLICIT_CONTEXT */
d4cce5f1
NIS
540#endif /* !USE_THREADS */
541
542/* These are always per-interpreter if there is more than one */
543
544END
545
546for $sym (sort keys %intrp) {
c5be433b 547 print EM multon($sym,'I','PERL_GET_INTERP->');
760ac839 548}
760ac839 549
55497cff 550print EM <<'END';
551
5f05dabc 552#else /* !MULTIPLICITY */
55497cff 553
554END
760ac839 555
d4cce5f1
NIS
556for $sym (sort keys %intrp) {
557 print EM multoff($sym,'I');
e50aee73 558}
e50aee73 559
56d28764
CS
560print EM <<'END';
561
d4cce5f1
NIS
562#ifndef USE_THREADS
563
564END
565
566for $sym (sort keys %thread) {
567 print EM multoff($sym,'T');
568}
569
570print EM <<'END';
571
572#endif /* USE_THREADS */
573
574/* Hide what would have been interpreter-specific symbols? */
5f05dabc 575
56d28764 576END
e50aee73 577
d4cce5f1 578for $sym (sort keys %intrp) {
3280af22 579 print EM embedvar($sym);
d4cce5f1
NIS
580}
581
582print EM <<'END';
583
584#ifndef USE_THREADS
585
586END
587
588for $sym (sort keys %thread) {
3280af22 589 print EM embedvar($sym);
5f05dabc 590}
591
592print EM <<'END';
593
d4cce5f1 594#endif /* USE_THREADS */
e50aee73 595#endif /* MULTIPLICITY */
d4cce5f1
NIS
596
597/* Now same trickey for per-thread variables */
598
599#ifdef USE_THREADS
600
601END
602
603for $sym (sort keys %thread) {
22239a37 604 print EM multon($sym,'T','thr->');
d4cce5f1
NIS
605}
606
607print EM <<'END';
608
609#endif /* USE_THREADS */
610
22239a37
NIS
611#ifdef PERL_GLOBAL_STRUCT
612
613END
614
615for $sym (sort keys %globvar) {
533c011a 616 print EM multon($sym,'G','PL_Vars.');
22239a37
NIS
617}
618
619print EM <<'END';
620
621#else /* !PERL_GLOBAL_STRUCT */
622
623END
624
625for $sym (sort keys %globvar) {
626 print EM multoff($sym,'G');
627}
628
629print EM <<'END';
630
22239a37
NIS
631END
632
633for $sym (sort keys %globvar) {
3280af22 634 print EM embedvar($sym);
22239a37
NIS
635}
636
637print EM <<'END';
638
22239a37
NIS
639#endif /* PERL_GLOBAL_STRUCT */
640
e50aee73
AD
641END
642
84fee439
NIS
643print EM <<'END';
644
db5cf5a9 645#ifdef PERL_POLLUTE /* disabled by default in 5.006 */
84fee439
NIS
646
647END
648
649for $sym (sort @extvars) {
650 print EM hide($sym,"PL_$sym");
651}
652
653print EM <<'END';
654
db5cf5a9 655#endif /* PERL_POLLUTE */
84fee439
NIS
656END
657
658
3fe35a81 659close(EM);
c6af7a1a
GS
660
661unlink 'objXSUB.h';
662open(OBX, '> objXSUB.h')
663 or die "Can't create objXSUB.h: $!\n";
664
665print OBX <<'EOT';
666/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
cea2e8a9 667 This file is built by embed.pl from data in embed.pl, pp.sym, intrpvar.h,
c6af7a1a
GS
668 perlvars.h and thrdvar.h. Any changes made here will be lost!
669*/
670
671#ifndef __objXSUB_h__
672#define __objXSUB_h__
673
674/* Variables */
675
676EOT
677
51371543
GS
678foreach my $sym (sort keys %intrp) {
679 print OBX objxsub_var('I',$sym);
680}
681
682foreach my $sym (sort keys %thread) {
683 print OBX objxsub_var('T',$sym);
684}
685
686foreach my $sym (sort keys %globvar) {
687 print OBX objxsub_var('G',$sym);
c6af7a1a
GS
688}
689
690print OBX <<'EOT';
691
692/* Functions */
693
c5be433b
GS
694#if defined(PERL_OBJECT)
695
696/* XXX soon to be eliminated, only a few things in PERLCORE need these now */
697
c6af7a1a
GS
698EOT
699
cea2e8a9
GS
700walk_table {
701 my $ret = "";
702 if (@_ == 1) {
703 my $arg = shift;
704 $ret .= "$arg\n" if $arg =~ /^#\s*(if|ifdef|else|endif)\b/;
705 }
706 else {
707 my ($flags,$retval,$func,@args) = @_;
0cb96387 708 unless ($flags =~ /s/) {
cea2e8a9 709 if ($flags =~ /p/) {
0cb96387
GS
710 $ret .= undefine("Perl_$func") . hide("Perl_$func","pPerl->Perl_$func");
711 $ret .= undefine($func) . hide($func,"Perl_$func");
712 }
713 else {
cea2e8a9
GS
714 $ret .= undefine($func) . hide($func,"pPerl->$func");
715 }
716 }
717 }
718 $ret;
719} \*OBX;
c6af7a1a 720
cea2e8a9
GS
721for $sym (sort keys %ppsym) {
722 $sym =~ s/^Perl_//;
0cb96387
GS
723 print OBX undefine("Perl_$sym") . hide("Perl_$sym", "pPerl->Perl_$sym");
724 print OBX undefine($sym) . hide($sym, "Perl_$sym");
c6af7a1a
GS
725}
726
c6af7a1a
GS
727print OBX <<'EOT';
728
c5be433b 729#endif /* PERL_OBJECT */
c6af7a1a
GS
730#endif /* __objXSUB_h__ */
731EOT
732
733close(OBX);
cea2e8a9 734
51371543
GS
735unlink 'perlapi.h';
736unlink 'perlapi.c';
737open(CAPI, '> perlapi.c') or die "Can't create perlapi.c: $!\n";
738open(CAPIH, '> perlapi.h') or die "Can't create perlapi.h: $!\n";
739
740print CAPIH <<'EOT';
741/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
742 This file is built by embed.pl from data in embed.pl, pp.sym, intrpvar.h,
743 perlvars.h and thrdvar.h. Any changes made here will be lost!
744*/
745
51371543
GS
746/* declare accessor functions for Perl variables */
747
c5be433b
GS
748#if defined(PERL_OBJECT) || defined (PERL_CAPI)
749
750#if defined(PERL_OBJECT)
751# undef aTHXo
752# define aTHXo pPerl
753# undef aTHXo_
754# define aTHXo_ aTHXo,
755# undef _aTHXo
756# define _aTHXo ,aTHXo
757#endif /* PERL_OBJECT */
758
51371543
GS
759START_EXTERN_C
760
761#undef PERLVAR
762#undef PERLVARA
763#undef PERLVARI
764#undef PERLVARIC
c5be433b 765#define PERLVAR(v,t) EXTERN_C t* Perl_##v##_ptr(pTHXo);
51371543 766#define PERLVARA(v,n,t) typedef t PL_##v##_t[n]; \
c5be433b 767 EXTERN_C PL_##v##_t* Perl_##v##_ptr(pTHXo);
51371543 768#define PERLVARI(v,t,i) PERLVAR(v,t)
c5be433b 769#define PERLVARIC(v,t,i) PERLVAR(v, const t)
51371543
GS
770
771#include "thrdvar.h"
772#include "intrpvar.h"
773#include "perlvars.h"
774
775#undef PERLVAR
776#undef PERLVARA
777#undef PERLVARI
778#undef PERLVARIC
779
780END_EXTERN_C
781
c5be433b 782#endif /* PERL_OBJECT || PERL_CAPI */
51371543
GS
783
784EOT
785
786
787print CAPI <<'EOT';
788/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
789 This file is built by embed.pl from data in embed.pl, pp.sym, intrpvar.h,
790 perlvars.h and thrdvar.h. Any changes made here will be lost!
791*/
792
793#include "EXTERN.h"
794#include "perl.h"
795#include "perlapi.h"
796
797#if defined(PERL_OBJECT)
798
799/* accessor functions for Perl variables (provides binary compatibility) */
800START_EXTERN_C
801
802#undef PERLVAR
803#undef PERLVARA
804#undef PERLVARI
805#undef PERLVARIC
c5be433b
GS
806#define PERLVAR(v,t) t* Perl_##v##_ptr(pTHXo) \
807 { return &(aTHXo->PL_##v); }
808#define PERLVARA(v,n,t) PL_##v##_t* Perl_##v##_ptr(pTHXo) \
809 { return &(aTHXo->PL_##v); }
51371543 810#define PERLVARI(v,t,i) PERLVAR(v,t)
c5be433b 811#define PERLVARIC(v,t,i) PERLVAR(v, const t)
51371543
GS
812
813#include "thrdvar.h"
814#include "intrpvar.h"
c5be433b
GS
815
816#undef PERLVAR
817#undef PERLVARA
818#define PERLVAR(v,t) t* Perl_##v##_ptr(pTHXo) \
819 { return &(PL_##v); }
820#define PERLVARA(v,n,t) PL_##v##_t* Perl_##v##_ptr(pTHXo) \
821 { return &(PL_##v); }
51371543
GS
822#include "perlvars.h"
823
824#undef PERLVAR
825#undef PERLVARA
826#undef PERLVARI
827#undef PERLVARIC
828
829EOT
830
c5be433b
GS
831# functions that take va_list* for implementing vararg functions
832my %vfuncs = qw(
833 Perl_croak Perl_vcroak
834 Perl_warn Perl_vwarn
835 Perl_warner Perl_vwarner
836 Perl_die Perl_vdie
837 Perl_form Perl_vform
838 Perl_deb Perl_vdeb
839 Perl_newSVpvf Perl_vnewSVpvf
840 Perl_sv_setpvf Perl_sv_vsetpvf
841 Perl_sv_setpvf_mg Perl_sv_vsetpvf_mg
842 Perl_sv_catpvf Perl_sv_vcatpvf
843 Perl_sv_catpvf_mg Perl_sv_vcatpvf_mg
844 Perl_dump_indent Perl_dump_vindent
845 Perl_default_protect Perl_vdefault_protect
846);
847
51371543 848sub emit_func {
c5be433b 849 my ($addcontext, $rettype,$func,@args) = @_;
51371543
GS
850 my @aargs = @args;
851 for my $a (@aargs) { $a =~ s/^.*\b(\w+)$/$1/ }
c5be433b
GS
852 my $ctxarg = '';
853 if (not $addcontext) {
854 $ctxarg = 'pTHXo';
855 $ctxarg .= '_ ' if @args;
856 }
857 my $decl = '';
858 if ($addcontext) {
859 $decl .= " dTHXo;\n";
860 }
51371543 861 local $" = ', ';
c5be433b
GS
862 my $return = ($rettype =~ /^\s*(void|Free_t|Signal_t)\s*$/
863 ? '' : 'return ');
864 my $emitval = '';
865 if (@args and $args[$#args] =~ /\.\.\./) {
866 pop @args;
867 pop @aargs;
868 my $retarg = '';
869 my $ctxfunc = $func;
870 $ctxfunc =~ s/_nocontext$//;
871 return $emitval unless exists $vfuncs{$ctxfunc};
872 if (length $return) {
873 $decl .= " $rettype retval;\n";
874 $retarg .= "retval = ";
875 $return = "\n ${return}retval;\n";
876 }
877 $emitval .= <<EOT
878$rettype
879$func($ctxarg@args)
51371543 880{
c5be433b
GS
881$decl va_list args;
882 va_start(args, $aargs[$#aargs]);
883 $retarg((CPerlObj*)pPerl)->$vfuncs{$ctxfunc}(@aargs, &args);
884 va_end(args);$return
51371543
GS
885}
886EOT
c5be433b
GS
887 }
888 else {
889 $emitval .= <<EOT
890$rettype
891$func($ctxarg@args)
892{
893$decl $return((CPerlObj*)pPerl)->$func(@aargs);
894}
895EOT
896 }
897 $emitval;
51371543
GS
898}
899
900# XXXX temporary hack
901for my $sym (qw(
902 perl_construct
903 perl_destruct
904 perl_free
905 perl_run
906 perl_parse
907 ))
908{
909 $skipapi_funcs{$sym}++;
910}
911
912walk_table {
913 my $ret = "";
914 if (@_ == 1) {
915 my $arg = shift;
916 $ret .= "$arg\n" if $arg =~ /^#\s*(if|ifdef|else|endif)\b/;
917 }
918 else {
919 my ($flags,$retval,$func,@args) = @_;
920 return $ret if exists $skipapi_funcs{$func};
c5be433b
GS
921 unless ($flags =~ /s/) {
922 $ret .= "\n";
923 my $addctx = 1 if $flags =~ /n/;
924 if ($flags =~ /p/) {
925 $ret .= undefine("Perl_$func");
926 $ret .= emit_func($addctx,$retval,"Perl_$func",@args);
927 }
928 else {
929 $ret .= undefine($func);
930 $ret .= emit_func($addctx,$retval,$func,@args);
51371543
GS
931 }
932 }
933 }
934 $ret;
935} \*CAPI;
936
937for $sym (sort keys %ppsym) {
938 $sym =~ s/^Perl_//;
939 print CAPI "\n";
940 print CAPI undefine("Perl_$sym");
941 if ($sym =~ /^ck_/) {
c5be433b 942 print CAPI emit_func(0, 'OP *',"Perl_$sym",'OP *o');
51371543
GS
943 }
944 else { # pp_foo
c5be433b 945 print CAPI emit_func(0, 'OP *',"Perl_$sym");
51371543
GS
946 }
947}
948
949print CAPI <<'EOT';
950
c5be433b
GS
951#undef Perl_fprintf_nocontext
952int
953Perl_fprintf_nocontext(PerlIO *stream, const char *format, ...)
954{
955 dTHXo;
956 va_list(arglist);
957 va_start(arglist, format);
958 return (*pPerl->PL_StdIO->pVprintf)(pPerl->PL_StdIO, stream, format, arglist);
959}
960
51371543
GS
961END_EXTERN_C
962
963#endif /* PERL_OBJECT */
964EOT
965
cea2e8a9
GS
966__END__
967
968# Lines are of the form:
969# flags|return_type|function_name|return_type|arg1|arg2|...|argN
970#
971# They may continue on multiple lines when \w| begins the next line.
972# Leading and trailing whitespace will be ignored in each component.
973#
974# flags are single letters with following meanings:
975# s static function, should have an S_ prefix in source
976# file
977# n has no implicit interpreter/thread context argument
978# p function has a Perl_ prefix
979# r function never returns
980# o has no compatibility macro (#define foo Perl_foo)
981#
982# Individual flags may be separated by whitespace.
983#
984# New global functions should be added at the end for binary compatibility
985# in some configurations.
986#
987# TODO: 1) Add a flag to mark the functions that are part of the public API.
988# 2) Add a field for documentation, so that L<perlguts/"API LISTING">
989# may be autogenerated.
990#
991
0cb96387
GS
992#if defined(PERL_OBJECT)
993public:
994#endif
cea2e8a9
GS
995p |SV* |amagic_call |SV* left|SV* right|int method|int dir
996p |bool |Gv_AMupdate |HV* stash
997p |OP* |append_elem |I32 optype|OP* head|OP* tail
998p |OP* |append_list |I32 optype|LISTOP* first|LISTOP* last
999p |I32 |apply |I32 type|SV** mark|SV** sp
1000p |void |assertref |OP* o
1001p |bool |avhv_exists_ent|AV *ar|SV* keysv|U32 hash
1002p |SV** |avhv_fetch_ent |AV *ar|SV* keysv|I32 lval|U32 hash
1003p |HE* |avhv_iternext |AV *ar
1004p |SV* |avhv_iterval |AV *ar|HE* entry
1005p |HV* |avhv_keys |AV *ar
1006p |void |av_clear |AV* ar
1007p |void |av_extend |AV* ar|I32 key
1008p |AV* |av_fake |I32 size|SV** svp
1009p |SV** |av_fetch |AV* ar|I32 key|I32 lval
1010p |void |av_fill |AV* ar|I32 fill
1011p |I32 |av_len |AV* ar
1012p |AV* |av_make |I32 size|SV** svp
1013p |SV* |av_pop |AV* ar
1014p |void |av_push |AV* ar|SV* val
1015p |void |av_reify |AV* ar
1016p |SV* |av_shift |AV* ar
1017p |SV** |av_store |AV* ar|I32 key|SV* val
1018p |void |av_undef |AV* ar
1019p |void |av_unshift |AV* ar|I32 num
1020p |OP* |bind_match |I32 type|OP* left|OP* pat
1021p |OP* |block_end |I32 floor|OP* seq
1022p |I32 |block_gimme
1023p |int |block_start |int full
1024p |void |boot_core_UNIVERSAL
1025p |void |call_list |I32 oldscope|AV* av_list
1026p |I32 |cando |I32 bit|I32 effective|Stat_t* statbufp
cad2e5aa
JH
1027p |U32 |cast_ulong |NV f
1028p |I32 |cast_i32 |NV f
1029p |IV |cast_iv |NV f
1030p |UV |cast_uv |NV f
cea2e8a9
GS
1031#if !defined(HAS_TRUNCATE) && !defined(HAS_CHSIZE) && defined(F_FREESP)
1032p |I32 |my_chsize |int fd|Off_t length
1033#endif
1034#if defined(USE_THREADS)
1035p |MAGIC* |condpair_magic |SV *sv
1036#endif
1037p |OP* |convert |I32 optype|I32 flags|OP* o
1038pr |void |croak |const char* pat|...
c5be433b 1039pr |void |vcroak |const char* pat|va_list* args
cea2e8a9
GS
1040#if defined(PERL_IMPLICIT_CONTEXT)
1041npr |void |croak_nocontext|const char* pat|...
1042np |OP* |die_nocontext |const char* pat|...
c5be433b 1043np |void |deb_nocontext |const char* pat|...
cea2e8a9
GS
1044np |char* |form_nocontext |const char* pat|...
1045np |void |warn_nocontext |const char* pat|...
c5be433b 1046np |void |warner_nocontext|U32 err|const char* pat|...
cea2e8a9
GS
1047np |SV* |newSVpvf_nocontext|const char* pat|...
1048np |void |sv_catpvf_nocontext|SV* sv|const char* pat|...
1049np |void |sv_setpvf_nocontext|SV* sv|const char* pat|...
1050np |void |sv_catpvf_mg_nocontext|SV* sv|const char* pat|...
1051np |void |sv_setpvf_mg_nocontext|SV* sv|const char* pat|...
c5be433b 1052np |int |fprintf_nocontext|PerlIO* stream|const char* fmt|...
cea2e8a9
GS
1053#endif
1054p |void |cv_ckproto |CV* cv|GV* gv|char* p
1055p |CV* |cv_clone |CV* proto
1056p |SV* |cv_const_sv |CV* cv
1057p |SV* |op_const_sv |OP* o|CV* cv
1058p |void |cv_undef |CV* cv
1059p |void |cx_dump |PERL_CONTEXT* cs
1060p |SV* |filter_add |filter_t funcp|SV* datasv
1061p |void |filter_del |filter_t funcp
1062p |I32 |filter_read |int idx|SV* buffer|int maxlen
1063p |char** |get_op_descs
1064p |char** |get_op_names
1065p |char* |get_no_modify
1066p |U32* |get_opargs
0cb96387 1067p |PPADDR_t*|get_ppaddr
cea2e8a9
GS
1068p |I32 |cxinc
1069p |void |deb |const char* pat|...
c5be433b 1070p |void |vdeb |const char* pat|va_list* args
cea2e8a9
GS
1071p |void |deb_growlevel
1072p |void |debprofdump
1073p |I32 |debop |OP* o
1074p |I32 |debstack
1075p |I32 |debstackptrs
1076p |char* |delimcpy |char* to|char* toend|char* from \
1077 |char* fromend|int delim|I32* retlen
1078p |void |deprecate |char* s
1079p |OP* |die |const char* pat|...
c5be433b 1080p |OP* |vdie |const char* pat|va_list* args
cea2e8a9
GS
1081p |OP* |die_where |char* message|STRLEN msglen
1082p |void |dounwind |I32 cxix
1083p |bool |do_aexec |SV* really|SV** mark|SV** sp
1084p |int |do_binmode |PerlIO *fp|int iotype|int flag
1085p |void |do_chop |SV* asv|SV* sv
1086p |bool |do_close |GV* gv|bool not_implicit
1087p |bool |do_eof |GV* gv
1088p |bool |do_exec |char* cmd
1089#if !defined(WIN32)
1090p |bool |do_exec3 |char* cmd|int fd|int flag
1091#endif
1092p |void |do_execfree
1093#if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
1094p |I32 |do_ipcctl |I32 optype|SV** mark|SV** sp
1095p |I32 |do_ipcget |I32 optype|SV** mark|SV** sp
1096p |I32 |do_msgrcv |SV** mark|SV** sp
1097p |I32 |do_msgsnd |SV** mark|SV** sp
1098p |I32 |do_semop |SV** mark|SV** sp
1099p |I32 |do_shmio |I32 optype|SV** mark|SV** sp
1100#endif
1101p |void |do_join |SV* sv|SV* del|SV** mark|SV** sp
1102p |OP* |do_kv
1103p |bool |do_open |GV* gv|char* name|I32 len|int as_raw \
1104 |int rawmode|int rawperm|PerlIO* supplied_fp
1105p |void |do_pipe |SV* sv|GV* rgv|GV* wgv
1106p |bool |do_print |SV* sv|PerlIO* fp
1107p |OP* |do_readline
1108p |I32 |do_chomp |SV* sv
1109p |bool |do_seek |GV* gv|Off_t pos|int whence
1110p |void |do_sprintf |SV* sv|I32 len|SV** sarg
1111p |Off_t |do_sysseek |GV* gv|Off_t pos|int whence
1112p |Off_t |do_tell |GV* gv
1113p |I32 |do_trans |SV* sv
1114p |void |do_vecset |SV* sv
1115p |void |do_vop |I32 optype|SV* sv|SV* left|SV* right
1116p |OP* |dofile |OP* term
1117p |I32 |dowantarray
1118p |void |dump_all
1119p |void |dump_eval
1120#if defined(DUMP_FDS)
1121p |void |dump_fds |char* s
1122#endif
1123p |void |dump_form |GV* gv
1124p |void |gv_dump |GV* gv
1125p |void |op_dump |OP* arg
1126p |void |pmop_dump |PMOP* pm
1127p |void |dump_packsubs |HV* stash
1128p |void |dump_sub |GV* gv
1129p |void |fbm_compile |SV* sv|U32 flags
1130p |char* |fbm_instr |unsigned char* big|unsigned char* bigend \
1131 |SV* littlesv|U32 flags
1132p |char* |find_script |char *scriptname|bool dosearch \
1133 |char **search_ext|I32 flags
1134#if defined(USE_THREADS)
1135p |PADOFFSET|find_threadsv|const char *name
1136#endif
1137p |OP* |force_list |OP* arg
1138p |OP* |fold_constants |OP* arg
1139p |char* |form |const char* pat|...
c5be433b 1140p |char* |vform |const char* pat|va_list* args
cea2e8a9
GS
1141p |void |free_tmps
1142p |OP* |gen_constant_list|OP* o
1143#if !defined(HAS_GETENV_LEN)
1144p |char* |getenv_len |char* key|unsigned long *len
1145#endif
1146p |void |gp_free |GV* gv
1147p |GP* |gp_ref |GP* gp
1148p |GV* |gv_AVadd |GV* gv
1149p |GV* |gv_HVadd |GV* gv
1150p |GV* |gv_IOadd |GV* gv
1151p |GV* |gv_autoload4 |HV* stash|const char* name|STRLEN len \
1152 |I32 method
1153p |void |gv_check |HV* stash
1154p |void |gv_efullname |SV* sv|GV* gv
1155p |void |gv_efullname3 |SV* sv|GV* gv|const char* prefix
1156p |GV* |gv_fetchfile |const char* name
1157p |GV* |gv_fetchmeth |HV* stash|const char* name|STRLEN len \
1158 |I32 level
1159p |GV* |gv_fetchmethod |HV* stash|const char* name
1160p |GV* |gv_fetchmethod_autoload|HV* stash|const char* name \
1161 |I32 autoload
1162p |GV* |gv_fetchpv |const char* name|I32 add|I32 sv_type
1163p |void |gv_fullname |SV* sv|GV* gv
1164p |void |gv_fullname3 |SV* sv|GV* gv|const char* prefix
1165p |void |gv_init |GV* gv|HV* stash|const char* name \
1166 |STRLEN len|int multi
1167p |HV* |gv_stashpv |const char* name|I32 create
1168p |HV* |gv_stashpvn |const char* name|U32 namelen|I32 create
1169p |HV* |gv_stashsv |SV* sv|I32 create
1170p |void |hv_clear |HV* tb
1171p |void |hv_delayfree_ent|HV* hv|HE* entry
1172p |SV* |hv_delete |HV* tb|const char* key|U32 klen|I32 flags
1173p |SV* |hv_delete_ent |HV* tb|SV* key|I32 flags|U32 hash
1174p |bool |hv_exists |HV* tb|const char* key|U32 klen
1175p |bool |hv_exists_ent |HV* tb|SV* key|U32 hash
1176p |SV** |hv_fetch |HV* tb|const char* key|U32 klen|I32 lval
1177p |HE* |hv_fetch_ent |HV* tb|SV* key|I32 lval|U32 hash
1178p |void |hv_free_ent |HV* hv|HE* entry
1179p |I32 |hv_iterinit |HV* tb
1180p |char* |hv_iterkey |HE* entry|I32* retlen
1181p |SV* |hv_iterkeysv |HE* entry
1182p |HE* |hv_iternext |HV* tb
1183p |SV* |hv_iternextsv |HV* hv|char** key|I32* retlen
1184p |SV* |hv_iterval |HV* tb|HE* entry
1185p |void |hv_ksplit |HV* hv|IV newmax
1186p |void |hv_magic |HV* hv|GV* gv|int how
1187p |SV** |hv_store |HV* tb|const char* key|U32 klen|SV* val \
1188 |U32 hash
1189p |HE* |hv_store_ent |HV* tb|SV* key|SV* val|U32 hash
1190p |void |hv_undef |HV* tb
1191p |I32 |ibcmp |const char* a|const char* b|I32 len
1192p |I32 |ibcmp_locale |const char* a|const char* b|I32 len
1193p |I32 |ingroup |I32 testgid|I32 effective
1194p |void |init_stacks
1195p |U32 |intro_my
1196p |char* |instr |const char* big|const char* little
1197p |bool |io_close |IO* io
1198p |OP* |invert |OP* cmd
1199p |bool |is_uni_alnum |U32 c
b8c5462f 1200p |bool |is_uni_alnumc |U32 c
cea2e8a9
GS
1201p |bool |is_uni_idfirst |U32 c
1202p |bool |is_uni_alpha |U32 c
b8c5462f 1203p |bool |is_uni_ascii |U32 c
cea2e8a9 1204p |bool |is_uni_space |U32 c
b8c5462f
JH
1205p |bool |is_uni_cntrl |U32 c
1206p |bool |is_uni_graph |U32 c
cea2e8a9
GS
1207p |bool |is_uni_digit |U32 c
1208p |bool |is_uni_upper |U32 c
1209p |bool |is_uni_lower |U32 c
1210p |bool |is_uni_print |U32 c
b8c5462f
JH
1211p |bool |is_uni_punct |U32 c
1212p |bool |is_uni_xdigit |U32 c
cea2e8a9
GS
1213p |U32 |to_uni_upper |U32 c
1214p |U32 |to_uni_title |U32 c
1215p |U32 |to_uni_lower |U32 c
1216p |bool |is_uni_alnum_lc|U32 c
b8c5462f 1217p |bool |is_uni_alnumc_lc|U32 c
cea2e8a9
GS
1218p |bool |is_uni_idfirst_lc|U32 c
1219p |bool |is_uni_alpha_lc|U32 c
b8c5462f 1220p |bool |is_uni_ascii_lc|U32 c
cea2e8a9 1221p |bool |is_uni_space_lc|U32 c
b8c5462f
JH
1222p |bool |is_uni_cntrl_lc|U32 c
1223p |bool |is_uni_graph_lc|U32 c
cea2e8a9
GS
1224p |bool |is_uni_digit_lc|U32 c
1225p |bool |is_uni_upper_lc|U32 c
1226p |bool |is_uni_lower_lc|U32 c
1227p |bool |is_uni_print_lc|U32 c
b8c5462f
JH
1228p |bool |is_uni_punct_lc|U32 c
1229p |bool |is_uni_xdigit_lc|U32 c
cea2e8a9
GS
1230p |U32 |to_uni_upper_lc|U32 c
1231p |U32 |to_uni_title_lc|U32 c
1232p |U32 |to_uni_lower_lc|U32 c
1233p |bool |is_utf8_alnum |U8 *p
b8c5462f 1234p |bool |is_utf8_alnumc |U8 *p
cea2e8a9
GS
1235p |bool |is_utf8_idfirst|U8 *p
1236p |bool |is_utf8_alpha |U8 *p
b8c5462f 1237p |bool |is_utf8_ascii |U8 *p
cea2e8a9 1238p |bool |is_utf8_space |U8 *p
b8c5462f 1239p |bool |is_utf8_cntrl |U8 *p
cea2e8a9 1240p |bool |is_utf8_digit |U8 *p
b8c5462f 1241p |bool |is_utf8_graph |U8 *p
cea2e8a9
GS
1242p |bool |is_utf8_upper |U8 *p
1243p |bool |is_utf8_lower |U8 *p
1244p |bool |is_utf8_print |U8 *p
b8c5462f
JH
1245p |bool |is_utf8_punct |U8 *p
1246p |bool |is_utf8_xdigit |U8 *p
cea2e8a9
GS
1247p |bool |is_utf8_mark |U8 *p
1248p |OP* |jmaybe |OP* arg
1249p |I32 |keyword |char* d|I32 len
1250p |void |leave_scope |I32 base
1251p |void |lex_end
1252p |void |lex_start |SV* line
1253p |OP* |linklist |OP* o
1254p |OP* |list |OP* o
1255p |OP* |listkids |OP* o
1256p |OP* |localize |OP* arg|I32 lexical
1257p |I32 |looks_like_number|SV* sv
1258p |int |magic_clearenv |SV* sv|MAGIC* mg
1259p |int |magic_clear_all_env|SV* sv|MAGIC* mg
1260p |int |magic_clearpack|SV* sv|MAGIC* mg
1261p |int |magic_clearsig |SV* sv|MAGIC* mg
1262p |int |magic_existspack|SV* sv|MAGIC* mg
1263p |int |magic_freeregexp|SV* sv|MAGIC* mg
1264p |int |magic_get |SV* sv|MAGIC* mg
1265p |int |magic_getarylen|SV* sv|MAGIC* mg
1266p |int |magic_getdefelem|SV* sv|MAGIC* mg
1267p |int |magic_getglob |SV* sv|MAGIC* mg
1268p |int |magic_getnkeys |SV* sv|MAGIC* mg
1269p |int |magic_getpack |SV* sv|MAGIC* mg
1270p |int |magic_getpos |SV* sv|MAGIC* mg
1271p |int |magic_getsig |SV* sv|MAGIC* mg
1272p |int |magic_getsubstr|SV* sv|MAGIC* mg
1273p |int |magic_gettaint |SV* sv|MAGIC* mg
1274p |int |magic_getuvar |SV* sv|MAGIC* mg
1275p |int |magic_getvec |SV* sv|MAGIC* mg
1276p |U32 |magic_len |SV* sv|MAGIC* mg
1277#if defined(USE_THREADS)
1278p |int |magic_mutexfree|SV* sv|MAGIC* mg
1279#endif
1280p |int |magic_nextpack |SV* sv|MAGIC* mg|SV* key
1281p |U32 |magic_regdata_cnt|SV* sv|MAGIC* mg
1282p |int |magic_regdatum_get|SV* sv|MAGIC* mg
1283p |int |magic_set |SV* sv|MAGIC* mg
1284p |int |magic_setamagic|SV* sv|MAGIC* mg
1285p |int |magic_setarylen|SV* sv|MAGIC* mg
1286p |int |magic_setbm |SV* sv|MAGIC* mg
1287p |int |magic_setdbline|SV* sv|MAGIC* mg
1288#if defined(USE_LOCALE_COLLATE)
1289p |int |magic_setcollxfrm|SV* sv|MAGIC* mg
1290#endif
1291p |int |magic_setdefelem|SV* sv|MAGIC* mg
1292p |int |magic_setenv |SV* sv|MAGIC* mg
1293p |int |magic_setfm |SV* sv|MAGIC* mg
1294p |int |magic_setisa |SV* sv|MAGIC* mg
1295p |int |magic_setglob |SV* sv|MAGIC* mg
1296p |int |magic_setmglob |SV* sv|MAGIC* mg
1297p |int |magic_setnkeys |SV* sv|MAGIC* mg
1298p |int |magic_setpack |SV* sv|MAGIC* mg
1299p |int |magic_setpos |SV* sv|MAGIC* mg
1300p |int |magic_setsig |SV* sv|MAGIC* mg
1301p |int |magic_setsubstr|SV* sv|MAGIC* mg
1302p |int |magic_settaint |SV* sv|MAGIC* mg
1303p |int |magic_setuvar |SV* sv|MAGIC* mg
1304p |int |magic_setvec |SV* sv|MAGIC* mg
1305p |int |magic_set_all_env|SV* sv|MAGIC* mg
1306p |U32 |magic_sizepack |SV* sv|MAGIC* mg
1307p |int |magic_wipepack |SV* sv|MAGIC* mg
1308p |void |magicname |char* sym|char* name|I32 namlen
cea2e8a9
GS
1309#if defined(MYMALLOC)
1310np |MEM_SIZE|malloced_size |void *p
1311#endif
1312p |void |markstack_grow
1313#if defined(USE_LOCALE_COLLATE)
1314p |char* |mem_collxfrm |const char* s|STRLEN len|STRLEN* xlen
1315#endif
1316p |SV* |mess |const char* pat|va_list* args
1317p |int |mg_clear |SV* sv
1318p |int |mg_copy |SV* sv|SV* nsv|const char* key|I32 klen
1319p |MAGIC* |mg_find |SV* sv|int type
1320p |int |mg_free |SV* sv
1321p |int |mg_get |SV* sv
1322p |U32 |mg_length |SV* sv
1323p |void |mg_magical |SV* sv
1324p |int |mg_set |SV* sv
1325p |I32 |mg_size |SV* sv
1326p |OP* |mod |OP* o|I32 type
1327p |char* |moreswitches |char* s
1328p |OP* |my |OP* o
cad2e5aa 1329p |NV |my_atof |const char *s
cea2e8a9
GS
1330#if !defined(HAS_BCOPY) || !defined(HAS_SAFE_BCOPY)
1331p |char* |my_bcopy |const char* from|char* to|I32 len
1332#endif
1333#if !defined(HAS_BZERO) && !defined(HAS_MEMSET)
1334p |char* |my_bzero |char* loc|I32 len
1335#endif
1336pr |void |my_exit |U32 status
1337pr |void |my_failure_exit
1338p |I32 |my_fflush_all
1339p |I32 |my_lstat
1340#if !defined(HAS_MEMCMP) || !defined(HAS_SANE_MEMCMP)
1341p |I32 |my_memcmp |const char* s1|const char* s2|I32 len
1342#endif
1343#if !defined(HAS_MEMSET)
1344p |void* |my_memset |char* loc|I32 ch|I32 len
1345#endif
1346#if !defined(PERL_OBJECT)
1347p |I32 |my_pclose |PerlIO* ptr
1348p |PerlIO*|my_popen |char* cmd|char* mode
1349#endif
1350p |void |my_setenv |char* nam|char* val
1351p |I32 |my_stat
1352#if defined(MYSWAP)
1353p |short |my_swap |short s
1354p |long |my_htonl |long l
1355p |long |my_ntohl |long l
1356#endif
1357p |void |my_unexec
1358p |OP* |newANONLIST |OP* o
1359p |OP* |newANONHASH |OP* o
1360p |OP* |newANONSUB |I32 floor|OP* proto|OP* block
1361p |OP* |newASSIGNOP |I32 flags|OP* left|I32 optype|OP* right
1362p |OP* |newCONDOP |I32 flags|OP* expr|OP* trueop|OP* falseop
1363p |void |newCONSTSUB |HV* stash|char* name|SV* sv
1364p |void |newFORM |I32 floor|OP* o|OP* block
1365p |OP* |newFOROP |I32 flags|char* label|line_t forline \
1366 |OP* sclr|OP* expr|OP*block|OP*cont
1367p |OP* |newLOGOP |I32 optype|I32 flags|OP* left|OP* right
1368p |OP* |newLOOPEX |I32 type|OP* label
1369p |OP* |newLOOPOP |I32 flags|I32 debuggable|OP* expr|OP* block
1370p |OP* |newNULLLIST
1371p |OP* |newOP |I32 optype|I32 flags
1372p |void |newPROG |OP* o
1373p |OP* |newRANGE |I32 flags|OP* left|OP* right
1374p |OP* |newSLICEOP |I32 flags|OP* subscript|OP* listop
1375p |OP* |newSTATEOP |I32 flags|char* label|OP* o
1376p |CV* |newSUB |I32 floor|OP* o|OP* proto|OP* block
1377p |CV* |newXS |char* name|XSUBADDR_t f|char* filename
1378p |AV* |newAV
1379p |OP* |newAVREF |OP* o
1380p |OP* |newBINOP |I32 type|I32 flags|OP* first|OP* last
1381p |OP* |newCVREF |I32 flags|OP* o
1382p |OP* |newGVOP |I32 type|I32 flags|GV* gv
1383p |GV* |newGVgen |char* pack
1384p |OP* |newGVREF |I32 type|OP* o
1385p |OP* |newHVREF |OP* o
1386p |HV* |newHV
1387p |HV* |newHVhv |HV* hv
1388p |IO* |newIO
1389p |OP* |newLISTOP |I32 type|I32 flags|OP* first|OP* last
1390p |OP* |newPMOP |I32 type|I32 flags
1391p |OP* |newPVOP |I32 type|I32 flags|char* pv
1392p |SV* |newRV |SV* pref
1393p |SV* |newRV_noinc |SV *sv
1394p |SV* |newSV |STRLEN len
1395p |OP* |newSVREF |OP* o
1396p |OP* |newSVOP |I32 type|I32 flags|SV* sv
1397p |SV* |newSViv |IV i
cad2e5aa 1398p |SV* |newSVnv |NV n
cea2e8a9
GS
1399p |SV* |newSVpv |const char* s|STRLEN len
1400p |SV* |newSVpvn |const char* s|STRLEN len
1401p |SV* |newSVpvf |const char* pat|...
c5be433b 1402p |SV* |vnewSVpvf |const char* pat|va_list* args
cea2e8a9
GS
1403p |SV* |newSVrv |SV* rv|const char* classname
1404p |SV* |newSVsv |SV* old
1405p |OP* |newUNOP |I32 type|I32 flags|OP* first
1406p |OP* |newWHILEOP |I32 flags|I32 debuggable|LOOP* loop \
1407 |I32 whileline|OP* expr|OP* block|OP* cont
c5be433b 1408
cea2e8a9
GS
1409p |PERL_SI*|new_stackinfo|I32 stitems|I32 cxitems
1410p |PerlIO*|nextargv |GV* gv
1411p |char* |ninstr |const char* big|const char* bigend \
1412 |const char* little|const char* lend
1413p |OP* |oopsCV |OP* o
1414p |void |op_free |OP* arg
1415p |void |package |OP* o
1416p |PADOFFSET|pad_alloc |I32 optype|U32 tmptype
1417p |PADOFFSET|pad_allocmy |char* name
1418p |PADOFFSET|pad_findmy |char* name
1419p |OP* |oopsAV |OP* o
1420p |OP* |oopsHV |OP* o
1421p |void |pad_leavemy |I32 fill
1422p |SV* |pad_sv |PADOFFSET po
1423p |void |pad_free |PADOFFSET po
1424p |void |pad_reset
1425p |void |pad_swipe |PADOFFSET po
1426p |void |peep |OP* o
0cb96387
GS
1427#if defined(PERL_OBJECT)
1428no |void |perl_construct
1429no |void |perl_destruct
1430no |void |perl_free
1431no |int |perl_run
1432no |int |perl_parse |XSINIT_t xsinit \
1433 |int argc|char** argv|char** env
1434#else
cea2e8a9 1435no |PerlInterpreter* |perl_alloc
0cb96387
GS
1436no |void |perl_construct |PerlInterpreter* sv_interp
1437no |void |perl_destruct |PerlInterpreter* sv_interp
1438no |void |perl_free |PerlInterpreter* sv_interp
1439no |int |perl_run |PerlInterpreter* sv_interp
1440no |int |perl_parse |PerlInterpreter* sv_interp|XSINIT_t xsinit \
1441 |int argc|char** argv|char** env
c5be433b
GS
1442#if defined(USE_THREADS)
1443p |struct perl_thread* |new_struct_thread|struct perl_thread *t
1444#endif
0cb96387 1445#endif
cea2e8a9
GS
1446p |void |call_atexit |ATEXIT_t fn|void *ptr
1447p |I32 |call_argv |const char* sub_name|I32 flags|char** argv
1448p |I32 |call_method |const char* methname|I32 flags
1449p |I32 |call_pv |const char* sub_name|I32 flags
1450p |I32 |call_sv |SV* sv|I32 flags
cea2e8a9
GS
1451p |SV* |eval_pv |const char* p|I32 croak_on_error
1452p |I32 |eval_sv |SV* sv|I32 flags
cea2e8a9
GS
1453p |SV* |get_sv |const char* name|I32 create
1454p |AV* |get_av |const char* name|I32 create
1455p |HV* |get_hv |const char* name|I32 create
1456p |CV* |get_cv |const char* name|I32 create
1457p |int |init_i18nl10n |int printwarn
1458p |int |init_i18nl14n |int printwarn
1459p |void |new_collate |const char* newcoll
1460p |void |new_ctype |const char* newctype
1461p |void |new_numeric |const char* newcoll
1462p |void |set_numeric_local
097ee67d 1463p |void |set_numeric_radix
cea2e8a9 1464p |void |set_numeric_standard
cea2e8a9 1465p |void |require_pv |const char* pv
cea2e8a9
GS
1466p |void |pidgone |int pid|int status
1467p |void |pmflag |U16* pmfl|int ch
1468p |OP* |pmruntime |OP* pm|OP* expr|OP* repl
1469p |OP* |pmtrans |OP* o|OP* expr|OP* repl
1470p |OP* |pop_return
1471p |void |pop_scope
1472p |OP* |prepend_elem |I32 optype|OP* head|OP* tail
1473p |void |push_return |OP* o
1474p |void |push_scope
1475p |OP* |ref |OP* o|I32 type
1476p |OP* |refkids |OP* o|I32 type
1477p |void |regdump |regexp* r
1478p |I32 |pregexec |regexp* prog|char* stringarg \
1479 |char* strend|char* strbeg|I32 minend \
1480 |SV* screamer|U32 nosave
1481p |void |pregfree |struct regexp* r
1482p |regexp*|pregcomp |char* exp|char* xend|PMOP* pm
cad2e5aa
JH
1483p |char* |re_intuit_start|regexp* prog|SV* sv|char* strpos \
1484 |char* strend|U32 flags \
1485 |struct re_scream_pos_data_s *data
1486p |SV* |re_intuit_string|regexp* prog
cea2e8a9
GS
1487p |I32 |regexec_flags |regexp* prog|char* stringarg \
1488 |char* strend|char* strbeg|I32 minend \
1489 |SV* screamer|void* data|U32 flags
1490p |regnode*|regnext |regnode* p
1491p |void |regprop |SV* sv|regnode* o
1492p |void |repeatcpy |char* to|const char* from|I32 len|I32 count
1493p |char* |rninstr |const char* big|const char* bigend \
1494 |const char* little|const char* lend
1495p |Sighandler_t|rsignal |int i|Sighandler_t t
1496p |int |rsignal_restore|int i|Sigsave_t* t
1497p |int |rsignal_save |int i|Sighandler_t t1|Sigsave_t* t2
1498p |Sighandler_t|rsignal_state|int i
1499p |void |rxres_free |void** rsp
1500p |void |rxres_restore |void** rsp|REGEXP* prx
1501p |void |rxres_save |void** rsp|REGEXP* prx
1502#if !defined(HAS_RENAME)
1503p |I32 |same_dirent |char* a|char* b
1504#endif
1505p |char* |savepv |const char* sv
1506p |char* |savepvn |const char* sv|I32 len
1507p |void |savestack_grow
1508p |void |save_aelem |AV* av|I32 idx|SV **sptr
1509p |I32 |save_alloc |I32 size|I32 pad
1510p |void |save_aptr |AV** aptr
1511p |AV* |save_ary |GV* gv
1512p |void |save_clearsv |SV** svp
1513p |void |save_delete |HV* hv|char* key|I32 klen
1514p |void |save_destructor|DESTRUCTORFUNC_t f|void* p
1515p |void |save_freesv |SV* sv
1516p |void |save_freeop |OP* o
1517p |void |save_freepv |char* pv
1518p |void |save_generic_svref|SV** sptr
1519p |void |save_gp |GV* gv|I32 empty
1520p |HV* |save_hash |GV* gv
1521p |void |save_helem |HV* hv|SV *key|SV **sptr
1522p |void |save_hints
1523p |void |save_hptr |HV** hptr
1524p |void |save_I16 |I16* intp
1525p |void |save_I32 |I32* intp
1526p |void |save_int |int* intp
1527p |void |save_item |SV* item
1528p |void |save_iv |IV* iv
1529p |void |save_list |SV** sarg|I32 maxsarg
1530p |void |save_long |long* longp
1531p |void |save_nogv |GV* gv
1532p |void |save_op
1533p |SV* |save_scalar |GV* gv
1534p |void |save_pptr |char** pptr
1535p |void |save_re_context
1536p |void |save_sptr |SV** sptr
1537p |SV* |save_svref |SV** sptr
1538p |SV** |save_threadsv |PADOFFSET i
1539p |OP* |sawparens |OP* o
1540p |OP* |scalar |OP* o
1541p |OP* |scalarkids |OP* o
1542p |OP* |scalarseq |OP* o
1543p |OP* |scalarvoid |OP* o
1544p |UV |scan_bin |char* start|I32 len|I32* retlen
1545p |UV |scan_hex |char* start|I32 len|I32* retlen
1546p |char* |scan_num |char* s
1547p |UV |scan_oct |char* start|I32 len|I32* retlen
1548p |OP* |scope |OP* o
1549p |char* |screaminstr |SV* bigsv|SV* littlesv|I32 start_shift \
1550 |I32 end_shift|I32 *state|I32 last
1551#if !defined(VMS)
1552p |I32 |setenv_getix |char* nam
1553#endif
1554p |void |setdefout |GV* gv
1555p |char* |sharepvn |const char* sv|I32 len|U32 hash
1556p |HEK* |share_hek |const char* sv|I32 len|U32 hash
1557np |Signal_t |sighandler |int sig
1558p |SV** |stack_grow |SV** sp|SV**p|int n
1559p |I32 |start_subparse |I32 is_format|U32 flags
1560p |void |sub_crush_depth|CV* cv
1561p |bool |sv_2bool |SV* sv
1562p |CV* |sv_2cv |SV* sv|HV** st|GV** gvp|I32 lref
1563p |IO* |sv_2io |SV* sv
1564p |IV |sv_2iv |SV* sv
1565p |SV* |sv_2mortal |SV* sv
cad2e5aa 1566p |NV |sv_2nv |SV* sv
cea2e8a9
GS
1567p |char* |sv_2pv |SV* sv|STRLEN* lp
1568p |UV |sv_2uv |SV* sv
1569p |IV |sv_iv |SV* sv
1570p |UV |sv_uv |SV* sv
cad2e5aa 1571p |NV |sv_nv |SV* sv
cea2e8a9
GS
1572p |char* |sv_pvn |SV *sv|STRLEN *len
1573p |I32 |sv_true |SV *sv
1574p |void |sv_add_arena |char* ptr|U32 size|U32 flags
1575p |int |sv_backoff |SV* sv
1576p |SV* |sv_bless |SV* sv|HV* stash
1577p |void |sv_catpvf |SV* sv|const char* pat|...
c5be433b 1578p |void |sv_vcatpvf |SV* sv|const char* pat|va_list* args
cea2e8a9
GS
1579p |void |sv_catpv |SV* sv|const char* ptr
1580p |void |sv_catpvn |SV* sv|const char* ptr|STRLEN len
1581p |void |sv_catsv |SV* dsv|SV* ssv
1582p |void |sv_chop |SV* sv|char* ptr
1583p |void |sv_clean_all
1584p |void |sv_clean_objs
1585p |void |sv_clear |SV* sv
1586p |I32 |sv_cmp |SV* sv1|SV* sv2
1587p |I32 |sv_cmp_locale |SV* sv1|SV* sv2
1588#if defined(USE_LOCALE_COLLATE)
1589p |char* |sv_collxfrm |SV* sv|STRLEN* nxp
1590#endif
1591p |OP* |sv_compile_2op |SV* sv|OP** startp|char* code|AV** avp
1592p |void |sv_dec |SV* sv
1593p |void |sv_dump |SV* sv
1594p |bool |sv_derived_from|SV* sv|const char* name
1595p |I32 |sv_eq |SV* sv1|SV* sv2
1596p |void |sv_free |SV* sv
1597p |void |sv_free_arenas
1598p |char* |sv_gets |SV* sv|PerlIO* fp|I32 append
1599p |char* |sv_grow |SV* sv|STRLEN newlen
1600p |void |sv_inc |SV* sv
1601p |void |sv_insert |SV* bigsv|STRLEN offset|STRLEN len \
1602 |char* little|STRLEN littlelen
1603p |int |sv_isa |SV* sv|const char* name
1604p |int |sv_isobject |SV* sv
1605p |STRLEN |sv_len |SV* sv
1606p |STRLEN |sv_len_utf8 |SV* sv
1607p |void |sv_magic |SV* sv|SV* obj|int how|const char* name \
1608 |I32 namlen
1609p |SV* |sv_mortalcopy |SV* oldsv
1610p |SV* |sv_newmortal
1611p |SV* |sv_newref |SV* sv
1612p |char* |sv_peek |SV* sv
1613p |void |sv_pos_u2b |SV* sv|I32* offsetp|I32* lenp
1614p |void |sv_pos_b2u |SV* sv|I32* offsetp
1615p |char* |sv_pvn_force |SV* sv|STRLEN* lp
1616p |char* |sv_reftype |SV* sv|int ob
1617p |void |sv_replace |SV* sv|SV* nsv
1618p |void |sv_report_used
1619p |void |sv_reset |char* s|HV* stash
1620p |void |sv_setpvf |SV* sv|const char* pat|...
c5be433b 1621p |void |sv_vsetpvf |SV* sv|const char* pat|va_list* args
cea2e8a9
GS
1622p |void |sv_setiv |SV* sv|IV num
1623p |void |sv_setpviv |SV* sv|IV num
1624p |void |sv_setuv |SV* sv|UV num
cad2e5aa 1625p |void |sv_setnv |SV* sv|NV num
cea2e8a9 1626p |SV* |sv_setref_iv |SV* rv|const char* classname|IV iv
cad2e5aa 1627p |SV* |sv_setref_nv |SV* rv|const char* classname|NV nv
cea2e8a9
GS
1628p |SV* |sv_setref_pv |SV* rv|const char* classname|void* pv
1629p |SV* |sv_setref_pvn |SV* rv|const char* classname|char* pv \
1630 |STRLEN n
1631p |void |sv_setpv |SV* sv|const char* ptr
1632p |void |sv_setpvn |SV* sv|const char* ptr|STRLEN len
1633p |void |sv_setsv |SV* dsv|SV* ssv
1634p |void |sv_taint |SV* sv
1635p |bool |sv_tainted |SV* sv
1636p |int |sv_unmagic |SV* sv|int type
1637p |void |sv_unref |SV* sv
1638p |void |sv_untaint |SV* sv
1639p |bool |sv_upgrade |SV* sv|U32 mt
1640p |void |sv_usepvn |SV* sv|char* ptr|STRLEN len
1641p |void |sv_vcatpvfn |SV* sv|const char* pat|STRLEN patlen \
1642 |va_list* args|SV** svargs|I32 svmax \
1643 |bool *used_locale
1644p |void |sv_vsetpvfn |SV* sv|const char* pat|STRLEN patlen \
1645 |va_list* args|SV** svargs|I32 svmax \
1646 |bool *used_locale
1647p |SV* |swash_init |char* pkg|char* name|SV* listsv \
1648 |I32 minbits|I32 none
1649p |UV |swash_fetch |SV *sv|U8 *ptr
1650p |void |taint_env
1651p |void |taint_proper |const char* f|char* s
1652p |UV |to_utf8_lower |U8 *p
1653p |UV |to_utf8_upper |U8 *p
1654p |UV |to_utf8_title |U8 *p
1655#if defined(UNLINK_ALL_VERSIONS)
1656p |I32 |unlnk |char* f
1657#endif
1658#if defined(USE_THREADS)
1659p |void |unlock_condpair|void* svv
1660#endif
1661p |void |unsharepvn |const char* sv|I32 len|U32 hash
1662p |void |unshare_hek |HEK* hek
1663p |void |utilize |int aver|I32 floor|OP* version|OP* id|OP* arg
1664p |U8* |utf16_to_utf8 |U16* p|U8 *d|I32 bytelen
1665p |U8* |utf16_to_utf8_reversed|U16* p|U8 *d|I32 bytelen
1666p |I32 |utf8_distance |U8 *a|U8 *b
1667p |U8* |utf8_hop |U8 *s|I32 off
1668p |UV |utf8_to_uv |U8 *s|I32* retlen
1669p |U8* |uv_to_utf8 |U8 *d|UV uv
1670p |void |vivify_defelem |SV* sv
1671p |void |vivify_ref |SV* sv|U32 to_what
1672p |I32 |wait4pid |int pid|int* statusp|int flags
1673p |void |warn |const char* pat|...
c5be433b 1674p |void |vwarn |const char* pat|va_list* args
cea2e8a9 1675p |void |warner |U32 err|const char* pat|...
c5be433b 1676p |void |vwarner |U32 err|const char* pat|va_list* args
cea2e8a9
GS
1677p |void |watch |char** addr
1678p |I32 |whichsig |char* sig
1679p |int |yyerror |char* s
1680#if defined(USE_PURE_BISON)
1681p |int |yylex |YYSTYPE *lvalp|int *lcharp
1682#else
1683p |int |yylex
1684#endif
1685p |int |yyparse
1686p |int |yywarn |char* s
1687#if defined(MYMALLOC)
1688p |void |dump_mstats |char* s
1689pno |Malloc_t|malloc |MEM_SIZE nbytes
1690pno |Malloc_t|calloc |MEM_SIZE elements|MEM_SIZE size
1691pno |Malloc_t|realloc |Malloc_t where|MEM_SIZE nbytes
1692pno |Free_t |mfree |Malloc_t where
1693#endif
4f63d024
GS
1694pn |Malloc_t|safesysmalloc |MEM_SIZE nbytes
1695pn |Malloc_t|safesyscalloc |MEM_SIZE elements|MEM_SIZE size
1696pn |Malloc_t|safesysrealloc|Malloc_t where|MEM_SIZE nbytes
1697pn |Free_t |safesysfree |Malloc_t where
cea2e8a9 1698#if defined(LEAKTEST)
4f63d024
GS
1699pn |Malloc_t|safexmalloc |I32 x|MEM_SIZE size
1700pn |Malloc_t|safexcalloc |I32 x|MEM_SIZE elements|MEM_SIZE size
1701pn |Malloc_t|safexrealloc |Malloc_t where|MEM_SIZE size
1702pn |void |safexfree |Malloc_t where
cea2e8a9
GS
1703#endif
1704#if defined(PERL_GLOBAL_STRUCT)
1705p |struct perl_vars *|GetVars
1706#endif
cea2e8a9
GS
1707p |int |runops_standard
1708p |int |runops_debug
cea2e8a9 1709p |void |sv_catpvf_mg |SV *sv|const char* pat|...
c5be433b 1710p |void |sv_vcatpvf_mg |SV* sv|const char* pat|va_list* args
cea2e8a9
GS
1711p |void |sv_catpv_mg |SV *sv|const char *ptr
1712p |void |sv_catpvn_mg |SV *sv|const char *ptr|STRLEN len
1713p |void |sv_catsv_mg |SV *dstr|SV *sstr
1714p |void |sv_setpvf_mg |SV *sv|const char* pat|...
c5be433b 1715p |void |sv_vsetpvf_mg |SV* sv|const char* pat|va_list* args
cea2e8a9
GS
1716p |void |sv_setiv_mg |SV *sv|IV i
1717p |void |sv_setpviv_mg |SV *sv|IV iv
1718p |void |sv_setuv_mg |SV *sv|UV u
cad2e5aa 1719p |void |sv_setnv_mg |SV *sv|NV num
cea2e8a9
GS
1720p |void |sv_setpv_mg |SV *sv|const char *ptr
1721p |void |sv_setpvn_mg |SV *sv|const char *ptr|STRLEN len
1722p |void |sv_setsv_mg |SV *dstr|SV *sstr
1723p |void |sv_usepvn_mg |SV *sv|char *ptr|STRLEN len
1724p |MGVTBL*|get_vtbl |int vtbl_id
1725p |char* |pv_display |SV *sv|char *pv|STRLEN cur|STRLEN len \
1726 |STRLEN pvlim
1727p |void |dump_indent |I32 level|PerlIO *file|const char* pat|...
c5be433b
GS
1728p |void |dump_vindent |I32 level|PerlIO *file|const char* pat \
1729 |va_list *args
cea2e8a9
GS
1730p |void |do_gv_dump |I32 level|PerlIO *file|char *name|GV *sv
1731p |void |do_gvgv_dump |I32 level|PerlIO *file|char *name|GV *sv
1732p |void |do_hv_dump |I32 level|PerlIO *file|char *name|HV *sv
1733p |void |do_magic_dump |I32 level|PerlIO *file|MAGIC *mg|I32 nest \
1734 |I32 maxnest|bool dumpops|STRLEN pvlim
1735p |void |do_op_dump |I32 level|PerlIO *file|OP *o
1736p |void |do_pmop_dump |I32 level|PerlIO *file|PMOP *pm
1737p |void |do_sv_dump |I32 level|PerlIO *file|SV *sv|I32 nest \
1738 |I32 maxnest|bool dumpops|STRLEN pvlim
1739p |void |magic_dump |MAGIC *mg
1740p |void* |default_protect|int *excpt|protect_body_t body|...
c5be433b 1741p |void* |vdefault_protect|int *excpt|protect_body_t body|va_list *args
cea2e8a9
GS
1742p |void |reginitcolors
1743p |char* |sv_2pv_nolen |SV* sv
1744p |char* |sv_pv |SV *sv
1745p |void |sv_force_normal|SV *sv
1746p |void |tmps_grow |I32 n
1747p |SV* |sv_rvweaken |SV *sv
1748p |int |magic_killbackrefs|SV *sv|MAGIC *mg
1749
0cb96387
GS
1750#if defined(PERL_OBJECT)
1751protected:
1752#endif
1753#if defined(PERL_IN_AV_C) || defined(PERL_DECL_PROT)
cea2e8a9
GS
1754s |I32 |avhv_index_sv |SV* sv
1755#endif
1756
0cb96387 1757#if defined(PERL_IN_DOOP_C) || defined(PERL_DECL_PROT)
cea2e8a9
GS
1758s |I32 |do_trans_CC_simple |SV *sv
1759s |I32 |do_trans_CC_count |SV *sv
1760s |I32 |do_trans_CC_complex |SV *sv
1761s |I32 |do_trans_UU_simple |SV *sv
1762s |I32 |do_trans_UU_count |SV *sv
1763s |I32 |do_trans_UU_complex |SV *sv
1764s |I32 |do_trans_UC_simple |SV *sv
1765s |I32 |do_trans_CU_simple |SV *sv
1766s |I32 |do_trans_UC_trivial |SV *sv
1767s |I32 |do_trans_CU_trivial |SV *sv
1768#endif
1769
0cb96387 1770#if defined(PERL_IN_GV_C) || defined(PERL_DECL_PROT)
cea2e8a9
GS
1771s |void |gv_init_sv |GV *gv|I32 sv_type
1772#endif
1773
0cb96387 1774#if defined(PERL_IN_HV_C) || defined(PERL_DECL_PROT)
cea2e8a9
GS
1775s |void |hsplit |HV *hv
1776s |void |hfreeentries |HV *hv
1777s |void |more_he
1778s |HE* |new_he
1779s |void |del_he |HE *p
1780s |HEK* |save_hek |const char *str|I32 len|U32 hash
1781s |void |hv_magic_check |HV *hv|bool *needs_copy|bool *needs_store
1782#endif
1783
0cb96387 1784#if defined(PERL_IN_MG_C) || defined(PERL_DECL_PROT)
cea2e8a9
GS
1785s |void |save_magic |I32 mgs_ix|SV *sv
1786s |int |magic_methpack |SV *sv|MAGIC *mg|char *meth
1787s |int |magic_methcall |SV *sv|MAGIC *mg|char *meth|I32 f \
1788 |int n|SV *val
cea2e8a9
GS
1789#endif
1790
0cb96387 1791#if defined(PERL_IN_OP_C) || defined(PERL_DECL_PROT)
cea2e8a9
GS
1792s |I32 |list_assignment|OP *o
1793s |void |bad_type |I32 n|char *t|char *name|OP *kid
3eb57f73 1794s |void |cop_free |COP *cop
cea2e8a9
GS
1795s |OP* |modkids |OP *o|I32 type
1796s |void |no_bareword_allowed|OP *o
1797s |OP* |no_fh_allowed |OP *o
1798s |OP* |scalarboolean |OP *o
1799s |OP* |too_few_arguments|OP *o|char* name
1800s |OP* |too_many_arguments|OP *o|char* name
1801s |void |null |OP* o
1802s |PADOFFSET|pad_findlex |char* name|PADOFFSET newoff|U32 seq \
1803 |CV* startcv|I32 cx_ix|I32 saweval|U32 flags
1804s |OP* |newDEFSVOP
1805s |OP* |new_logop |I32 type|I32 flags|OP **firstp|OP **otherp
1806s |void |simplify_sort |OP *o
1807s |bool |is_handle_constructor |OP *o|I32 argnum
1808s |char* |gv_ename |GV *gv
1809s |CV* |cv_clone2 |CV *proto|CV *outside
1810s |bool |scalar_mod_type|OP *o|I32 type
1811# if defined(PL_OP_SLAB_ALLOC)
1812s |void* |Slab_Alloc |int m|size_t sz
1813# endif
1814#endif
1815
0cb96387 1816#if defined(PERL_IN_PERL_C) || defined(PERL_DECL_PROT)
cea2e8a9
GS
1817s |void |find_beginning
1818s |void |forbid_setid |char *
1819s |void |incpush |char *|int
1820s |void |init_interp
1821s |void |init_ids
1822s |void |init_debugger
1823s |void |init_lexer
1824s |void |init_main_stash
1825s |void |init_perllib
1826s |void |init_postdump_symbols|int|char **|char **
1827s |void |init_predump_symbols
1828rs |void |my_exit_jump
1829s |void |nuke_stacks
1830s |void |open_script |char *|bool|SV *|int *fd
1831s |void |usage |char *
1832s |void |validate_suid |char *|char*|int
cea2e8a9
GS
1833# if defined(IAMSUID)
1834s |int |fd_on_nosuid_fs|int fd
1835# endif
1836s |void* |parse_body |va_list args
1837s |void* |run_body |va_list args
1838s |void* |call_body |va_list args
1839s |void |call_xbody |OP *myop|int is_eval
1840s |void* |call_list_body |va_list args
1841# if defined(USE_THREADS)
1842s |struct perl_thread * |init_main_thread
1843# endif
1844#endif
1845
0cb96387 1846#if defined(PERL_IN_PP_C) || defined(PERL_DECL_PROT)
cea2e8a9
GS
1847s |void |doencodes |SV* sv|char* s|I32 len
1848s |SV* |refto |SV* sv
1849s |U32 |seed
1850s |SV* |mul128 |SV *sv|U8 m
1851s |SV* |is_an_int |char *s|STRLEN l
1852s |int |div128 |SV *pnum|bool *done
1853#endif
1854
0cb96387 1855#if defined(PERL_IN_PP_CTL_C) || defined(PERL_DECL_PROT)
cea2e8a9
GS
1856s |OP* |docatch |OP *o
1857s |void* |docatch_body |va_list args
1858s |OP* |dofindlabel |OP *o|char *label|OP **opstack|OP **oplimit
1859s |void |doparseform |SV *sv
1860s |I32 |dopoptoeval |I32 startingblock
1861s |I32 |dopoptolabel |char *label
1862s |I32 |dopoptoloop |I32 startingblock
1863s |I32 |dopoptosub |I32 startingblock
1864s |I32 |dopoptosub_at |PERL_CONTEXT* cxstk|I32 startingblock
1865s |void |free_closures
1866s |void |save_lines |AV *array|SV *sv
1867s |OP* |doeval |int gimme|OP** startop
1868s |PerlIO *|doopen_pmc |const char *name|const char *mode
1869s |void |qsortsv |SV ** array|size_t num_elts|SVCOMPARE_t f
cea2e8a9
GS
1870#endif
1871
0cb96387 1872#if defined(PERL_IN_PP_HOT_C) || defined(PERL_DECL_PROT)
cea2e8a9 1873s |CV* |get_db_sub |SV **svp|CV *cv
cea2e8a9
GS
1874#endif
1875
0cb96387 1876#if defined(PERL_IN_PP_SYS_C) || defined(PERL_DECL_PROT)
cea2e8a9
GS
1877s |OP* |doform |CV *cv|GV *gv|OP *retop
1878s |int |emulate_eaccess|const char* path|int mode
1879# if !defined(HAS_MKDIR) || !defined(HAS_RMDIR)
1880s |int |dooneliner |char *cmd|char *filename
1881# endif
1882#endif
1883
0cb96387 1884#if defined(PERL_IN_REGCOMP_C) || defined(PERL_DECL_PROT)
cea2e8a9
GS
1885s |regnode*|reg |I32|I32 *
1886s |regnode*|reganode |U8|U32
1887s |regnode*|regatom |I32 *
1888s |regnode*|regbranch |I32 *|I32
1889s |void |regc |U8|char *
1890s |void |reguni |UV|char *|I32*
1891s |regnode*|regclass
1892s |regnode*|regclassutf8
1893s |I32 |regcurly |char *
1894s |regnode*|reg_node |U8
1895s |regnode*|regpiece |I32 *
1896s |void |reginsert |U8|regnode *
1897s |void |regoptail |regnode *|regnode *
1898s |void |regtail |regnode *|regnode *
1899s |char*|regwhite |char *|char *
1900s |char*|nextchar
1901s |regnode*|dumpuntil |regnode *start|regnode *node \
1902 |regnode *last|SV* sv|I32 l
1903s |void |scan_commit |scan_data_t *data
1904s |I32 |study_chunk |regnode **scanp|I32 *deltap \
1905 |regnode *last|scan_data_t *data|U32 flags
1906s |I32 |add_data |I32 n|char *s
1907rs |void|re_croak2 |const char* pat1|const char* pat2|...
b8c5462f
JH
1908s |I32 |regpposixcc |I32 value
1909s |void |checkposixcc
cea2e8a9
GS
1910#endif
1911
0cb96387 1912#if defined(PERL_IN_REGEXEC_C) || defined(PERL_DECL_PROT)
cea2e8a9
GS
1913s |I32 |regmatch |regnode *prog
1914s |I32 |regrepeat |regnode *p|I32 max
1915s |I32 |regrepeat_hard |regnode *p|I32 max|I32 *lp
1916s |I32 |regtry |regexp *prog|char *startpos
1917s |bool |reginclass |char *p|I32 c
1918s |bool |reginclassutf8 |regnode *f|U8* p
1919s |CHECKPOINT|regcppush |I32 parenfloor
1920s |char*|regcppop
1921s |char*|regcp_set_to |I32 ss
1922s |void |cache_re |regexp *prog
cea2e8a9
GS
1923s |U8* |reghop |U8 *pos|I32 off
1924s |U8* |reghopmaybe |U8 *pos|I32 off
1925#endif
1926
0cb96387 1927#if defined(PERL_IN_RUN_C) || defined(PERL_DECL_PROT)
cea2e8a9
GS
1928s |void |debprof |OP *o
1929#endif
1930
0cb96387 1931#if defined(PERL_IN_SCOPE_C) || defined(PERL_DECL_PROT)
cea2e8a9
GS
1932s |SV* |save_scalar_at |SV **sptr
1933#endif
1934
0cb96387 1935#if defined(PERL_IN_SV_C) || defined(PERL_DECL_PROT)
cea2e8a9
GS
1936s |IV |asIV |SV* sv
1937s |UV |asUV |SV* sv
1938s |SV* |more_sv
1939s |void |more_xiv
1940s |void |more_xnv
1941s |void |more_xpv
1942s |void |more_xrv
1943s |XPVIV* |new_xiv
1944s |XPVNV* |new_xnv
1945s |XPV* |new_xpv
1946s |XRV* |new_xrv
1947s |void |del_xiv |XPVIV* p
1948s |void |del_xnv |XPVNV* p
1949s |void |del_xpv |XPV* p
1950s |void |del_xrv |XRV* p
1951s |void |sv_unglob |SV* sv
cea2e8a9
GS
1952s |void |not_a_number |SV *sv
1953s |void |visit |SVFUNC_t f
1954# if defined(PURIFY)
1955s |void |reg_add |SV *sv
1956s |void |reg_remove |SV *sv
1957# else
4f63d024 1958ns |void* |my_safemalloc |MEM_SIZE size
cea2e8a9
GS
1959# endif
1960s |void |sv_add_backref |SV *tsv|SV *sv
1961s |void |sv_del_backref |SV *sv
1962# if defined(DEBUGGING)
1963s |void |del_sv |SV *p
1964# endif
1965#endif
1966
0cb96387 1967#if defined(PERL_IN_TOKE_C) || defined(PERL_DECL_PROT)
cea2e8a9
GS
1968s |void |check_uni
1969s |void |force_next |I32 type
1970s |char* |force_version |char *start
1971s |char* |force_word |char *start|int token|int check_keyword \
1972 |int allow_pack|int allow_tick
1973s |SV* |tokeq |SV *sv
1974s |char* |scan_const |char *start
1975s |char* |scan_formline |char *s
1976s |char* |scan_heredoc |char *s
1977s |char* |scan_ident |char *s|char *send|char *dest \
1978 |STRLEN destlen|I32 ck_uni
1979s |char* |scan_inputsymbol|char *start
1980s |char* |scan_pat |char *start|I32 type
1981s |char* |scan_str |char *start
1982s |char* |scan_subst |char *start
1983s |char* |scan_trans |char *start
1984s |char* |scan_word |char *s|char *dest|STRLEN destlen \
1985 |int allow_package|STRLEN *slp
1986s |char* |skipspace |char *s
1987s |void |checkcomma |char *s|char *name|char *what
1988s |void |force_ident |char *s|int kind
1989s |void |incline |char *s
1990s |int |intuit_method |char *s|GV *gv
1991s |int |intuit_more |char *s
1992s |I32 |lop |I32 f|expectation x|char *s
1993s |void |missingterm |char *s
1994s |void |no_op |char *what|char *s
1995s |void |set_csh
1996s |I32 |sublex_done
1997s |I32 |sublex_push
1998s |I32 |sublex_start
1999s |char * |filter_gets |SV *sv|PerlIO *fp|STRLEN append
2000s |SV* |new_constant |char *s|STRLEN len|char *key|SV *sv \
2001 |SV *pv|char *type
2002s |int |ao |int toketype
2003s |void |depcom
2004s |char* |incl_perldb
2005s |I32 |utf16_textfilter|int idx|SV *sv|int maxlen
2006s |I32 |utf16rev_textfilter|int idx|SV *sv|int maxlen
cea2e8a9
GS
2007# if defined(CRIPPLED_CC)
2008s |int |uni |I32 f|char *s
2009# endif
2010# if defined(WIN32)
2011s |I32 |win32_textfilter |int idx|SV *sv|int maxlen
2012# endif
2013#endif
2014
0cb96387 2015#if defined(PERL_IN_UNIVERSAL_C) || defined(PERL_DECL_PROT)
cea2e8a9
GS
2016s |SV*|isa_lookup |HV *stash|const char *name|int len|int level
2017#endif
2018
0cb96387 2019#if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT)
cea2e8a9 2020s |SV* |mess_alloc
cea2e8a9
GS
2021# if defined(LEAKTEST)
2022s |void |xstat |int
2023# endif
2024#endif