or die "embed.pl: Can't open $file: $!\n";
while (<FILE>) {
s/[ \t]*#.*//; # Delete comments.
- if (/PERLVARI?C?\($pre(\w+)/) {
+ if (/PERLVARA?I?C?\($pre(\w+)/) {
my $sym = $1;
$sym = $pre . $sym if $keep_pre;
warn "duplicate symbol $sym while processing $file\n"
if exists $$syms{$sym};
- $$syms{$sym} = 1;
+ $$syms{$sym} = $pre || 1;
}
}
close(FILE);
readvars %intrp, 'intrpvar.h','I';
readvars %thread, 'thrdvar.h','T';
readvars %globvar, 'perlvars.h','G';
-readvars %objvar, 'intrpvar.h','pi', 1;
-foreach my $sym (sort keys %thread)
- {
+foreach my $sym (sort keys %thread) {
warn "$sym in intrpvar.h as well as thrdvar.h\n" if exists $intrp{$sym};
- }
+}
sub undefine ($) {
my ($sym) = @_;
"#define $from" . "\t" x ($t < 3 ? 3 - $t : 1) . "$to\n";
}
-sub objxsub_var ($) {
- my ($sym) = @_;
- undefine("PL_$sym") . hide("PL_$sym", "pPerl->PL_$sym");
-}
-
-sub embedvar ($) {
- my ($sym) = @_;
-# hide($sym, "Perl_$sym");
- return '';
+sub objxsub_var ($$) {
+ my ($pfx, $sym) = @_;
+ my $arg = ($pfx eq 'G' ? 'NULL' : 'aTHXo');
+ undefine("PL_$sym") . hide("PL_$sym", "(*Perl_${pfx}${sym}_ptr($arg))");
}
sub multon ($$$) {
my ($sym,$pre,$ptr) = @_;
hide("PL_$sym", "($ptr$pre$sym)");
}
+
sub multoff ($$) {
my ($sym,$pre) = @_;
return hide("PL_$pre$sym", "PL_$sym");
/* NO_EMBED is no longer supported. i.e. EMBED is always active. */
+/* provide binary compatible (but inconsistent) names */
+#if defined(PERL_BINCOMPAT_5005)
+# define Perl_call_argv perl_call_argv
+# define Perl_call_method perl_call_method
+# define Perl_call_pv perl_call_pv
+# define Perl_call_sv perl_call_sv
+# define Perl_get_av perl_get_av
+# define Perl_get_cv perl_get_cv
+# define Perl_get_hv perl_get_hv
+# define Perl_get_sv perl_get_sv
+# define Perl_init_i18nl10n perl_init_i18nl10n
+# define Perl_init_i18nl14n perl_init_i18nl14n
+# define Perl_new_collate perl_new_collate
+# define Perl_new_ctype perl_new_ctype
+# define Perl_new_numeric perl_new_numeric
+# define Perl_require_pv perl_require_pv
+# define Perl_safesyscalloc Perl_safecalloc
+# define Perl_safesysfree Perl_safefree
+# define Perl_safesysmalloc Perl_safemalloc
+# define Perl_safesysrealloc Perl_saferealloc
+# define Perl_set_numeric_local perl_set_numeric_local
+# define Perl_set_numeric_standard perl_set_numeric_standard
+# define PERL_POLLUTE
+/* malloc() pollution was the default in earlier versions, so enable
+ * it for bincompat; but not for systems that used to do prevent that,
+ * or when they ask for {HIDE,EMBED}MYMALLOC */
+# if !defined(EMBEDMYMALLOC) && !defined(HIDEMYMALLOC)
+# if !defined(NeXT) && !defined(__NeXT) && !defined(__MACHTEN__) && \
+ !defined(__QNX__)
+# define PERL_POLLUTE_MALLOC
+# endif
+# endif
+#endif
+
/* Hide global symbols */
#if !defined(PERL_OBJECT)
disable them.
*/
-#if !defined(PERL_CORE) && !defined(PERL_NOCOMPAT)
-
-# define sv_setptrobj(rv,ptr,name) sv_setref_iv(rv,name,(IV)ptr)
-# define sv_setptrref(rv,ptr) sv_setref_iv(rv,Nullch,(IV)ptr)
+#if !defined(PERL_CORE)
+# define sv_setptrobj(rv,ptr,name) sv_setref_iv(rv,name,PTR2IV(ptr))
+# define sv_setptrref(rv,ptr) sv_setref_iv(rv,Nullch,PTR2IV(ptr))
+#endif
+#if !defined(PERL_CORE) && !defined(PERL_NOCOMPAT) && !defined(PERL_BINCOMPAT_5005)
/* Compatibility for various misnamed functions. All functions
in the API that begin with "perl_" (not "Perl_") take an explicit
an extra argument but grab the context pointer using the macro
dTHX.
*/
-#if defined(PERL_IMPLICIT_CONTEXT)
+#if defined(PERL_IMPLICIT_CONTEXT) && !defined(PERL_OBJECT)
# define croak Perl_croak_nocontext
+# define deb Perl_deb_nocontext
# define die Perl_die_nocontext
# define form Perl_form_nocontext
+# define mess Perl_mess_nocontext
# define newSVpvf Perl_newSVpvf_nocontext
# define sv_catpvf Perl_sv_catpvf_nocontext
# define sv_setpvf Perl_sv_setpvf_nocontext
# define warn Perl_warn_nocontext
+# define warner Perl_warner_nocontext
# define sv_catpvf_mg Perl_sv_catpvf_mg_nocontext
# define sv_setpvf_mg Perl_sv_setpvf_mg_nocontext
#endif
/* undefined symbols, point them back at the usual ones */
# define Perl_croak_nocontext Perl_croak
# define Perl_die_nocontext Perl_die
+# define Perl_deb_nocontext Perl_deb
# define Perl_form_nocontext Perl_form
-# define Perl_newSVpvf_nocontext Perl_newSVpvf
-# define Perl_sv_catpvf_nocontext Perl_sv_catpvf
-# define Perl_sv_setpvf_nocontext Perl_sv_setpvf
+# define Perl_mess_nocontext Perl_mess
+# define Perl_newSVpvf_nocontext Perl_newSVpvf
+# define Perl_sv_catpvf_nocontext Perl_sv_catpvf
+# define Perl_sv_setpvf_nocontext Perl_sv_setpvf
# define Perl_warn_nocontext Perl_warn
+# define Perl_warner_nocontext Perl_warner
# define Perl_sv_catpvf_mg_nocontext Perl_sv_catpvf_mg
# define Perl_sv_setpvf_mg_nocontext Perl_sv_setpvf_mg
#endif
/* (Doing namespace management portably in C is really gross.) */
-/* Put interpreter-specific symbols into a struct? */
-
-#ifdef MULTIPLICITY
-
-#ifndef USE_THREADS
-/* If we do not have threads then per-thread vars are per-interpreter */
-
-#ifdef PERL_IMPLICIT_CONTEXT
-
-/* everything has an implicit context pointer */
-
-END
-
-for $sym (sort keys %thread) {
- print EM multon($sym,'T','my_perl->');
-}
-
-print EM <<'END';
+/*
+ The following combinations of MULTIPLICITY, USE_THREADS, PERL_OBJECT
+ and PERL_IMPLICIT_CONTEXT are supported:
+ 1) none
+ 2) MULTIPLICITY # supported for compatibility
+ 3) MULTIPLICITY && PERL_IMPLICIT_CONTEXT
+ 4) USE_THREADS && PERL_IMPLICIT_CONTEXT
+ 5) MULTIPLICITY && USE_THREADS && PERL_IMPLICIT_CONTEXT
+ 6) PERL_OBJECT && PERL_IMPLICIT_CONTEXT
+
+ All other combinations of these flags are errors.
+
+ #3, #4, #5, and #6 are supported directly, while #2 is a special
+ case of #3 (supported by redefining vTHX appropriately).
+*/
-#else /* !PERL_IMPLICIT_CONTEXT */
+#if defined(MULTIPLICITY)
+/* cases 2, 3 and 5 above */
-/* traditional MULTIPLICITY (intepreter is in a global) */
+# if defined(PERL_IMPLICIT_CONTEXT)
+# define vTHX aTHX
+# else
+# define vTHX PERL_GET_INTERP
+# endif
END
-
for $sym (sort keys %thread) {
- print EM multon($sym,'T','PL_curinterp->');
+ print EM multon($sym,'T','vTHX->');
}
print EM <<'END';
-#endif /* !PERL_IMPLICIT_CONTEXT */
-#endif /* !USE_THREADS */
+# if defined(PERL_OBJECT)
+# include "error: PERL_OBJECT + MULTIPLICITY don't go together"
+# endif
-/* These are always per-interpreter if there is more than one */
+# if defined(USE_THREADS)
+/* case 5 above */
END
for $sym (sort keys %intrp) {
- print EM multon($sym,'I','PL_curinterp->');
+ print EM multon($sym,'I','PERL_GET_INTERP->');
}
print EM <<'END';
-#else /* !MULTIPLICITY */
+# else /* !USE_THREADS */
+/* cases 2 and 3 above */
END
for $sym (sort keys %intrp) {
- print EM multoff($sym,'I');
-}
-
-print EM <<'END';
-
-#ifndef USE_THREADS
-
-END
-
-for $sym (sort keys %thread) {
- print EM multoff($sym,'T');
+ print EM multon($sym,'I','vTHX->');
}
print EM <<'END';
-#endif /* USE_THREADS */
+# endif /* USE_THREADS */
-/* Hide what would have been interpreter-specific symbols? */
+#else /* !MULTIPLICITY */
+/* cases 1, 4 and 6 above */
END
for $sym (sort keys %intrp) {
- print EM embedvar($sym);
+ print EM multoff($sym,'I');
}
print EM <<'END';
-#ifndef USE_THREADS
+# if defined(USE_THREADS)
+/* case 4 above */
END
for $sym (sort keys %thread) {
- print EM embedvar($sym);
+ print EM multon($sym,'T','aTHX->');
}
print EM <<'END';
-#endif /* USE_THREADS */
-#endif /* MULTIPLICITY */
-
-/* Now same trickey for per-thread variables */
-
-#ifdef USE_THREADS
+# else /* !USE_THREADS */
+/* cases 1 and 6 above */
END
for $sym (sort keys %thread) {
- print EM multon($sym,'T','thr->');
+ print EM multoff($sym,'T');
}
print EM <<'END';
-#endif /* USE_THREADS */
+# endif /* USE_THREADS */
+#endif /* MULTIPLICITY */
-#ifdef PERL_GLOBAL_STRUCT
+#if defined(PERL_GLOBAL_STRUCT)
END
print EM <<'END';
-END
-
-for $sym (sort keys %globvar) {
- print EM embedvar($sym);
-}
-
-print EM <<'END';
-
#endif /* PERL_GLOBAL_STRUCT */
-END
-
-print EM <<'END';
-
#ifdef PERL_POLLUTE /* disabled by default in 5.006 */
END
#endif /* PERL_POLLUTE */
END
-
close(EM);
unlink 'objXSUB.h';
EOT
-foreach my $sym (sort(keys(%intrp),
- keys(%thread),
- keys(%globvar),
- keys(%objvar)))
-{
- print OBX objxsub_var($sym);
+foreach my $sym (sort keys %intrp) {
+ print OBX objxsub_var('I',$sym);
+}
+
+foreach my $sym (sort keys %thread) {
+ print OBX objxsub_var('T',$sym);
+}
+
+foreach my $sym (sort keys %globvar) {
+ print OBX objxsub_var('G',$sym);
}
print OBX <<'EOT';
/* Functions */
+#if defined(PERL_OBJECT)
+
+/* XXX soon to be eliminated, only a few things in PERLCORE need these now */
+
EOT
walk_table {
print OBX <<'EOT';
+#endif /* PERL_OBJECT */
#endif /* __objXSUB_h__ */
EOT
close(OBX);
+unlink 'perlapi.h';
+unlink 'perlapi.c';
+open(CAPI, '> perlapi.c') or die "Can't create perlapi.c: $!\n";
+open(CAPIH, '> perlapi.h') or die "Can't create perlapi.h: $!\n";
+
+print CAPIH <<'EOT';
+/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+ This file is built by embed.pl from data in embed.pl, pp.sym, intrpvar.h,
+ perlvars.h and thrdvar.h. Any changes made here will be lost!
+*/
+
+/* declare accessor functions for Perl variables */
+
+#if defined(PERL_OBJECT) || defined (PERL_CAPI)
+
+#if defined(PERL_OBJECT)
+# undef aTHXo
+# define aTHXo pPerl
+# undef aTHXo_
+# define aTHXo_ aTHXo,
+#endif /* PERL_OBJECT */
+
+START_EXTERN_C
+
+#undef PERLVAR
+#undef PERLVARA
+#undef PERLVARI
+#undef PERLVARIC
+#define PERLVAR(v,t) EXTERN_C t* Perl_##v##_ptr(pTHXo);
+#define PERLVARA(v,n,t) typedef t PL_##v##_t[n]; \
+ EXTERN_C PL_##v##_t* Perl_##v##_ptr(pTHXo);
+#define PERLVARI(v,t,i) PERLVAR(v,t)
+#define PERLVARIC(v,t,i) PERLVAR(v, const t)
+
+#include "thrdvar.h"
+#include "intrpvar.h"
+#include "perlvars.h"
+
+#undef PERLVAR
+#undef PERLVARA
+#undef PERLVARI
+#undef PERLVARIC
+
+END_EXTERN_C
+
+#endif /* PERL_OBJECT || PERL_CAPI */
+
+EOT
+
+
+print CAPI <<'EOT';
+/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+ This file is built by embed.pl from data in embed.pl, pp.sym, intrpvar.h,
+ perlvars.h and thrdvar.h. Any changes made here will be lost!
+*/
+
+#include "EXTERN.h"
+#include "perl.h"
+#include "perlapi.h"
+
+#if defined(PERL_OBJECT)
+
+/* accessor functions for Perl variables (provides binary compatibility) */
+START_EXTERN_C
+
+#undef PERLVAR
+#undef PERLVARA
+#undef PERLVARI
+#undef PERLVARIC
+#define PERLVAR(v,t) t* Perl_##v##_ptr(pTHXo) \
+ { return &(aTHXo->PL_##v); }
+#define PERLVARA(v,n,t) PL_##v##_t* Perl_##v##_ptr(pTHXo) \
+ { return &(aTHXo->PL_##v); }
+#define PERLVARI(v,t,i) PERLVAR(v,t)
+#define PERLVARIC(v,t,i) PERLVAR(v, const t)
+
+#include "thrdvar.h"
+#include "intrpvar.h"
+
+#undef PERLVAR
+#undef PERLVARA
+#define PERLVAR(v,t) t* Perl_##v##_ptr(pTHXo) \
+ { return &(PL_##v); }
+#define PERLVARA(v,n,t) PL_##v##_t* Perl_##v##_ptr(pTHXo) \
+ { return &(PL_##v); }
+#include "perlvars.h"
+
+#undef PERLVAR
+#undef PERLVARA
+#undef PERLVARI
+#undef PERLVARIC
+
+EOT
+
+# functions that take va_list* for implementing vararg functions
+my %vfuncs = qw(
+ Perl_croak Perl_vcroak
+ Perl_warn Perl_vwarn
+ Perl_warner Perl_vwarner
+ Perl_die Perl_vdie
+ Perl_form Perl_vform
+ Perl_mess Perl_vmess
+ Perl_deb Perl_vdeb
+ Perl_newSVpvf Perl_vnewSVpvf
+ Perl_sv_setpvf Perl_sv_vsetpvf
+ Perl_sv_setpvf_mg Perl_sv_vsetpvf_mg
+ Perl_sv_catpvf Perl_sv_vcatpvf
+ Perl_sv_catpvf_mg Perl_sv_vcatpvf_mg
+ Perl_dump_indent Perl_dump_vindent
+ Perl_default_protect Perl_vdefault_protect
+);
+
+sub emit_func {
+ my ($addcontext, $rettype,$func,@args) = @_;
+ my @aargs = @args;
+ for my $a (@aargs) { $a =~ s/^.*\b(\w+)$/$1/ }
+ my $ctxarg = '';
+ if (not $addcontext) {
+ $ctxarg = 'pTHXo';
+ $ctxarg .= '_ ' if @args;
+ }
+ my $decl = '';
+ if ($addcontext) {
+ $decl .= " dTHXo;\n";
+ }
+ local $" = ', ';
+ my $return = ($rettype =~ /^\s*(void|Free_t|Signal_t)\s*$/
+ ? '' : 'return ');
+ my $emitval = '';
+ if (@args and $args[$#args] =~ /\.\.\./) {
+ pop @aargs;
+ my $retarg = '';
+ my $ctxfunc = $func;
+ $ctxfunc =~ s/_nocontext$//;
+ return $emitval unless exists $vfuncs{$ctxfunc};
+ if (length $return) {
+ $decl .= " $rettype retval;\n";
+ $retarg .= "retval = ";
+ $return = "\n ${return}retval;\n";
+ }
+ $emitval .= <<EOT
+$rettype
+$func($ctxarg@args)
+{
+$decl va_list args;
+ va_start(args, $aargs[$#aargs]);
+ $retarg((CPerlObj*)pPerl)->$vfuncs{$ctxfunc}(@aargs, &args);
+ va_end(args);$return
+}
+EOT
+ }
+ else {
+ $emitval .= <<EOT
+$rettype
+$func($ctxarg@args)
+{
+$decl $return((CPerlObj*)pPerl)->$func(@aargs);
+}
+EOT
+ }
+ $emitval;
+}
+
+# XXXX temporary hack
+for my $sym (qw(
+ perl_construct
+ perl_destruct
+ perl_free
+ perl_run
+ perl_parse
+ ))
+{
+ $skipapi_funcs{$sym}++;
+}
+
+walk_table {
+ my $ret = "";
+ if (@_ == 1) {
+ my $arg = shift;
+ $ret .= "$arg\n" if $arg =~ /^#\s*(if|ifdef|else|endif)\b/;
+ }
+ else {
+ my ($flags,$retval,$func,@args) = @_;
+ return $ret if exists $skipapi_funcs{$func};
+ unless ($flags =~ /s/) {
+ $ret .= "\n";
+ my $addctx = 1 if $flags =~ /n/;
+ if ($flags =~ /p/) {
+ $ret .= undefine("Perl_$func");
+ $ret .= emit_func($addctx,$retval,"Perl_$func",@args);
+ }
+ else {
+ $ret .= undefine($func);
+ $ret .= emit_func($addctx,$retval,$func,@args);
+ }
+ }
+ }
+ $ret;
+} \*CAPI;
+
+for $sym (sort keys %ppsym) {
+ $sym =~ s/^Perl_//;
+ print CAPI "\n";
+ print CAPI undefine("Perl_$sym");
+ if ($sym =~ /^ck_/) {
+ print CAPI emit_func(0, 'OP *',"Perl_$sym",'OP *o');
+ }
+ else { # pp_foo
+ print CAPI emit_func(0, 'OP *',"Perl_$sym");
+ }
+}
+
+print CAPI <<'EOT';
+
+#undef Perl_fprintf_nocontext
+int
+Perl_fprintf_nocontext(PerlIO *stream, const char *format, ...)
+{
+ dTHXo;
+ va_list(arglist);
+ va_start(arglist, format);
+ return (*pPerl->PL_StdIO->pVprintf)(pPerl->PL_StdIO, stream, format, arglist);
+}
+
+END_EXTERN_C
+
+#endif /* PERL_OBJECT */
+EOT
+
__END__
# Lines are of the form:
-# flags|return_type|function_name|return_type|arg1|arg2|...|argN
+# flags|return_type|function_name|arg1|arg2|...|argN
#
-# They may continue on multiple lines when \w| begins the next line.
+# A line may be continued on another by ending it with a backslash.
# Leading and trailing whitespace will be ignored in each component.
#
# flags are single letters with following meanings:
p |OP* |append_elem |I32 optype|OP* head|OP* tail
p |OP* |append_list |I32 optype|LISTOP* first|LISTOP* last
p |I32 |apply |I32 type|SV** mark|SV** sp
-p |void |assertref |OP* o
p |bool |avhv_exists_ent|AV *ar|SV* keysv|U32 hash
p |SV** |avhv_fetch_ent |AV *ar|SV* keysv|I32 lval|U32 hash
p |HE* |avhv_iternext |AV *ar
p |int |block_start |int full
p |void |boot_core_UNIVERSAL
p |void |call_list |I32 oldscope|AV* av_list
-p |I32 |cando |I32 bit|I32 effective|Stat_t* statbufp
+p |bool |cando |Mode_t mode|Uid_t effective|Stat_t* statbufp
p |U32 |cast_ulong |NV f
p |I32 |cast_i32 |NV f
p |IV |cast_iv |NV f
#endif
p |OP* |convert |I32 optype|I32 flags|OP* o
pr |void |croak |const char* pat|...
+pr |void |vcroak |const char* pat|va_list* args
#if defined(PERL_IMPLICIT_CONTEXT)
npr |void |croak_nocontext|const char* pat|...
np |OP* |die_nocontext |const char* pat|...
+np |void |deb_nocontext |const char* pat|...
np |char* |form_nocontext |const char* pat|...
+np |SV* |mess_nocontext |const char* pat|...
np |void |warn_nocontext |const char* pat|...
+np |void |warner_nocontext|U32 err|const char* pat|...
np |SV* |newSVpvf_nocontext|const char* pat|...
np |void |sv_catpvf_nocontext|SV* sv|const char* pat|...
np |void |sv_setpvf_nocontext|SV* sv|const char* pat|...
np |void |sv_catpvf_mg_nocontext|SV* sv|const char* pat|...
np |void |sv_setpvf_mg_nocontext|SV* sv|const char* pat|...
+np |int |fprintf_nocontext|PerlIO* stream|const char* fmt|...
#endif
p |void |cv_ckproto |CV* cv|GV* gv|char* p
p |CV* |cv_clone |CV* proto
p |PPADDR_t*|get_ppaddr
p |I32 |cxinc
p |void |deb |const char* pat|...
+p |void |vdeb |const char* pat|va_list* args
p |void |deb_growlevel
p |void |debprofdump
p |I32 |debop |OP* o
|char* fromend|int delim|I32* retlen
p |void |deprecate |char* s
p |OP* |die |const char* pat|...
+p |OP* |vdie |const char* pat|va_list* args
p |OP* |die_where |char* message|STRLEN msglen
p |void |dounwind |I32 cxix
p |bool |do_aexec |SV* really|SV** mark|SV** sp
+p |bool |do_aexec5 |SV* really|SV** mark|SV** sp|int fd|int flag
p |int |do_binmode |PerlIO *fp|int iotype|int flag
p |void |do_chop |SV* asv|SV* sv
p |bool |do_close |GV* gv|bool not_implicit
p |OP* |do_kv
p |bool |do_open |GV* gv|char* name|I32 len|int as_raw \
|int rawmode|int rawperm|PerlIO* supplied_fp
+p |bool |do_open9 |GV *gv|char *name|I32 len|int as_raw \
+ |int rawmode|int rawperm|PerlIO *supplied_fp \
+ |SV *svs|I32 num
p |void |do_pipe |SV* sv|GV* rgv|GV* wgv
p |bool |do_print |SV* sv|PerlIO* fp
p |OP* |do_readline
p |Off_t |do_sysseek |GV* gv|Off_t pos|int whence
p |Off_t |do_tell |GV* gv
p |I32 |do_trans |SV* sv
+p |UV |do_vecget |SV* sv|I32 offset|I32 size
p |void |do_vecset |SV* sv
p |void |do_vop |I32 optype|SV* sv|SV* left|SV* right
p |OP* |dofile |OP* term
p |OP* |force_list |OP* arg
p |OP* |fold_constants |OP* arg
p |char* |form |const char* pat|...
+p |char* |vform |const char* pat|va_list* args
p |void |free_tmps
p |OP* |gen_constant_list|OP* o
#if !defined(HAS_GETENV_LEN)
p |void |hv_undef |HV* tb
p |I32 |ibcmp |const char* a|const char* b|I32 len
p |I32 |ibcmp_locale |const char* a|const char* b|I32 len
-p |I32 |ingroup |I32 testgid|I32 effective
+p |bool |ingroup |Gid_t testgid|Uid_t effective
+p |void |init_debugger
p |void |init_stacks
p |U32 |intro_my
p |char* |instr |const char* big|const char* little
-p |bool |io_close |IO* io
+p |bool |io_close |IO* io|bool not_implicit
p |OP* |invert |OP* cmd
p |bool |is_uni_alnum |U32 c
+p |bool |is_uni_alnumc |U32 c
p |bool |is_uni_idfirst |U32 c
p |bool |is_uni_alpha |U32 c
+p |bool |is_uni_ascii |U32 c
p |bool |is_uni_space |U32 c
+p |bool |is_uni_cntrl |U32 c
+p |bool |is_uni_graph |U32 c
p |bool |is_uni_digit |U32 c
p |bool |is_uni_upper |U32 c
p |bool |is_uni_lower |U32 c
p |bool |is_uni_print |U32 c
+p |bool |is_uni_punct |U32 c
+p |bool |is_uni_xdigit |U32 c
p |U32 |to_uni_upper |U32 c
p |U32 |to_uni_title |U32 c
p |U32 |to_uni_lower |U32 c
p |bool |is_uni_alnum_lc|U32 c
+p |bool |is_uni_alnumc_lc|U32 c
p |bool |is_uni_idfirst_lc|U32 c
p |bool |is_uni_alpha_lc|U32 c
+p |bool |is_uni_ascii_lc|U32 c
p |bool |is_uni_space_lc|U32 c
+p |bool |is_uni_cntrl_lc|U32 c
+p |bool |is_uni_graph_lc|U32 c
p |bool |is_uni_digit_lc|U32 c
p |bool |is_uni_upper_lc|U32 c
p |bool |is_uni_lower_lc|U32 c
p |bool |is_uni_print_lc|U32 c
+p |bool |is_uni_punct_lc|U32 c
+p |bool |is_uni_xdigit_lc|U32 c
p |U32 |to_uni_upper_lc|U32 c
p |U32 |to_uni_title_lc|U32 c
p |U32 |to_uni_lower_lc|U32 c
p |bool |is_utf8_alnum |U8 *p
+p |bool |is_utf8_alnumc |U8 *p
p |bool |is_utf8_idfirst|U8 *p
p |bool |is_utf8_alpha |U8 *p
+p |bool |is_utf8_ascii |U8 *p
p |bool |is_utf8_space |U8 *p
+p |bool |is_utf8_cntrl |U8 *p
p |bool |is_utf8_digit |U8 *p
+p |bool |is_utf8_graph |U8 *p
p |bool |is_utf8_upper |U8 *p
p |bool |is_utf8_lower |U8 *p
p |bool |is_utf8_print |U8 *p
+p |bool |is_utf8_punct |U8 *p
+p |bool |is_utf8_xdigit |U8 *p
p |bool |is_utf8_mark |U8 *p
p |OP* |jmaybe |OP* arg
p |I32 |keyword |char* d|I32 len
#if defined(USE_LOCALE_COLLATE)
p |char* |mem_collxfrm |const char* s|STRLEN len|STRLEN* xlen
#endif
-p |SV* |mess |const char* pat|va_list* args
+p |SV* |mess |const char* pat|...
+p |SV* |vmess |const char* pat|va_list* args
+p |void |qerror |SV* err
p |int |mg_clear |SV* sv
p |int |mg_copy |SV* sv|SV* nsv|const char* key|I32 klen
p |MAGIC* |mg_find |SV* sv|int type
p |SV* |newSVpv |const char* s|STRLEN len
p |SV* |newSVpvn |const char* s|STRLEN len
p |SV* |newSVpvf |const char* pat|...
+p |SV* |vnewSVpvf |const char* pat|va_list* args
p |SV* |newSVrv |SV* rv|const char* classname
p |SV* |newSVsv |SV* old
p |OP* |newUNOP |I32 type|I32 flags|OP* first
p |OP* |newWHILEOP |I32 flags|I32 debuggable|LOOP* loop \
|I32 whileline|OP* expr|OP* block|OP* cont
-#if defined(USE_THREADS)
-p |struct perl_thread*|new_struct_thread|struct perl_thread *t
-#endif
+
p |PERL_SI*|new_stackinfo|I32 stitems|I32 cxitems
p |PerlIO*|nextargv |GV* gv
p |char* |ninstr |const char* big|const char* bigend \
no |int |perl_run |PerlInterpreter* sv_interp
no |int |perl_parse |PerlInterpreter* sv_interp|XSINIT_t xsinit \
|int argc|char** argv|char** env
+#if defined(USE_THREADS)
+p |struct perl_thread* |new_struct_thread|struct perl_thread *t
+#endif
#endif
p |void |call_atexit |ATEXIT_t fn|void *ptr
p |I32 |call_argv |const char* sub_name|I32 flags|char** argv
p |void |set_numeric_radix
p |void |set_numeric_standard
p |void |require_pv |const char* pv
-p |void |pidgone |int pid|int status
+p |void |pidgone |Pid_t pid|int status
p |void |pmflag |U16* pmfl|int ch
p |OP* |pmruntime |OP* pm|OP* expr|OP* repl
p |OP* |pmtrans |OP* o|OP* expr|OP* repl
p |OP* |scalarkids |OP* o
p |OP* |scalarseq |OP* o
p |OP* |scalarvoid |OP* o
-p |UV |scan_bin |char* start|I32 len|I32* retlen
-p |UV |scan_hex |char* start|I32 len|I32* retlen
+p |NV |scan_bin |char* start|I32 len|I32* retlen
+p |NV |scan_hex |char* start|I32 len|I32* retlen
p |char* |scan_num |char* s
-p |UV |scan_oct |char* start|I32 len|I32* retlen
+p |NV |scan_oct |char* start|I32 len|I32* retlen
p |OP* |scope |OP* o
p |char* |screaminstr |SV* bigsv|SV* littlesv|I32 start_shift \
|I32 end_shift|I32 *state|I32 last
p |int |sv_backoff |SV* sv
p |SV* |sv_bless |SV* sv|HV* stash
p |void |sv_catpvf |SV* sv|const char* pat|...
+p |void |sv_vcatpvf |SV* sv|const char* pat|va_list* args
p |void |sv_catpv |SV* sv|const char* ptr
p |void |sv_catpvn |SV* sv|const char* ptr|STRLEN len
p |void |sv_catsv |SV* dsv|SV* ssv
p |void |sv_report_used
p |void |sv_reset |char* s|HV* stash
p |void |sv_setpvf |SV* sv|const char* pat|...
+p |void |sv_vsetpvf |SV* sv|const char* pat|va_list* args
p |void |sv_setiv |SV* sv|IV num
p |void |sv_setpviv |SV* sv|IV num
p |void |sv_setuv |SV* sv|UV num
p |void |sv_usepvn |SV* sv|char* ptr|STRLEN len
p |void |sv_vcatpvfn |SV* sv|const char* pat|STRLEN patlen \
|va_list* args|SV** svargs|I32 svmax \
- |bool *used_locale
+ |bool *maybe_tainted
p |void |sv_vsetpvfn |SV* sv|const char* pat|STRLEN patlen \
|va_list* args|SV** svargs|I32 svmax \
- |bool *used_locale
+ |bool *maybe_tainted
p |SV* |swash_init |char* pkg|char* name|SV* listsv \
|I32 minbits|I32 none
p |UV |swash_fetch |SV *sv|U8 *ptr
p |U8* |uv_to_utf8 |U8 *d|UV uv
p |void |vivify_defelem |SV* sv
p |void |vivify_ref |SV* sv|U32 to_what
-p |I32 |wait4pid |int pid|int* statusp|int flags
+p |I32 |wait4pid |Pid_t pid|int* statusp|int flags
p |void |warn |const char* pat|...
+p |void |vwarn |const char* pat|va_list* args
p |void |warner |U32 err|const char* pat|...
+p |void |vwarner |U32 err|const char* pat|va_list* args
p |void |watch |char** addr
p |I32 |whichsig |char* sig
p |int |yyerror |char* s
#if defined(PERL_GLOBAL_STRUCT)
p |struct perl_vars *|GetVars
#endif
-p |void |yydestruct |void *ptr
p |int |runops_standard
p |int |runops_debug
-
-#if defined(WIN32)
-#if defined(PERL_OBJECT)
-p |int& |ErrorNo
-#else
-p |int* |ErrorNo
-#endif
-#endif
p |void |sv_catpvf_mg |SV *sv|const char* pat|...
+p |void |sv_vcatpvf_mg |SV* sv|const char* pat|va_list* args
p |void |sv_catpv_mg |SV *sv|const char *ptr
p |void |sv_catpvn_mg |SV *sv|const char *ptr|STRLEN len
p |void |sv_catsv_mg |SV *dstr|SV *sstr
p |void |sv_setpvf_mg |SV *sv|const char* pat|...
+p |void |sv_vsetpvf_mg |SV* sv|const char* pat|va_list* args
p |void |sv_setiv_mg |SV *sv|IV i
p |void |sv_setpviv_mg |SV *sv|IV iv
p |void |sv_setuv_mg |SV *sv|UV u
p |char* |pv_display |SV *sv|char *pv|STRLEN cur|STRLEN len \
|STRLEN pvlim
p |void |dump_indent |I32 level|PerlIO *file|const char* pat|...
+p |void |dump_vindent |I32 level|PerlIO *file|const char* pat \
+ |va_list *args
p |void |do_gv_dump |I32 level|PerlIO *file|char *name|GV *sv
p |void |do_gvgv_dump |I32 level|PerlIO *file|char *name|GV *sv
p |void |do_hv_dump |I32 level|PerlIO *file|char *name|HV *sv
|I32 maxnest|bool dumpops|STRLEN pvlim
p |void |magic_dump |MAGIC *mg
p |void* |default_protect|int *excpt|protect_body_t body|...
+p |void* |vdefault_protect|int *excpt|protect_body_t body|va_list *args
p |void |reginitcolors
p |char* |sv_2pv_nolen |SV* sv
p |char* |sv_pv |SV *sv
p |void |tmps_grow |I32 n
p |SV* |sv_rvweaken |SV *sv
p |int |magic_killbackrefs|SV *sv|MAGIC *mg
+p |OP* |newANONATTRSUB |I32 floor|OP *proto|OP *attrs|OP *block
+p |CV* |newATTRSUB |I32 floor|OP *o|OP *proto|OP *attrs|OP *block
+p |void |newMYSUB |I32 floor|OP *o|OP *proto|OP *attrs|OP *block
+p |OP * |my_attrs |OP *o|OP *attrs
+p |void |boot_core_xsutils
#if defined(PERL_OBJECT)
protected:
s |int |magic_methpack |SV *sv|MAGIC *mg|char *meth
s |int |magic_methcall |SV *sv|MAGIC *mg|char *meth|I32 f \
|int n|SV *val
-s |void |unwind_handler_stack |void *p
-s |void |restore_magic |void *p
#endif
#if defined(PERL_IN_OP_C) || defined(PERL_DECL_PROT)
s |OP* |scalarboolean |OP *o
s |OP* |too_few_arguments|OP *o|char* name
s |OP* |too_many_arguments|OP *o|char* name
+s |void |op_clear |OP* o
s |void |null |OP* o
s |PADOFFSET|pad_findlex |char* name|PADOFFSET newoff|U32 seq \
|CV* startcv|I32 cx_ix|I32 saweval|U32 flags
s |char* |gv_ename |GV *gv
s |CV* |cv_clone2 |CV *proto|CV *outside
s |bool |scalar_mod_type|OP *o|I32 type
+s |OP * |my_kid |OP *o|OP *attrs
+s |OP * |dup_attrlist |OP *o
+s |void |apply_attrs |HV *stash|SV *target|OP *attrs
# if defined(PL_OP_SLAB_ALLOC)
s |void* |Slab_Alloc |int m|size_t sz
# endif
s |void |incpush |char *|int
s |void |init_interp
s |void |init_ids
-s |void |init_debugger
s |void |init_lexer
s |void |init_main_stash
s |void |init_perllib
s |OP* |doeval |int gimme|OP** startop
s |PerlIO *|doopen_pmc |const char *name|const char *mode
s |void |qsortsv |SV ** array|size_t num_elts|SVCOMPARE_t f
-s |I32 |sortcv |SV *a|SV *b
-s |I32 |sv_ncmp |SV *a|SV *b
-s |I32 |sv_i_ncmp |SV *a|SV *b
-s |I32 |amagic_ncmp |SV *a|SV *b
-s |I32 |amagic_i_ncmp |SV *a|SV *b
-s |I32 |amagic_cmp |SV *str1|SV *str2
-s |I32 |amagic_cmp_locale|SV *str1|SV *str2
#endif
#if defined(PERL_IN_PP_HOT_C) || defined(PERL_DECL_PROT)
s |CV* |get_db_sub |SV **svp|CV *cv
-# if defined(USE_THREADS)
-s |void |unset_cvowner |void *cvarg
-# endif
+s |SV* |method_common |SV* meth|U32* hashp
#endif
#if defined(PERL_IN_PP_SYS_C) || defined(PERL_DECL_PROT)
s |OP* |doform |CV *cv|GV *gv|OP *retop
-s |int |emulate_eaccess|const char* path|int mode
+s |int |emulate_eaccess|const char* path|Mode_t mode
# if !defined(HAS_MKDIR) || !defined(HAS_RMDIR)
s |int |dooneliner |char *cmd|char *filename
# endif
s |regnode*|reganode |U8|U32
s |regnode*|regatom |I32 *
s |regnode*|regbranch |I32 *|I32
-s |void |regc |U8|char *
s |void |reguni |UV|char *|I32*
s |regnode*|regclass
s |regnode*|regclassutf8
s |char*|nextchar
s |regnode*|dumpuntil |regnode *start|regnode *node \
|regnode *last|SV* sv|I32 l
-s |void |scan_commit |scan_data_t *data
+s |void |scan_commit |struct scan_data_t *data
s |I32 |study_chunk |regnode **scanp|I32 *deltap \
- |regnode *last|scan_data_t *data|U32 flags
+ |regnode *last|struct scan_data_t *data \
+ |U32 flags
s |I32 |add_data |I32 n|char *s
rs |void|re_croak2 |const char* pat1|const char* pat2|...
-s |char*|regpposixcc |I32 value
-s |void |clear_re |void *r
+s |I32 |regpposixcc |I32 value
+s |void |checkposixcc
#endif
#if defined(PERL_IN_REGEXEC_C) || defined(PERL_DECL_PROT)
s |char*|regcppop
s |char*|regcp_set_to |I32 ss
s |void |cache_re |regexp *prog
-s |void |restore_pos |void *arg
s |U8* |reghop |U8 *pos|I32 off
s |U8* |reghopmaybe |U8 *pos|I32 off
#endif
s |void |more_xiv
s |void |more_xnv
s |void |more_xpv
+s |void |more_xpviv
+s |void |more_xpvnv
+s |void |more_xpvcv
+s |void |more_xpvav
+s |void |more_xpvhv
+s |void |more_xpvmg
+s |void |more_xpvlv
+s |void |more_xpvbm
s |void |more_xrv
s |XPVIV* |new_xiv
s |XPVNV* |new_xnv
s |XPV* |new_xpv
+s |XPV* |new_xpv
+s |XPVIV* |new_xpviv
+s |XPVNV* |new_xpvnv
+s |XPVCV* |new_xpvcv
+s |XPVAV* |new_xpvav
+s |XPVHV* |new_xpvhv
+s |XPVMG* |new_xpvmg
+s |XPVLV* |new_xpvlv
+s |XPVBM* |new_xpvbm
s |XRV* |new_xrv
s |void |del_xiv |XPVIV* p
s |void |del_xnv |XPVNV* p
s |void |del_xpv |XPV* p
+s |void |del_xpviv |XPVIV* p
+s |void |del_xpvnv |XPVNV* p
+s |void |del_xpvcv |XPVCV* p
+s |void |del_xpvav |XPVAV* p
+s |void |del_xpvhv |XPVHV* p
+s |void |del_xpvmg |XPVMG* p
+s |void |del_xpvlv |XPVLV* p
+s |void |del_xpvbm |XPVBM* p
s |void |del_xrv |XRV* p
s |void |sv_unglob |SV* sv
-s |void |do_report_used |SV *sv
-s |void |do_clean_objs |SV *sv
-s |void |do_clean_named_objs|SV *sv
-s |void |do_clean_all |SV *sv
s |void |not_a_number |SV *sv
s |void |visit |SVFUNC_t f
# if defined(PURIFY)
|STRLEN destlen|I32 ck_uni
s |char* |scan_inputsymbol|char *start
s |char* |scan_pat |char *start|I32 type
-s |char* |scan_str |char *start
+s |char* |scan_str |char *start|int keep_quoted|int keep_delims
s |char* |scan_subst |char *start
s |char* |scan_trans |char *start
s |char* |scan_word |char *s|char *dest|STRLEN destlen \
s |char* |incl_perldb
s |I32 |utf16_textfilter|int idx|SV *sv|int maxlen
s |I32 |utf16rev_textfilter|int idx|SV *sv|int maxlen
-s |void |restore_rsfp |void *f
-s |void |restore_expect |void *e
-s |void |restore_lex_expect |void *e
# if defined(CRIPPLED_CC)
s |int |uni |I32 f|char *s
# endif
#if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT)
s |SV* |mess_alloc
-rs |void |do_croak |const char *pat|va_list *args
-s |void |do_warn |const char *pat|va_list *args
-s |OP* |do_die |const char *pat|va_list *args
# if defined(LEAKTEST)
s |void |xstat |int
# endif