Change 34966 by [EMAIL PROTECTED] on 2008/12/01 11:27:31

        Add S_save_pushptri32ptr() and use it to re-implement Perl_save_hints()
        and Perl_save_aelem().

Affected files ...

... //depot/perl/embed.fnc#662 edit
... //depot/perl/embed.h#795 edit
... //depot/perl/proto.h#993 edit
... //depot/perl/scope.c#244 edit

Differences ...

==== //depot/perl/embed.fnc#662 (text) ====
Index: perl/embed.fnc
--- perl/embed.fnc#661~34965~   2008-12-01 03:06:05.000000000 -0800
+++ perl/embed.fnc      2008-12-01 03:27:31.000000000 -0800
@@ -929,6 +929,10 @@
 : Used by SAVESWITCHSTACK() in pp.c
 p      |void   |save_pushptrptr|NULLOK void *const ptr1 \
                                |NULLOK void *const ptr2|const int type
+#if defined(PERL_IN_SCOPE_C) || defined(PERL_DECL_PROT)
+s      |void   |save_pushptri32ptr|NULLOK void *const ptr1|const I32 i \
+                               |NULLOK void *const ptr2|const int type
+#endif
 : Used in perly.y
 p      |OP*    |sawparens      |NULLOK OP* o
 : Used in perly.y

==== //depot/perl/embed.h#795 (text+w) ====
Index: perl/embed.h
--- perl/embed.h#794~34965~     2008-12-01 03:06:05.000000000 -0800
+++ perl/embed.h        2008-12-01 03:27:31.000000000 -0800
@@ -812,6 +812,13 @@
 #ifdef PERL_CORE
 #define save_pushi32ptr                Perl_save_pushi32ptr
 #define save_pushptrptr                Perl_save_pushptrptr
+#endif
+#if defined(PERL_IN_SCOPE_C) || defined(PERL_DECL_PROT)
+#ifdef PERL_CORE
+#define save_pushptri32ptr     S_save_pushptri32ptr
+#endif
+#endif
+#ifdef PERL_CORE
 #define sawparens              Perl_sawparens
 #define scalar                 Perl_scalar
 #endif
@@ -3161,6 +3168,13 @@
 #ifdef PERL_CORE
 #define save_pushi32ptr(a,b,c) Perl_save_pushi32ptr(aTHX_ a,b,c)
 #define save_pushptrptr(a,b,c) Perl_save_pushptrptr(aTHX_ a,b,c)
+#endif
+#if defined(PERL_IN_SCOPE_C) || defined(PERL_DECL_PROT)
+#ifdef PERL_CORE
+#define save_pushptri32ptr(a,b,c,d)    S_save_pushptri32ptr(aTHX_ a,b,c,d)
+#endif
+#endif
+#ifdef PERL_CORE
 #define sawparens(a)           Perl_sawparens(aTHX_ a)
 #define scalar(a)              Perl_scalar(aTHX_ a)
 #endif

==== //depot/perl/proto.h#993 (text+w) ====
Index: perl/proto.h
--- perl/proto.h#992~34965~     2008-12-01 03:06:05.000000000 -0800
+++ perl/proto.h        2008-12-01 03:27:31.000000000 -0800
@@ -2916,6 +2916,9 @@
 PERL_CALLCONV void     Perl_save_pushptr(pTHX_ void *const ptr, const int 
type);
 PERL_CALLCONV void     Perl_save_pushi32ptr(pTHX_ I32 i, void *const ptr, 
const int type);
 PERL_CALLCONV void     Perl_save_pushptrptr(pTHX_ void *const ptr1, void 
*const ptr2, const int type);
+#if defined(PERL_IN_SCOPE_C) || defined(PERL_DECL_PROT)
+STATIC void    S_save_pushptri32ptr(pTHX_ void *const ptr1, const I32 i, void 
*const ptr2, const int type);
+#endif
 PERL_CALLCONV OP*      Perl_sawparens(pTHX_ OP* o);
 PERL_CALLCONV OP*      Perl_scalar(pTHX_ OP* o);
 #if defined(PERL_IN_OP_C)

==== //depot/perl/scope.c#244 (text) ====
Index: perl/scope.c
--- perl/scope.c#243~34965~     2008-12-01 03:06:05.000000000 -0800
+++ perl/scope.c        2008-12-01 03:27:31.000000000 -0800
@@ -546,12 +546,23 @@
     }
     SSCHECK(4);
     if (PL_hints & HINT_LOCALIZE_HH) {
-       SSPUSHPTR(GvHV(PL_hintgv));
+       save_pushptri32ptr(GvHV(PL_hintgv), PL_hints,
+                          PL_compiling.cop_hints_hash, SAVEt_HINTS);
        GvHV(PL_hintgv) = Perl_hv_copy_hints_hv(aTHX_ GvHV(PL_hintgv));
+    } else {
+       save_pushi32ptr(PL_hints, PL_compiling.cop_hints_hash, SAVEt_HINTS);
     }
-    SSPUSHINT(PL_hints);
-    SSPUSHPTR(PL_compiling.cop_hints_hash);
-    SSPUSHINT(SAVEt_HINTS);
+}
+
+static void
+S_save_pushptri32ptr(pTHX_ void *const ptr1, const I32 i, void *const ptr2,
+                       const int type)
+{
+    SSCHECK(4);
+    SSPUSHPTR(ptr1);
+    SSPUSHINT(i);
+    SSPUSHPTR(ptr2);
+    SSPUSHINT(type);
 }
 
 void
@@ -563,11 +574,8 @@
     PERL_ARGS_ASSERT_SAVE_AELEM;
 
     SvGETMAGIC(*sptr);
-    SSCHECK(4);
-    SSPUSHPTR(SvREFCNT_inc_simple(av));
-    SSPUSHINT(idx);
-    SSPUSHPTR(SvREFCNT_inc(*sptr));
-    SSPUSHINT(SAVEt_AELEM);
+    save_pushptri32ptr(SvREFCNT_inc_simple(av), idx, SvREFCNT_inc(*sptr),
+                      SAVEt_AELEM);
     /* if it gets reified later, the restore will have the wrong refcnt */
     if (!AvREAL(av) && AvREIFY(av))
        SvREFCNT_inc_void(*sptr);
End of Patch.

Reply via email to