Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 24 additions & 15 deletions embed.fnc
Original file line number Diff line number Diff line change
Expand Up @@ -771,13 +771,19 @@ Cpd |I32 |debop |NN const OP* o
Apd |I32 |debstack
Cp |I32 |debstackptrs
pR |SV * |defelem_target |NN SV *sv|NULLOK MAGIC *mg
ATpd |char* |delimcpy|NN char* to|NN const char* to_end \
AiTpd |char* |delimcpy|NN char* to|NN const char* to_end \
|NN const char* from|NN const char* from_end \
|const int delim|NN I32* retlen
ATpd |char* |delimcpy_strlen_retlen|NN char* to \
|NN const char* to_end \
|NN const char* from \
|NN const char* from_end \
|const int delim \
|NN Size_t* retlen
EXTpd |char* |delimcpy_no_escape|NN char* to|NN const char* to_end \
|NN const char* from \
|NN const char* from_end \
|const int delim|NN I32* retlen
|const int delim|NN Size_t* retlen
: Used in op.c, perl.c
px |void |delete_eval_scope
Aprd |OP* |die_sv |NN SV *baseex
Expand Down Expand Up @@ -1011,7 +1017,7 @@ p |void |gv_setref |NN SV *const dsv|NN SV *const ssv
Apd |HV* |gv_stashpv |NN const char* name|I32 flags
Apd |HV* |gv_stashpvn |NN const char* name|U32 namelen|I32 flags
#if defined(PERL_IN_GV_C) || defined(PERL_IN_UNIVERSAL_C)
EpGd |HV* |gv_stashsvpvn_cached|SV *namesv|const char* name|U32 namelen|I32 flags
EpGd |HV* |gv_stashsvpvn_cached|SV *namesv|const char* name|STRLEN namelen|I32 flags
#endif
#if defined(PERL_IN_GV_C)
i |HV* |gv_stashpvn_internal |NN const char* name|U32 namelen|I32 flags
Expand All @@ -1024,19 +1030,22 @@ Apd |void |hv_clear |NULLOK HV *hv
: used in SAVEHINTS() and op.c
ApdR |HV * |hv_copy_hints_hv|NULLOK HV *const ohv
Cp |void |hv_delayfree_ent|NULLOK HV *notused|NULLOK HE *entry
AbMdp |SV* |hv_delete |NULLOK HV *hv|NN const char *key|I32 klen \
AbMdp |SV* |hv_delete |NULLOK HV *hv|NN const char *key|SSize_t klen \
|I32 flags
AbMdp |SV* |hv_delete_ent |NULLOK HV *hv|NN SV *keysv|I32 flags|U32 hash
AbMdRp |bool |hv_exists |NULLOK HV *hv|NN const char *key|I32 klen
AbMdRp |bool |hv_exists |NULLOK HV *hv|NN const char *key|SSize_t klen
AbMdRp |bool |hv_exists_ent |NULLOK HV *hv|NN SV *keysv|U32 hash
AbMdp |SV** |hv_fetch |NULLOK HV *hv|NN const char *key|I32 klen \
AbMdp |SV** |hv_fetch |NULLOK HV *hv|NN const char *key|SSize_t klen \
|I32 lval
AbMdp |HE* |hv_fetch_ent |NULLOK HV *hv|NN SV *keysv|I32 lval|U32 hash
Cp |void* |hv_common |NULLOK HV *hv|NULLOK SV *keysv \
|NULLOK const char* key|STRLEN klen|int flags \
|int action|NULLOK SV *val|U32 hash
Cp |void* |hv_common_key_len|NULLOK HV *hv|NN const char *key \
|I32 klen_i32|const int action|NULLOK SV *val \
Cp |void* |hv_common_key_len|NULLOK HV *hv \
|NN const char *key \
|SSize_t klen_ssize_t \
|const int action \
|NULLOK SV *val \
|const U32 hash
Cpod |STRLEN |hv_fill |NN HV *const hv
Cp |void |hv_free_ent |NULLOK HV *notused|NULLOK HE *entry
Expand Down Expand Up @@ -1074,12 +1083,12 @@ Xpd |struct refcounted_he *|refcounted_he_new_sv \
Xpd |void |refcounted_he_free|NULLOK struct refcounted_he *he
Xpd |struct refcounted_he *|refcounted_he_inc|NULLOK struct refcounted_he *he
ApbMd |SV** |hv_store |NULLOK HV *hv|NULLOK const char *key \
|I32 klen|NULLOK SV *val|U32 hash
|SSize_t klen|NULLOK SV *val|U32 hash
Amd |SV** |hv_stores |NULLOK HV* hv|"key"|NULLOK SV* val
ApbMd |HE* |hv_store_ent |NULLOK HV *hv|NULLOK SV *key|NULLOK SV *val\
|U32 hash
ApbMx |SV** |hv_store_flags |NULLOK HV *hv|NULLOK const char *key \
|I32 klen|NULLOK SV *val|U32 hash|int flags
|SSize_t klen|NULLOK SV *val|U32 hash|int flags
Amd |void |hv_undef |NULLOK HV *hv
poX |void |hv_undef_flags |NULLOK HV *hv|U32 flags
AdmP |I32 |ibcmp |NN const char* a|NN const char* b|I32 len
Expand Down Expand Up @@ -1227,7 +1236,7 @@ EXdpR |bool |isSCRIPT_RUN |NN const U8 *s|NN const U8 *send \
: Used in perly.y
p |OP* |jmaybe |NN OP *o
: Used in pp.c
pP |I32 |keyword |NN const char *name|I32 len|bool all_keywords
pP |I32 |keyword |NN const char *name|SSize_t len|bool all_keywords
#if defined(PERL_IN_OP_C)
S |void |inplace_aassign |NN OP* o
#endif
Expand Down Expand Up @@ -1383,7 +1392,7 @@ Apd |void |sortsv |NULLOK SV** array|size_t num_elts|NN SVCOMPARE_t cmp
Apd |void |sortsv_flags |NULLOK SV** array|size_t num_elts|NN SVCOMPARE_t cmp|U32 flags
Apd |int |mg_clear |NN SV* sv
Apd |int |mg_copy |NN SV *sv|NN SV *nsv|NULLOK const char *key \
|I32 klen
|SSize_t klen
: Defined in mg.c, used only in scope.c
pd |void |mg_localize |NN SV* sv|NN SV* nsv|bool setmagic
Apd |SV* |sv_string_from_errnum|int errnum|NULLOK SV* tgtsv
Expand Down Expand Up @@ -1856,7 +1865,7 @@ Apd |void |sv_free |NULLOK SV *const sv
poxX |void |sv_free2 |NN SV *const sv|const U32 refcnt
: Used only in perl.c
pd |void |sv_free_arenas
Apd |char* |sv_gets |NN SV *const sv|NN PerlIO *const fp|I32 append
Apd |char* |sv_gets |NN SV *const sv|NN PerlIO *const fp|SSize_t append
Cpd |char* |sv_grow |NN SV *const sv|STRLEN newlen
Cpd |char* |sv_grow_fresh |NN SV *const sv|STRLEN newlen
Apd |void |sv_inc |NULLOK SV *const sv
Expand All @@ -1872,7 +1881,7 @@ Apd |STRLEN |sv_len |NULLOK SV *const sv
Apd |STRLEN |sv_len_utf8 |NULLOK SV *const sv
Apd |STRLEN |sv_len_utf8_nomg|NN SV *const sv
Apd |void |sv_magic |NN SV *const sv|NULLOK SV *const obj|const int how \
|NULLOK const char *const name|const I32 namlen
|NULLOK const char *const name|const SSize_t namlen
Apd |MAGIC *|sv_magicext |NN SV *const sv|NULLOK SV *const obj|const int how \
|NULLOK const MGVTBL *const vtbl|NULLOK const char *const name \
|const I32 namlen
Expand Down Expand Up @@ -2890,7 +2899,7 @@ SaTR |HEK* |save_hek_flags |NN const char *str|I32 len|U32 hash|int flags
ST |void |hv_magic_check |NN HV *hv|NN bool *needs_copy|NN bool *needs_store
S |void |unshare_hek_or_pvn|NULLOK const HEK* hek|NULLOK const char* str|I32 len|U32 hash
SR |HEK* |share_hek_flags|NN const char *str|STRLEN len|U32 hash|int flags
rS |void |hv_notallowed |int flags|NN const char *key|I32 klen|NN const char *msg
rS |void |hv_notallowed |int flags|NN const char *key|SSize_t klen|NN const char *msg
S |struct xpvhv_aux*|hv_auxinit|NN HV *hv
Sx |SV* |hv_delete_common|NULLOK HV *hv|NULLOK SV *keysv \
|NULLOK const char *key|STRLEN klen|int k_flags|I32 d_flags \
Expand Down
1 change: 1 addition & 0 deletions embed.h
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,7 @@
#define debstack() Perl_debstack(aTHX)
#define debstackptrs() Perl_debstackptrs(aTHX)
#define delimcpy Perl_delimcpy
#define delimcpy_strlen_retlen Perl_delimcpy_strlen_retlen
#define despatch_signals() Perl_despatch_signals(aTHX)
#ifndef MULTIPLICITY
#define die Perl_die
Expand Down
2 changes: 1 addition & 1 deletion ext/XS-APItest/APItest.xs
Original file line number Diff line number Diff line change
Expand Up @@ -6995,7 +6995,7 @@ test_delimcpy_no_escape(SV * from_sv, STRLEN trunc_from, char delim, STRLEN to_l
PREINIT:
char * from;
AV *av;
I32 retlen;
STRLEN retlen;
char * from_pos_after_copy;
char * to;
CODE:
Expand Down
11 changes: 9 additions & 2 deletions ext/XS-APItest/t/delimcpy.t
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ sub expected($$$$) {

my $b = "\\";
my $poison = '?';
my $failure_return = 0x7FFF_FFFF; # I32 max
my $ret;

# ib = innocent bystander; a character that isn't a delimiter nor an escape
Expand Down Expand Up @@ -137,7 +136,15 @@ foreach my $d ("x", "\0") { # Try both printable and NUL delimiters
# also do a general test on 'delimcpy_no_escape'
foreach my $d ("x", "\0", '\\') {
for my $func (qw(delimcpy delimcpy_no_escape)) {
next if $func eq 'delimcpy' && $d ne '\\';
my $failure_return;
if ($func eq 'delimcpy') {
next if $d ne '\\';
$failure_return = 0x7FFF_FFFF; # I32 max
}
else {
$failure_return = ~0;
}

my $test_func = "test_$func";

my $source = $ib;
Expand Down
4 changes: 2 additions & 2 deletions gv.c
Original file line number Diff line number Diff line change
Expand Up @@ -1673,7 +1673,7 @@ reasons.
assert(namesv || name)

HV*
Perl_gv_stashsvpvn_cached(pTHX_ SV *namesv, const char *name, U32 namelen, I32 flags)
Perl_gv_stashsvpvn_cached(pTHX_ SV *namesv, const char *name, STRLEN namelen, I32 flags)
{
HV* stash;
HE* he;
Expand Down Expand Up @@ -1710,7 +1710,7 @@ Perl_gv_stashsvpvn_cached(pTHX_ SV *namesv, const char *name, U32 namelen, I32 f
if (stash && namelen) {
SV* const ref = newSViv(PTR2IV(stash));
(void)hv_store(PL_stashcache, name,
(flags & SVf_UTF8) ? -(I32)namelen : (I32)namelen, ref, 0);
(flags & SVf_UTF8) ? -(SSize_t)namelen : namelen, ref, 0);
}

return stash;
Expand Down
10 changes: 5 additions & 5 deletions hv.c
Original file line number Diff line number Diff line change
Expand Up @@ -310,7 +310,7 @@ Perl_he_dup(pTHX_ const HE *e, bool shared, CLONE_PARAMS* param)
#endif /* USE_ITHREADS */

static void
S_hv_notallowed(pTHX_ int flags, const char *key, I32 klen,
S_hv_notallowed(pTHX_ int flags, const char *key, SSize_t klen,
const char *msg)
{
/* Straight to SVt_PVN here, as needed by sv_setpvn_fresh and
Expand Down Expand Up @@ -457,19 +457,19 @@ information on how to use this function on tied hashes.

/* Common code for hv_delete()/hv_exists()/hv_fetch()/hv_store() */
void *
Perl_hv_common_key_len(pTHX_ HV *hv, const char *key, I32 klen_i32,
Perl_hv_common_key_len(pTHX_ HV *hv, const char *key, SSize_t klen_ssize_t,
const int action, SV *val, const U32 hash)
{
STRLEN klen;
int flags;

PERL_ARGS_ASSERT_HV_COMMON_KEY_LEN;

if (klen_i32 < 0) {
klen = -klen_i32;
if (klen_ssize_t < 0) {
klen = -klen_ssize_t;
flags = HVhek_UTF8;
} else {
klen = klen_i32;
klen = klen_ssize_t;
flags = 0;
}
return hv_common(hv, NULL, key, klen, flags, action, val, hash);
Expand Down
34 changes: 31 additions & 3 deletions inline.h
Original file line number Diff line number Diff line change
Expand Up @@ -2759,7 +2759,9 @@ Perl_cx_pushsub(pTHX_ PERL_CONTEXT *cx, CV *cv, OP *retop, bool hasargs)

PERL_DTRACE_PROBE_ENTRY(cv);
cx->blk_sub.old_cxsubix = PL_curstackinfo->si_cxsubix;
PL_curstackinfo->si_cxsubix = cx - PL_curstackinfo->si_cxstack;
Ptrdiff_t diff = cx - PL_curstackinfo->si_cxstack;
ASSUME(diff <= I32_MAX);
PL_curstackinfo->si_cxsubix = (I32) diff;
cx->blk_sub.cv = cv;
cx->blk_sub.olddepth = CvDEPTH(cv);
cx->blk_sub.prevcomppad = PL_comppad;
Expand Down Expand Up @@ -2834,7 +2836,10 @@ Perl_cx_pushformat(pTHX_ PERL_CONTEXT *cx, CV *cv, OP *retop, GV *gv)
PERL_ARGS_ASSERT_CX_PUSHFORMAT;

cx->blk_format.old_cxsubix = PL_curstackinfo->si_cxsubix;
PL_curstackinfo->si_cxsubix= cx - PL_curstackinfo->si_cxstack;
Ptrdiff_t diff = cx - PL_curstackinfo->si_cxstack;
ASSUME(diff <= I32_MAX);
PL_curstackinfo->si_cxsubix = (I32) diff;
cx->blk_sub.cv = cv;
cx->blk_format.cv = cv;
cx->blk_format.retop = retop;
cx->blk_format.gv = gv;
Expand Down Expand Up @@ -2895,7 +2900,9 @@ Perl_cx_pusheval(pTHX_ PERL_CONTEXT *cx, OP *retop, SV *namesv)
Perl_push_evalortry_common(aTHX_ cx, retop, namesv);

cx->blk_eval.old_cxsubix = PL_curstackinfo->si_cxsubix;
PL_curstackinfo->si_cxsubix = cx - PL_curstackinfo->si_cxstack;
Ptrdiff_t diff = cx - PL_curstackinfo->si_cxstack;
ASSUME(diff <= I32_MAX);
PL_curstackinfo->si_cxsubix = (I32) diff;
}

PERL_STATIC_INLINE void
Expand Down Expand Up @@ -3426,6 +3433,27 @@ Perl_cop_file_avn(pTHX_ const COP *cop) {

#endif

PERL_STATIC_INLINE char *
Perl_delimcpy(char *to, const char *to_end,
const char *from, const char *from_end,
const int delim, I32 *retlen)
{
PERL_ARGS_ASSERT_DELIMCPY;

STRLEN strlen_retlen;

char * ret = delimcpy_strlen_retlen(to, to_end, from, from_end, delim,
&strlen_retlen);
if (strlen_retlen == SIZE_MAX) {
*retlen = I32_MAX;
}
else {
ASSUME(strlen_retlen <= I32_MAX);
*retlen = (I32) strlen_retlen;
}
return ret;
}

/*
* ex: set ts=8 sts=4 sw=4 et:
*/
4 changes: 2 additions & 2 deletions keywords.c

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion keywords.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

34 changes: 17 additions & 17 deletions mathoms.c
Original file line number Diff line number Diff line change
Expand Up @@ -577,61 +577,61 @@ Perl_hv_delete_ent(pTHX_ HV *hv, SV *keysv, I32 flags, U32 hash)
}

SV**
Perl_hv_store_flags(pTHX_ HV *hv, const char *key, I32 klen, SV *val, U32 hash,
Perl_hv_store_flags(pTHX_ HV *hv, const char *key, SSize_t klen, SV *val, U32 hash,
int flags)
{
return (SV**) hv_common(hv, NULL, key, klen, flags,
(HV_FETCH_ISSTORE|HV_FETCH_JUST_SV), val, hash);
}

SV**
Perl_hv_store(pTHX_ HV *hv, const char *key, I32 klen_i32, SV *val, U32 hash)
Perl_hv_store(pTHX_ HV *hv, const char *key, SSize_t klen_ssize_t, SV *val, U32 hash)
{
STRLEN klen;
int flags;

if (klen_i32 < 0) {
klen = -klen_i32;
if (klen_ssize_t < 0) {
klen = -klen_ssize_t;
flags = HVhek_UTF8;
} else {
klen = klen_i32;
klen = klen_ssize_t;
flags = 0;
}
return (SV **) hv_common(hv, NULL, key, klen, flags,
(HV_FETCH_ISSTORE|HV_FETCH_JUST_SV), val, hash);
}

bool
Perl_hv_exists(pTHX_ HV *hv, const char *key, I32 klen_i32)
Perl_hv_exists(pTHX_ HV *hv, const char *key, SSize_t klen_ssize_t)
{
STRLEN klen;
int flags;

PERL_ARGS_ASSERT_HV_EXISTS;

if (klen_i32 < 0) {
klen = -klen_i32;
if (klen_ssize_t < 0) {
klen = -klen_ssize_t;
flags = HVhek_UTF8;
} else {
klen = klen_i32;
klen = klen_ssize_t;
flags = 0;
}
return cBOOL(hv_common(hv, NULL, key, klen, flags, HV_FETCH_ISEXISTS, 0, 0));
}

SV**
Perl_hv_fetch(pTHX_ HV *hv, const char *key, I32 klen_i32, I32 lval)
Perl_hv_fetch(pTHX_ HV *hv, const char *key, SSize_t klen_ssize_t, I32 lval)
{
STRLEN klen;
int flags;

PERL_ARGS_ASSERT_HV_FETCH;

if (klen_i32 < 0) {
klen = -klen_i32;
if (klen_ssize_t < 0) {
klen = -klen_ssize_t;
flags = HVhek_UTF8;
} else {
klen = klen_i32;
klen = klen_ssize_t;
flags = 0;
}
return (SV **) hv_common(hv, NULL, key, klen, flags,
Expand All @@ -640,18 +640,18 @@ Perl_hv_fetch(pTHX_ HV *hv, const char *key, I32 klen_i32, I32 lval)
}

SV *
Perl_hv_delete(pTHX_ HV *hv, const char *key, I32 klen_i32, I32 flags)
Perl_hv_delete(pTHX_ HV *hv, const char *key, SSize_t klen_ssize_t, I32 flags)
{
STRLEN klen;
int k_flags;

PERL_ARGS_ASSERT_HV_DELETE;

if (klen_i32 < 0) {
klen = -klen_i32;
if (klen_ssize_t < 0) {
klen = -klen_ssize_t;
k_flags = HVhek_UTF8;
} else {
klen = klen_i32;
klen = klen_ssize_t;
k_flags = 0;
}
return MUTABLE_SV(hv_common(hv, NULL, key, klen, k_flags, flags | HV_DELETE,
Expand Down
Loading