]> git.vpit.fr Git - perl/modules/Scope-Upper.git/blobdiff - Upper.xs
This is 0.34
[perl/modules/Scope-Upper.git] / Upper.xs
index 5ab20400e118d518ed4e7b53b062af5566839f52..7be4f690842349265d4fc72e8262387257071a69 100644 (file)
--- a/Upper.xs
+++ b/Upper.xs
@@ -2022,16 +2022,23 @@ static int su_uplevel_runops_hook_entersub(pTHX) {
   */
  assert(sud);
  if (sud->argarray) {
+  I32 fill;
   AV *av = newAV();
   AvREAL_off(av);
   AvREIFY_on(av);
-  av_extend(av, AvMAX(sud->argarray));
-  AvFILLp(av) = AvFILLp(sud->argarray);
-  Copy(AvARRAY(sud->argarray), AvARRAY(av), AvFILLp(av) + 1, SV *);
 
+  fill = AvFILLp(sud->argarray);
+  if (fill >= 0) {
+   av_extend(av, fill);
+   Copy(AvARRAY(sud->argarray), AvARRAY(av), fill + 1, SV *);
+   AvFILLp(av) = fill;
+  }
+
+#if !XSH_HAS_PERL(5, 37, 10)
   /* should be referenced by PL_curpad[0] and *_ */
   assert(SvREFCNT(PL_curpad[0]) > 1);
   SvREFCNT_dec(PL_curpad[0]);
+#endif
 
   PL_curpad[0] = (SV *) av;
  }
@@ -3131,7 +3138,9 @@ PPCODE:
  /* warnings (9) */
  {
   SV *mask = NULL;
-#if XSH_HAS_PERL(5, 9, 4)
+#if XSH_HAS_PERL(5, 37, 6)
+  char *old_warnings = cop->cop_warnings;
+#elif XSH_HAS_PERL(5, 9, 4)
   STRLEN *old_warnings = cop->cop_warnings;
 #else
   SV *old_warnings = cop->cop_warnings;
@@ -3164,7 +3173,9 @@ context_info_warnings_on:
    if (!mask)
     mask = su_newmortal_pvn(WARN_ALLstring, WARNsize);
   } else {
-#if XSH_HAS_PERL(5, 9, 4)
+#if XSH_HAS_PERL(5, 37, 6)
+   mask = su_newmortal_pvn((char *) old_warnings, RCPV_LEN(old_warnings));
+#elif XSH_HAS_PERL(5, 9, 4)
    mask = su_newmortal_pvn((char *) (old_warnings + 1), old_warnings[0]);
 #else
    mask = sv_mortalcopy(old_warnings);