BerkeleyDB
view release on metacpan or search on metacpan
BerkeleyDB.pm view on Meta::CPAN
737738739740741742743744745746747748749750751752753754755756# Preloaded methods go here.
sub
ParseParameters($@)
{
my
(
$default
,
@rest
) =
@_
;
my
(
%got
) =
%$default
;
my
(
@Bad
) ;
my
(
$key
,
$value
) ;
my
$sub
= (
caller
(1))[3] ;
my
%options
= () ;
local
(
$Carp::CarpLevel
) = 1 ;
# allow the options to be passed as a hash reference or
# as the complete hash.
if
(
@rest
== 1) {
croak
"$sub: parameter is not a reference to a hash"
if
ref
$rest
[0] ne
"HASH"
;
16639166401664116642166431664416645166461664716648166491665016651166521665316654166551665616657166581665916660166611666216663166641666516666166671666816669166701667116672166731667416675
for
(;;) {
/* we may be in a higher stacklevel, so dig down deeper */
while
(cxix < 0 && top_si->si_type != PERLSI_MAIN) {
top_si = top_si->si_prev;
ccstack = top_si->si_cxstack;
cxix = DPPP_dopoptosub_at(ccstack, top_si->si_cxix);
}
if
(cxix < 0)
return
NULL;
/*
caller
() should not report the automatic calls to
&DB::sub
*/
if
(PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
level++;
if
(!level--)
break;
cxix = DPPP_dopoptosub_at(ccstack, cxix - 1);
}
cx =
&ccstack
[cxix];
if
(dbcxp)
*dbcxp
= cx;
if
(CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
const I32 dbcxix = DPPP_dopoptosub_at(ccstack, cxix - 1);
/* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
field below is
defined
for
any cx. */
/*
caller
() should not report the automatic calls to
&DB::sub
*/
if
(PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
cx =
&ccstack
[dbcxix];
}
return
cx;
}
# endif
#endif /* caller_cx */
#endif /* 5.6.0 */
( run in 0.450 second using v1.01-cache-2.11-cpan-5f2e87ce722 )