This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Signatures: change param count from IV to UV
authorDavid Mitchell <davem@iabyn.com>
Fri, 20 Sep 2019 10:11:36 +0000 (11:11 +0100)
committerDavid Mitchell <davem@iabyn.com>
Mon, 23 Sep 2019 13:42:00 +0000 (14:42 +0100)
For some reason I was storing the counts of sub signature parameters and
optional parameters as signed ints. Since these can never be negative,
change them to UV instead.

op.h
parser.h
pp.c

diff --git a/op.h b/op.h
index 7444965..80b1d9c 100644 (file)
--- a/op.h
+++ b/op.h
@@ -1116,8 +1116,8 @@ C<sib> is non-null. For a higher-level interface, see C<L</op_sibling_splice>>.
 /* stuff for OP_ARGCHECK */
 
 struct  op_argcheck_aux {
-    IV   params;     /* number of positional parameters */
-    IV   opt_params; /* number of optional positional parameters */
+    UV   params;     /* number of positional parameters */
+    UV   opt_params; /* number of optional positional parameters */
     char slurpy;     /* presence of slurpy: may be '\0', '@' or '%' */
 };
 
index 19c5c63..4fa490a 100644 (file)
--- a/parser.h
+++ b/parser.h
@@ -114,8 +114,8 @@ typedef struct yy_parser {
 
     bool        sig_seen;       /* the currently parsing sub has a signature */
     /* these are valid while parsing a subroutine signature */
-    IV          sig_elems;      /* number of signature elements seen so far */
-    IV          sig_optelems;   /* number of optional signature elems seen */
+    UV          sig_elems;      /* number of signature elements seen so far */
+    UV          sig_optelems;   /* number of optional signature elems seen */
     char        sig_slurpy;     /* the sigil of the slurpy var (or null) */
 
     bool        recheck_utf8_validity;
diff --git a/pp.c b/pp.c
index f335694..062d0f2 100644 (file)
--- a/pp.c
+++ b/pp.c
@@ -7119,8 +7119,8 @@ PP(pp_argcheck)
 {
     OP * const o       = PL_op;
     struct op_argcheck_aux *aux = (struct op_argcheck_aux *)cUNOP_AUXo->op_aux;
-    IV   params        = aux->params;
-    IV   opt_params    = aux->opt_params;
+    UV   params        = aux->params;
+    UV   opt_params    = aux->opt_params;
     char slurpy        = aux->slurpy;
     AV  *defav         = GvAV(PL_defgv); /* @_ */
     IV   argc;