diff options
author | David Mitchell <davem@iabyn.com> | 2016-07-25 12:24:39 +0100 |
---|---|---|
committer | David Mitchell <davem@iabyn.com> | 2016-08-03 20:54:41 +0100 |
commit | 6daeaaa3123e456674380042544721b5f7a41f69 (patch) | |
tree | ea41fe0c05f003c52d2e24dee736aef801cc32eb /perly.y | |
parent | bb6b75cd5c416da00accfd5a10bde1a1cdde693a (diff) | |
download | perl-6daeaaa3123e456674380042544721b5f7a41f69.tar.gz |
signatures: make param and optional param count IV
During the course of parsing end exection, these values get stored
as ints and UVs, then used as SSize_t.
Standardise on IVs instead. Technically they can never be negative, but
their final use is as indices into AVs, which is SSize_t, so it's
easier to standardise on a signed value throughout.
Diffstat (limited to 'perly.y')
-rw-r--r-- | perly.y | 11 |
1 files changed, 6 insertions, 5 deletions
@@ -708,7 +708,8 @@ sigscalarelem: defexpr, LINKLIST(defexpr)); /* re-purpose op_targ to hold @_ index */ - defop->op_targ = PL_parser->sig_elems - 1; + defop->op_targ = + (PADOFFSET)(PL_parser->sig_elems - 1); if (var) { var->op_flags |= OPf_STACKED; @@ -772,8 +773,8 @@ siglistornull: /* NULL */ subsignature: '(' { ENTER; - SAVEINT(PL_parser->sig_elems); - SAVEINT(PL_parser->sig_optelems); + SAVEIV(PL_parser->sig_elems); + SAVEIV(PL_parser->sig_optelems); SAVEI8(PL_parser->sig_slurpy); PL_parser->sig_elems = 0; PL_parser->sig_optelems = 0; @@ -796,8 +797,8 @@ subsignature: '(' aux = (UNOP_AUX_item*)PerlMemShared_malloc( sizeof(UNOP_AUX_item) * 3); - aux[0].uv = PL_parser->sig_elems; - aux[1].uv = PL_parser->sig_optelems; + aux[0].iv = PL_parser->sig_elems; + aux[1].iv = PL_parser->sig_optelems; aux[2].iv = PL_parser->sig_slurpy; check = newUNOP_AUX(OP_ARGCHECK, 0, NULL, aux); sigops = op_prepend_elem(OP_LINESEQ, check, sigops); |