Allow 64-bit array and stack offsets in entersub & goto
authorFather Chrysostomos <sprout@cpan.org>
Fri, 6 Sep 2013 19:35:56 +0000 (12:35 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Sat, 7 Sep 2013 06:25:50 +0000 (23:25 -0700)
I don’t have enough memory to test this, but it needs to be done even-
tually anyway.

pp_ctl.c
pp_hot.c

index 47d8a1f..7fd27f8 100644 (file)
--- a/pp_ctl.c
+++ b/pp_ctl.c
@@ -2909,7 +2909,7 @@ PP(pp_goto) /* also pp_dump */
                mark = SP;
                SP += items;
                if (items && AvREAL(arg)) {
-                   I32 index;
+                   SSize_t index;
                    for (index=0; index<items; index++)
                        if (SP[-index])
                            SvREFCNT_inc_void_NN(sv_2mortal(SP[-index]));
index 03ce102..d3f8976 100644 (file)
--- a/pp_hot.c
+++ b/pp_hot.c
@@ -2640,7 +2640,7 @@ try_autoload:
     if (!(CvISXSUB(cv))) {
        /* This path taken at least 75% of the time   */
        dMARK;
-       I32 items = SP - MARK;
+       SSize_t items = SP - MARK;
        PADLIST * const padlist = CvPADLIST(cv);
        PUSHBLOCK(cx, CXt_SUB, MARK);
        PUSHSUB(cx);
@@ -2703,7 +2703,7 @@ try_autoload:
        RETURNOP(CvSTART(cv));
     }
     else {
-       I32 markix = TOPMARK;
+       SSize_t markix = TOPMARK;
 
        SAVETMPS;
        PUTBACK;
@@ -2719,7 +2719,7 @@ try_autoload:
             * switch stack to @_, and copy return values
             * back. This would allow popping @_ in XSUB, e.g.. XXXX */
            AV * const av = GvAV(PL_defgv);
-           const I32 items = AvFILLp(av) + 1;   /* @_ is not tieable */
+           const SSize_t items = AvFILLp(av) + 1;  /* @_ is not tieable */
 
            if (items) {
                SSize_t i = 0;
@@ -2736,7 +2736,7 @@ try_autoload:
        }
        else {
            SV **mark = PL_stack_base + markix;
-           I32 items = SP - mark;
+           SSize_t items = SP - mark;
            while (items--) {
                mark++;
                if (*mark && SvPADTMP(*mark) && !IS_PADGV(*mark))