Change 32760 by [EMAIL PROTECTED] on 2007/12/29 12:28:14

        Change Perl_av_iter_p() to return IV* rather than I32* (which means
        having to allocate memory where sizeof(IV) > sizeof(I32)).

Affected files ...

... //depot/perl/av.c#124 edit
... //depot/perl/embed.fnc#544 edit
... //depot/perl/embed.h#731 edit
... //depot/perl/pp.c#609 edit
... //depot/perl/proto.h#880 edit

Differences ...

==== //depot/perl/av.c#124 (text) ====
Index: perl/av.c
--- perl/av.c#123~32680~        2007-12-20 13:15:57.000000000 -0800
+++ perl/av.c   2007-12-29 04:28:14.000000000 -0800
@@ -970,11 +970,18 @@
     return &(mg->mg_obj);
 }
 
-/* This will change to returning IV ** at some point soon */
-I32 *
+IV *
 Perl_av_iter_p(pTHX_ AV *av) {
     MAGIC *const mg = get_aux_mg(av);
+#if IVSIZE == I32SIZE
     return &(mg->mg_len);
+#else
+    if (!mg->mg_ptr) {
+       mg->mg_len = IVSIZE;
+       Newxz(mg->mg_ptr, 1, IV);
+    }
+    return (IV *)mg->mg_ptr;
+#endif
 }
 
 /*

==== //depot/perl/embed.fnc#544 (text) ====
Index: perl/embed.fnc
--- perl/embed.fnc#543~32684~   2007-12-20 23:42:56.000000000 -0800
+++ perl/embed.fnc      2007-12-29 04:28:14.000000000 -0800
@@ -115,7 +115,7 @@
 ApdoxM |SV**   |av_create_and_unshift_one|NN AV **const avp|NN SV *const val
 Apd    |void   |av_unshift     |NN AV* ar|I32 num
 Apo    |SV**   |av_arylen_p    |NN AV* av
-AMpo   |I32*   |av_iter_p      |NN AV* av
+Apo    |IV*    |av_iter_p      |NN AV* av
 #if defined(PERL_IN_AV_C) || defined(PERL_DECL_PROT)
 s      |MAGIC* |get_aux_mg     |NN AV *av
 #endif

==== //depot/perl/pp.c#609 (text) ====
Index: perl/pp.c
--- perl/pp.c#608~32737~        2007-12-26 10:12:32.000000000 -0800
+++ perl/pp.c   2007-12-29 04:28:14.000000000 -0800
@@ -3929,7 +3929,7 @@
     dSP;
     AV *array = (AV*)POPs;
     const I32 gimme = GIMME_V;
-    I32 *iterp = Perl_av_iter_p(aTHX_ array);
+    IV *iterp = Perl_av_iter_p(aTHX_ array);
     const IV current = (*iterp)++;
 
     if (current > av_len(array)) {

==== //depot/perl/proto.h#880 (text+w) ====
Index: perl/proto.h
--- perl/proto.h#879~32684~     2007-12-20 23:42:56.000000000 -0800
+++ perl/proto.h        2007-12-29 04:28:14.000000000 -0800
@@ -189,7 +189,7 @@
 PERL_CALLCONV SV**     Perl_av_arylen_p(pTHX_ AV* av)
                        __attribute__nonnull__(pTHX_1);
 
-PERL_CALLCONV I32*     Perl_av_iter_p(pTHX_ AV* av)
+PERL_CALLCONV IV*      Perl_av_iter_p(pTHX_ AV* av)
                        __attribute__nonnull__(pTHX_1);
 
 #if defined(PERL_IN_AV_C) || defined(PERL_DECL_PROT)
End of Patch.

Reply via email to