Algorithm-CP-IZ
view release on metacpan or search on metacpan
4567891011121314151617
- Add support
for
cs_Reguar (iZ-C 3.7)
0.05 Fri Jul 12 2019
- Support iZ-C 3.6 APIs
0.03 Sun Aug 27 2017
- Now
$iz
->restore_context_until can restore
values
even
if
$iz
->search is called.
0.02 Mon Nov 07 2015
- Change
default
directories
for
header and include in Makefile.PL
- Avoid error
"during global destruction."
0.01 Mon Oct 12 14:31:13 2015
- first release;
lib/Algorithm/CP/IZ.pm view on Meta::CPAN
102103104105106107108109110111112113114115116117118119120121122
_ref_int_arrays
=> {},
_ref_var_arrays
=> {},
},
$class
;
}
sub
DESTROY {
my
$self
=
shift
;
my
$vars
=
$self
->{_vars};
for
my
$v
(
@$vars
) {
# we must check existence of variable for global destruction.
$v
->_invalidate
if
(
defined
$v
);
}
Algorithm::CP::IZ::cs_end();
$Instances
--;
}
sub
save_context {
my
$self
=
shift
;
174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225access 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_parser NEED_PL_parser NEED_PL_parser_GLOBAL
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
593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625PERL_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.019002||p
PERL_MAGIC_isaelem|5.007002||p
PERL_MAGIC_isa|5.007002||p
PERL_MAGIC_mutex|5.019002||p
PERL_MAGIC_nkeys|5.007002||p
PERL_MAGIC_overload_elem|5.019002||p
PERL_MAGIC_overload_table|5.007002||p
PERL_MAGIC_overload|5.019002||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
698699700701702703704705706707708709710711712713714715716717718PL_hexdigit|5.005000||p
PL_hints|5.005000||p
PL_in_my_stash|5.019002||p
PL_in_my|5.019002||p
PL_keyword_plugin||5.011002|
PL_last_in_gv|||n
PL_laststatval|5.005000||p
PL_lex_state|5.019002||p
PL_lex_stuff|5.019002||p
PL_linestr|5.019002||p
PL_modglobal||5.005000|n
PL_na|5.004050||pn
PL_no_modify|5.006000||p
PL_ofsgv|||n
PL_opfreehook||5.011000|n
PL_parser|5.009005|5.009005|p
PL_peepp||5.007003|n
PL_perl_destruct_level|5.004050||p
PL_perldb|5.004050||p
PL_ppaddr|5.006000||p
PL_rpeepp||5.013005|n
147114721473147414751476147714781479148014811482148314841485148614871488148914901491force_next|||
force_strict_version|||
force_version|||
force_word|||
forget_pmop|||
form_nocontext|||vn
form_short_octal_warning|||
form||5.004000|v
fp_dup|||
fprintf_nocontext|||vn
free_global_struct|||
free_tied_hv_pool|||
free_tmps|||
gen_constant_list|||
get_and_check_backslash_N_name|||
get_aux_mg|||
get_av|5.006000||p
get_context||5.006000|n
get_cvn_flags|5.009005||p
get_cvs|5.011000||p
get_cv|5.006000||p
15011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523get_num|||
get_op_descs||5.005000|
get_op_names||5.005000|
get_opargs|||
get_ppaddr||5.006000|
get_re_arg|||
get_sv|5.006000||p
get_vtbl||5.005030|
getcwd_sv||5.007002|
getenv_len|||
glob_2number|||
glob_assign_glob|||
glob_assign_ref|||
gp_dup|||
gp_free|||
gp_ref|||
grok_bin|5.007003||p
grok_bslash_N|||
grok_bslash_c|||
grok_bslash_o|||
grok_bslash_x|||
grok_hex|5.007003||p
grok_number|5.007002||p
163616371638163916401641164216431644164516461647164816491650165116521653165416551656ibcmp|||
incline|||
incpush_if_exists|||
incpush_use_sep|||
incpush|||
ingroup|||
init_argv_symbols|||
init_constants|||
init_dbargs|||
init_debugger|||
init_global_struct|||
init_i18nl10n||5.006000|
init_i18nl14n||5.006000|
init_ids|||
init_interp|||
init_main_stash|||
init_perllib|||
init_postdump_symbols|||
init_predump_symbols|||
init_stacks||5.005000|
init_tm||5.007002|
184118421843184418451846184718481849185018511852185318541855185618571858185918601861magic_regdatum_set|||
magic_scalarpack|||
magic_set_all_env|||
magic_setarylen|||
magic_setcollxfrm|||
magic_setdbline|||
magic_setdefelem|||
magic_setenv|||
magic_sethint|||
magic_setisa|||
magic_setmglob|||
magic_setnkeys|||
magic_setpack|||
magic_setpos|||
magic_setregexp|||
magic_setsig|||
magic_setsubstr|||
magic_settaint|||
magic_setutf8|||
magic_setuvar|||
magic_setvec|||
188018811882188318841885188618871888188918901891189218931894189518961897189818991900mem_log_common|||n
mess_alloc|||
mess_nocontext|||vn
mess_sv||5.013001|
mess||5.006000|v
method_common|||
mfree||5.007002|n
mg_clear|||
mg_copy|||
mg_dup|||
mg_find_mglob|||
mg_findext|5.013008|5.013008|p
mg_find|||
mg_free_type||5.013006|
mg_free|||
mg_get|||
mg_length||5.005000|
mg_localize|||
mg_magical|||
mg_set|||
mg_size||5.005000|
239924002401240224032404240524062407240824092410241124122413241424152416241724182419softref2xv|||
sortcv_stacked|||
sortcv_xsub|||
sortcv|||
sortsv_flags||5.009003|
sortsv||5.007003|
space_join_names_mortal|||
ss_dup|||
stack_grow|||
start_force|||
start_glob|||
start_subparse||5.004000|
stdize_locale|||
strEQ|||
strGE|||
strGT|||
strLE|||
strLT|||
strNE|||
str_to_version||5.006000|
strip_return|||
251925202521252225232524252525262527252825292530253125322533253425352536253725382539sv_insert_flags||5.010001|
sv_insert|||
sv_isa|||
sv_isobject|||
sv_iv||5.005000|
sv_kill_backrefs|||
sv_len_utf8_nomg|||
sv_len_utf8||5.006000|
sv_len|||
sv_magic_portable|5.019003|5.004000|p
sv_magicext_mglob|||
sv_magicext||5.007003|
sv_magic|||
sv_mortalcopy_flags|||
sv_mortalcopy|||
sv_ncmp|||
sv_newmortal|||
sv_newref|||
sv_nolocking||5.007003|
sv_nosharing||5.007003|
sv_nounlocking|||
259325942595259625972598259926002601260226032604260526062607260826092610261126122613sv_setsv_cow|||
sv_setsv_flags||5.007002|
sv_setsv_mg|5.004050||p
sv_setsv_nomg|5.007002||p
sv_setsv|||
sv_setuv_mg|5.004050||p
sv_setuv|5.004000||p
sv_tainted||5.004000|
sv_taint||5.004000|
sv_true||5.005000|
sv_unglob|||
sv_uni_display||5.007003|
sv_unmagicext|5.013008|5.013008|p
sv_unmagic|||
sv_unref_flags||5.007001|
sv_unref|||
sv_untaint||5.004000|
sv_upgrade|||
sv_usepvn_flags||5.009004|
sv_usepvn_mg|5.004050||p
sv_usepvn|||
291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971if
(
@ARGV
) {
my
%seen
;
for
(
@ARGV
) {
if
(-e) {
if
(-f) {
push
@files
,
$_
unless
$seen
{
$_
}++;
}
else
{
warn
"'$_' is not a file.\n"
}
}
else
{
my
@new
=
grep
{ -f }
glob
$_
or
warn
"'$_' does not exist.\n"
;
push
@files
,
grep
{ !
$seen
{
$_
}++ }
@new
;
}
}
}
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
;
}
die
"No input files given!\n"
unless
@files
;
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
;
}
302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065
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 ==="
);
31113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169
$warnings
++;
}
}
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
=
''
;
493849394940494149424943494449454946494749484949495049514952495349544955495649574958* 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_BCDVERSION < 0x5004068)
/* 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.
609860996100610161026103610461056106610761086109611061116112611361146115611661176118#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
619461956196619761986199620062016202620362046205620662076208620962106211621262136214#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
644164426443644464456446644764486449645064516452645364546455645664576458645964606461if
(SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
return
0;
mgp = &(SvMAGIC(sv));
for
(mg =
*mgp
; mg; mg =
*mgp
) {
const MGVTBL* const virt = mg->mg_virtual;
if
(mg->mg_type == type && virt == vtbl) {
*mgp
= mg->mg_moremagic;
if
(virt && virt->svt_free)
virt->svt_free(aTHX_ sv, mg);
if
(mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
if
(mg->mg_len > 0)
Safefree(mg->mg_ptr);
else
if
(mg->mg_len == HEf_SVKEY) /* Questionable on older perls... */
SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
else
if
(mg->mg_type == PERL_MAGIC_utf8)
Safefree(mg->mg_ptr);
}
if
(mg->mg_flags & MGf_REFCOUNTED)
SvREFCNT_dec(mg->mg_obj);
Safefree(mg);
( run in 0.241 second using v1.01-cache-2.11-cpan-95122f20152 )