Algorithm-RectanglesContainingDot_XS
view release on metacpan or search on metacpan
162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213access to a large part of the Perl API that hasn't been available in
earlier Perl releases. Use
perl ppport.h --list-provided
to see which API elements are provided by ppport.h.
=item *
You should avoid using deprecated parts of the API. For example, using
global Perl variables without the C<PL_> prefix is deprecated. Also,
some API functions used to have a C<perl_> prefix. Using this form is
also deprecated. You can safely use the supported API, as F<ppport.h>
will provide wrappers for older Perl versions.
=item *
If you use one of a few functions or variables that were not present in
earlier versions of Perl, and that can't be provided using a macro, you
have to explicitly request support for these functions by adding one or
more C<#define>s in your source code before the inclusion of F<ppport.h>.
These functions or variables will be marked C<explicit> in the list shown
by C<--list-provided>.
Depending on whether you module has a single or multiple files that
use such functions or variables, you want either C<static> or global
variants.
For a C<static> function or variable (used only in a single source
file), use:
#define NEED_function
#define NEED_variable
For a global function or variable (used in multiple source files),
use:
#define NEED_function_GLOBAL
#define NEED_variable_GLOBAL
Note that you mustn't have more than one global request for the
same function or variable in your project.
Function / Variable Static Request Global Request
-----------------------------------------------------------------------------------------
PL_signals NEED_PL_signals NEED_PL_signals_GLOBAL
eval_pv() NEED_eval_pv NEED_eval_pv_GLOBAL
grok_bin() NEED_grok_bin NEED_grok_bin_GLOBAL
grok_hex() NEED_grok_hex NEED_grok_hex_GLOBAL
grok_number() NEED_grok_number NEED_grok_number_GLOBAL
grok_numeric_radix() NEED_grok_numeric_radix NEED_grok_numeric_radix_GLOBAL
519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551PERL_MAGIC_backref|5.007002||p
PERL_MAGIC_bm|5.007002||p
PERL_MAGIC_collxfrm|5.007002||p
PERL_MAGIC_dbfile|5.007002||p
PERL_MAGIC_dbline|5.007002||p
PERL_MAGIC_defelem|5.007002||p
PERL_MAGIC_envelem|5.007002||p
PERL_MAGIC_env|5.007002||p
PERL_MAGIC_ext|5.007002||p
PERL_MAGIC_fm|5.007002||p
PERL_MAGIC_glob|5.007002||p
PERL_MAGIC_isaelem|5.007002||p
PERL_MAGIC_isa|5.007002||p
PERL_MAGIC_mutex|5.007002||p
PERL_MAGIC_nkeys|5.007002||p
PERL_MAGIC_overload_elem|5.007002||p
PERL_MAGIC_overload_table|5.007002||p
PERL_MAGIC_overload|5.007002||p
PERL_MAGIC_pos|5.007002||p
PERL_MAGIC_qr|5.007002||p
PERL_MAGIC_regdata|5.007002||p
PERL_MAGIC_regdatum|5.007002||p
PERL_MAGIC_regex_global|5.007002||p
PERL_MAGIC_shared_scalar|5.007003||p
PERL_MAGIC_shared|5.007003||p
PERL_MAGIC_sigelem|5.007002||p
PERL_MAGIC_sig|5.007002||p
PERL_MAGIC_substr|5.007002||p
PERL_MAGIC_sv|5.007002||p
PERL_MAGIC_taint|5.007002||p
PERL_MAGIC_tiedelem|5.007002||p
PERL_MAGIC_tiedscalar|5.007002||p
PERL_MAGIC_tied|5.007002||p
587588589590591592593594595596597598599600601602603604605606607PL_curstash|5.004050||p
PL_debstash|5.004050||p
PL_defgv|5.004050||p
PL_diehook|5.004050||p
PL_dirty|5.004050||p
PL_dowarn|||pn
PL_errgv|5.004050||p
PL_hexdigit|5.005000||p
PL_hints|5.005000||p
PL_last_in_gv|||n
PL_modglobal||5.005000|n
PL_na|5.004050||pn
PL_no_modify|5.006000||p
PL_ofs_sv|||n
PL_perl_destruct_level|5.004050||p
PL_perldb|5.004050||p
PL_ppaddr|5.006000||p
PL_rsfp_filters|5.004050||p
PL_rsfp|5.004050||p
PL_rs|||n
PL_signals|5.008001||p
901902903904905906907908909910911912913914915916917918919920921ck_defined|||
ck_delete|||
ck_die|||
ck_eof|||
ck_eval|||
ck_exec|||
ck_exists|||
ck_exit|||
ck_ftst|||
ck_fun|||
ck_glob|||
ck_grep|||
ck_index|||
ck_join|||
ck_lengthconst|||
ck_lfun|||
ck_listiob|||
ck_match|||
ck_method|||
ck_null|||
ck_open|||
111011111112111311141115111611171118111911201121112211231124112511261127112811291130forbid_setid|||
force_ident|||
force_list|||
force_next|||
force_version|||
force_word|||
form_nocontext|||vn
form||5.004000|v
fp_dup|||
fprintf_nocontext|||vn
free_global_struct|||
free_tied_hv_pool|||
free_tmps|||
gen_constant_list|||
get_av|5.006000||p
get_context||5.006000|n
get_cv|5.006000||p
get_db_sub|||
get_debug_opts|||
get_hash_seed|||
get_hv|5.006000||p
122412251226122712281229123012311232123312341235123612371238123912401241124212431244ibcmp_locale||5.004000|
ibcmp_utf8||5.007003|
ibcmp|||
incl_perldb|||
incline|||
incpush_if_exists|||
incpush|||
ingroup|||
init_argv_symbols|||
init_debugger|||
init_global_struct|||
init_i18nl10n||5.006000|
init_i18nl14n||5.006000|
init_ids|||
init_interp|||
init_lexer|||
init_main_stash|||
init_perllib|||
init_postdump_symbols|||
init_predump_symbols|||
init_stacks||5.005000|
134013411342134313441345134613471348134913501351135213531354135513561357135813591360magic_clearenv|||
magic_clearpack|||
magic_clearsig|||
magic_dump||5.006000|
magic_existspack|||
magic_freearylen_p|||
magic_freeovrld|||
magic_freeregexp|||
magic_getarylen|||
magic_getdefelem|||
magic_getglob|||
magic_getnkeys|||
magic_getpack|||
magic_getpos|||
magic_getsig|||
magic_getsubstr|||
magic_gettaint|||
magic_getuvar|||
magic_getvec|||
magic_get|||
magic_killbackrefs|||
13681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390magic_scalarpack|||
magic_set_all_env|||
magic_setamagic|||
magic_setarylen|||
magic_setbm|||
magic_setcollxfrm|||
magic_setdbline|||
magic_setdefelem|||
magic_setenv|||
magic_setfm|||
magic_setglob|||
magic_setisa|||
magic_setmglob|||
magic_setnkeys|||
magic_setpack|||
magic_setpos|||
magic_setregexp|||
magic_setsig|||
magic_setsubstr|||
magic_settaint|||
magic_setutf8|||
magic_setuvar|||
magic_setvec|||
179717981799180018011802180318041805180618071808180918101811181218131814181518161817sighandler|||n
simplify_sort|||
skipspace|||
sortcv_stacked|||
sortcv_xsub|||
sortcv|||
sortsv_flags||5.009003|
sortsv||5.007003|
ss_dup|||
stack_grow|||
start_glob|||
start_subparse||5.004000|
stashpv_hvname_match||5.009003|
stdize_locale|||
strEQ|||
strGE|||
strGT|||
strLE|||
strLT|||
strNE|||
str_to_version||5.006000|
194619471948194919501951195219531954195519561957195819591960196119621963196419651966sv_setsv_cow|||
sv_setsv_flags||5.007002|
sv_setsv_mg|5.006000||p
sv_setsv_nomg|5.007002||p
sv_setsv|||
sv_setuv_mg|5.006000||p
sv_setuv|5.006000||p
sv_tainted||5.004000|
sv_taint||5.004000|
sv_true||5.005000|
sv_unglob|||
sv_uni_display||5.007003|
sv_unmagic|||
sv_unref_flags||5.007001|
sv_unref|||
sv_untaint||5.004000|
sv_upgrade|||
sv_usepvn_mg|5.006000||p
sv_usepvn|||
sv_utf8_decode||5.006000|
sv_utf8_downgrade||5.006000|
2157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208
}
exit
0;
}
my
@files
;
my
@srcext
=
qw( xs c h cc cpp )
;
my
$srcext
=
join
'|'
,
@srcext
;
if
(
@ARGV
) {
my
%seen
;
@files
=
grep
{ -f && !
exists
$seen
{
$_
} }
map
{
glob
$_
}
@ARGV
;
}
else
{
eval
{
File::Find::find(
sub
{
$File::Find::name
=~ /\.(
$srcext
)$/i
and
push
@files
,
$File::Find::name
;
},
'.'
);
};
if
($@) {
@files
=
map
{
glob
"*.$_"
}
@srcext
;
}
}
if
(!
@ARGV
||
$opt
{filter}) {
my
(
@in
,
@out
);
my
%xsc
=
map
{ /(.*)\.xs$/ ? (
"$1.c"
=> 1,
"$1.cc"
=> 1) : () }
@files
;
for
(
@files
) {
my
$out
=
exists
$xsc
{
$_
} || /\b\Q
$ppport
\E$/i || !/\.(
$srcext
)$/i;
push
@{
$out
? \
@out
: \
@in
},
$_
;
}
if
(
@ARGV
&&
@out
) {
warning(
"Skipping the following files (use --nofilter to avoid this):\n| "
,
join
"\n| "
,
@out
);
}
@files
=
@in
;
}
unless
(
@files
) {
die
"No input files given!\n"
;
}
my
(
%files
,
%global
,
%revreplace
);
%revreplace
=
reverse
%replace
;
my
$filename
;
my
$patch_opened
= 0;
for
$filename
(
@files
) {
unless
(
open
IN,
"<$filename"
) {
warn
"Unable to read from $filename: $!\n"
;
next
;
}
22672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313
if
(
exists
$API
{
$func
}{todo} &&
$API
{
$func
}{todo} >
$opt
{
'compat-version'
}) {
if
(
$c
=~ /\b
$func
\b/) {
$file
{uses_todo}{
$func
}++;
}
}
}
}
while
(
$c
=~ /^
$HS
*
#$HS*define$HS+(NEED_(\w+?)(_GLOBAL)?)\b/mg) {
if
(
exists
$need
{$2}) {
$file
{
defined
$3 ?
'needed_global'
:
'needed_static'
}{$2}++;
}
else
{
warning(
"Possibly wrong #define $1 in $filename"
);
}
}
for
(
qw(uses needs uses_todo needed_global needed_static)
) {
for
$func
(
keys
%{
$file
{
$_
}}) {
push
@{
$global
{
$_
}{
$func
}},
$filename
;
}
}
$files
{
$filename
} = \
%file
;
}
# Globally resolve NEED_'s
my
$need
;
for
$need
(
keys
%{
$global
{needs}}) {
if
(@{
$global
{needs}{
$need
}} > 1) {
my
@targets
= @{
$global
{needs}{
$need
}};
my
@t
=
grep
$files
{
$_
}{needed_global}{
$need
},
@targets
;
@targets
=
@t
if
@t
;
@t
=
grep
/\.xs$/i,
@targets
;
@targets
=
@t
if
@t
;
my
$target
=
shift
@targets
;
$files
{
$target
}{needs}{
$need
} =
'global'
;
for
(@{
$global
{needs}{
$need
}}) {
$files
{
$_
}{needs}{
$need
} =
'extern'
if
$_
ne
$target
;
}
}
}
for
$filename
(
@files
) {
exists
$files
{
$filename
} or
next
;
info(
"=== Analyzing $filename ==="
);
23562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414
warning(
"Uses $func, which may not be portable below perl "
,
format_version(
$API
{
$func
}{todo}));
}
for
$func
(
sort
keys
%{
$file
{needed_static}}) {
my
$message
=
''
;
if
(not
exists
$file
{uses}{
$func
}) {
$message
=
"No need to define NEED_$func if $func is never used"
;
}
elsif
(
exists
$file
{needs}{
$func
} &&
$file
{needs}{
$func
} ne
'static'
) {
$message
=
"No need to define NEED_$func when already needed globally"
;
}
if
(
$message
) {
diag(
$message
);
$file
{changes} += (
$c
=~ s/^
$HS
*
#$HS*define$HS+NEED_$func\b.*$LF//mg);
}
}
for
$func
(
sort
keys
%{
$file
{needed_global}}) {
my
$message
=
''
;
if
(not
exists
$global
{uses}{
$func
}) {
$message
=
"No need to define NEED_${func}_GLOBAL if $func is never used"
;
}
elsif
(
exists
$file
{needs}{
$func
}) {
if
(
$file
{needs}{
$func
} eq
'extern'
) {
$message
=
"No need to define NEED_${func}_GLOBAL when already needed globally"
;
}
elsif
(
$file
{needs}{
$func
} eq
'static'
) {
$message
=
"No need to define NEED_${func}_GLOBAL when only used in this file"
;
}
}
if
(
$message
) {
diag(
$message
);
$file
{changes} += (
$c
=~ s/^
$HS
*
#$HS*define$HS+NEED_${func}_GLOBAL\b.*$LF//mg);
}
}
$file
{needs_inc_ppport} =
keys
%{
$file
{uses}};
if
(
$file
{needs_inc_ppport}) {
my
$pp
=
''
;
for
$func
(
sort
keys
%{
$file
{needs}}) {
my
$type
=
$file
{needs}{
$func
};
next
if
$type
eq
'extern'
;
my
$suffix
=
$type
eq
'global'
?
'_GLOBAL'
:
''
;
unless
(
exists
$file
{
"needed_$type"
}{
$func
}) {
if
(
$type
eq
'global'
) {
diag(
"Files [@{$global{needs}{$func}}] need $func, adding global request"
);
}
else
{
diag(
"File needs $func, adding static request"
);
}
$pp
.=
"#define NEED_$func$suffix\n"
;
}
}
if
(
$pp
&& (
$c
=~ s/^(?=
$HS
*
#$HS*define$HS+NEED_\w+)/$pp/m)) {
$pp
=
''
;
368136823683368436853686368736883689369036913692369336943695369636973698369937003701* right
after
the definition (i.e. at file scope). The non-threads
* case below uses it to declare the data as static. */
#define START_MY_CXT
#if ((PERL_VERSION < 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION < 68)))
/* Fetches the SV that keeps the per-interpreter data. */
#define dMY_CXT_SV \
SV
*my_cxt_sv
= get_sv(MY_CXT_KEY, FALSE)
#else /* >= perl5.004_68 */
#define dMY_CXT_SV \
SV
*my_cxt_sv
=
*hv_fetch
(PL_modglobal, MY_CXT_KEY, \
sizeof(MY_CXT_KEY)-1, TRUE)
#endif /* < perl5.004_68 */
* interpreter-
local
data. */
#define dMY_CXT \
dMY_CXT_SV; \
my_cxt_t
*my_cxtp
= INT2PTR(my_cxt_t*,SvUV(my_cxt_sv))
/* Creates and zeroes the per-interpreter data.
417141724173417441754176417741784179418041814182418341844185418641874188418941904191#endif
#ifndef PERL_MAGIC_envelem
# define PERL_MAGIC_envelem 'e'
#endif
#ifndef PERL_MAGIC_fm
# define PERL_MAGIC_fm 'f'
#endif
#ifndef PERL_MAGIC_regex_global
# define PERL_MAGIC_regex_global 'g'
#endif
#ifndef PERL_MAGIC_isa
# define PERL_MAGIC_isa 'I'
#endif
#ifndef PERL_MAGIC_isaelem
# define PERL_MAGIC_isaelem 'i'
#endif
426742684269427042714272427342744275427642774278427942804281428242834284428542864287#endif
#ifndef PERL_MAGIC_substr
# define PERL_MAGIC_substr 'x'
#endif
#ifndef PERL_MAGIC_defelem
# define PERL_MAGIC_defelem 'y'
#endif
#ifndef PERL_MAGIC_glob
# define PERL_MAGIC_glob '*'
#endif
#ifndef PERL_MAGIC_arylen
# define PERL_MAGIC_arylen '#'
#endif
#ifndef PERL_MAGIC_pos
# define PERL_MAGIC_pos '.'
#endif
( run in 0.674 second using v1.01-cache-2.11-cpan-95122f20152 )