This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Correct the paramter to Perl_op_xmldump(). The one that got away from
[perl5.git] / av.c
diff --git a/av.c b/av.c
index d528ffc..343274f 100644 (file)
--- a/av.c
+++ b/av.c
@@ -77,7 +77,7 @@ Perl_av_extend(pTHX_ AV *av, I32 key)
        PUSHMARK(SP);
        EXTEND(SP,2);
        PUSHs(SvTIED_obj((SV*)av, mg));
-       PUSHs(sv_2mortal(newSViv(key+1)));
+       mPUSHi(key + 1);
         PUTBACK;
        call_method("EXTEND", G_SCALAR|G_DISCARD);
        POPSTACK;
@@ -762,7 +762,7 @@ Perl_av_fill(pTHX_ register AV *av, I32 fill)
        PUSHMARK(SP);
        EXTEND(SP,2);
        PUSHs(SvTIED_obj((SV*)av, mg));
-       PUSHs(sv_2mortal(newSViv(fill+1)));
+       mPUSHi(fill + 1);
        PUTBACK;
        call_method("STORESIZE", G_SCALAR|G_DISCARD);
        POPSTACK;
@@ -970,11 +970,20 @@ Perl_av_arylen_p(pTHX_ AV *av) {
     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);
-    return &(mg->mg_len);
+#if IVSIZE == I32SIZE
+    return (IV *)&(mg->mg_len);
+#else
+    if (!mg->mg_ptr) {
+       IV *temp;
+       mg->mg_len = IVSIZE;
+       Newxz(temp, 1, IV);
+       mg->mg_ptr = (char *) temp;
+    }
+    return (IV *)mg->mg_ptr;
+#endif
 }
 
 /*