summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--embed.fnc1
-rw-r--r--embed.h6
-rw-r--r--proto.h1
-rw-r--r--scope.c19
-rw-r--r--scope.h17
5 files changed, 28 insertions, 16 deletions
diff --git a/embed.fnc b/embed.fnc
index 90f53fc311..1e4d31533e 100644
--- 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 e0b98f8176..e56244cd8c 100644
--- a/embed.h
+++ b/embed.h
@@ -787,6 +787,9 @@
#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
@@ -3131,6 +3134,9 @@
#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 e47177af4d..b7e77370e5 100644
--- 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 14ad0b3c4e..9f53549650 100644
--- 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 bc80b97caa..70b7165a86 100644
--- 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)