Move the implmentation of SAVEHINTS() into a new Perl_save_hints() in
Nicholas Clark [Mon, 1 Dec 2008 11:06:05 +0000 (11:06 +0000)]
scope.c. "Inlined" macro functions in scope.h are actually space
inefficient.

p4raw-id: //depot/perl@34965

embed.fnc
embed.h
proto.h
scope.c
scope.h

index 90f53fc..1e4d315 100644 (file)
--- a/embed.fnc
+++ b/embed.fnc
@@ -900,6 +900,7 @@ Ap  |void   |save_generic_pvref|NN char** str
 Ap     |void   |save_shared_pvref|NN char** str
 Ap     |void   |save_gp        |NN GV* gv|I32 empty
 Ap     |HV*    |save_hash      |NN GV* gv
+p      |void   |save_hints
 Amp    |void   |save_helem     |NN HV *hv|NN SV *key|NN SV **sptr
 Ap     |void   |save_helem_flags|NN HV *hv|NN SV *key|NN SV **sptr|const U32 flags
 Ap     |void   |save_hptr      |NN HV** hptr
diff --git a/embed.h b/embed.h
index e0b98f8..e56244c 100644 (file)
--- a/embed.h
+++ b/embed.h
 #define save_shared_pvref      Perl_save_shared_pvref
 #define save_gp                        Perl_save_gp
 #define save_hash              Perl_save_hash
+#ifdef PERL_CORE
+#define save_hints             Perl_save_hints
+#endif
 #define save_helem_flags       Perl_save_helem_flags
 #define save_hptr              Perl_save_hptr
 #define save_I16               Perl_save_I16
 #define save_shared_pvref(a)   Perl_save_shared_pvref(aTHX_ a)
 #define save_gp(a,b)           Perl_save_gp(aTHX_ a,b)
 #define save_hash(a)           Perl_save_hash(aTHX_ a)
+#ifdef PERL_CORE
+#define save_hints()           Perl_save_hints(aTHX)
+#endif
 #define save_helem_flags(a,b,c,d)      Perl_save_helem_flags(aTHX_ a,b,c,d)
 #define save_hptr(a)           Perl_save_hptr(aTHX_ a)
 #define save_I16(a)            Perl_save_I16(aTHX_ a)
diff --git a/proto.h b/proto.h
index e47177a..b7e7737 100644 (file)
--- a/proto.h
+++ b/proto.h
@@ -2815,6 +2815,7 @@ PERL_CALLCONV HV* Perl_save_hash(pTHX_ GV* gv)
 #define PERL_ARGS_ASSERT_SAVE_HASH     \
        assert(gv)
 
+PERL_CALLCONV void     Perl_save_hints(pTHX);
 /* PERL_CALLCONV void  Perl_save_helem(pTHX_ HV *hv, SV *key, SV **sptr)
                        __attribute__nonnull__(pTHX_1)
                        __attribute__nonnull__(pTHX_2)
diff --git a/scope.c b/scope.c
index 14ad0b3..9f53549 100644 (file)
--- a/scope.c
+++ b/scope.c
@@ -536,6 +536,25 @@ Perl_save_destructor_x(pTHX_ DESTRUCTORFUNC_t f, void* p)
 }
 
 void
+Perl_save_hints(pTHX)
+{
+    dVAR;
+    if (PL_compiling.cop_hints_hash) {
+       HINTS_REFCNT_LOCK;
+           PL_compiling.cop_hints_hash->refcounted_he_refcnt++;
+           HINTS_REFCNT_UNLOCK;
+    }
+    SSCHECK(4);
+    if (PL_hints & HINT_LOCALIZE_HH) {
+       SSPUSHPTR(GvHV(PL_hintgv));
+       GvHV(PL_hintgv) = Perl_hv_copy_hints_hv(aTHX_ GvHV(PL_hintgv));
+    }
+    SSPUSHINT(PL_hints);
+    SSPUSHPTR(PL_compiling.cop_hints_hash);
+    SSPUSHINT(SAVEt_HINTS);
+}
+
+void
 Perl_save_aelem(pTHX_ AV *av, I32 idx, SV **sptr)
 {
     dVAR;
diff --git a/scope.h b/scope.h
index bc80b97..70b7165 100644 (file)
--- a/scope.h
+++ b/scope.h
@@ -157,22 +157,7 @@ Closing bracket on a callback.  See C<ENTER> and L<perlcall>.
 
 #define SAVEOP()       save_op()
 
-#define SAVEHINTS() \
-    STMT_START {                                       \
-       if (PL_compiling.cop_hints_hash) {              \
-           HINTS_REFCNT_LOCK;                          \
-           PL_compiling.cop_hints_hash->refcounted_he_refcnt++;        \
-           HINTS_REFCNT_UNLOCK;                        \
-       }                                               \
-       SSCHECK(4);                                     \
-       if (PL_hints & HINT_LOCALIZE_HH) {              \
-           SSPUSHPTR(GvHV(PL_hintgv));                 \
-           GvHV(PL_hintgv) = Perl_hv_copy_hints_hv(aTHX_ GvHV(PL_hintgv)); \
-       }                                               \
-       SSPUSHINT(PL_hints);                            \
-       SSPUSHPTR(PL_compiling.cop_hints_hash);         \
-       SSPUSHINT(SAVEt_HINTS);                         \
-    } STMT_END
+#define SAVEHINTS()    save_hints()
 
 #define SAVECOMPPAD() save_pushptr(MUTABLE_SV(PL_comppad), SAVEt_COMPPAD)