summaryrefslogtreecommitdiff
path: root/perly.y
diff options
context:
space:
mode:
authorDavid Mitchell <davem@iabyn.com>2016-07-25 12:24:39 +0100
committerDavid Mitchell <davem@iabyn.com>2016-08-03 20:54:41 +0100
commit6daeaaa3123e456674380042544721b5f7a41f69 (patch)
treeea41fe0c05f003c52d2e24dee736aef801cc32eb /perly.y
parentbb6b75cd5c416da00accfd5a10bde1a1cdde693a (diff)
downloadperl-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.y11
1 files changed, 6 insertions, 5 deletions
diff --git a/perly.y b/perly.y
index 34e2264837..86e9681757 100644
--- a/perly.y
+++ b/perly.y
@@ -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);