#include "EXTERN.h"
#define PERL_IN_SCOPE_C
#include "perl.h"
+#include "feature.h"
SV**
Perl_stack_grow(pTHX_ SV **sp, SV **p, SSize_t n)
/*
-=head1 GV Functions
+=for apidoc_section GV Handling
=for apidoc save_gp
COPHH *save_cophh = cophh_copy(CopHINTHASH_get(&PL_compiling));
if (PL_hints & HINT_LOCALIZE_HH) {
HV *oldhh = GvHV(PL_hintgv);
- save_pushptri32ptr(oldhh, PL_hints, save_cophh, SAVEt_HINTS);
+ {
+ dSS_ADD;
+ SS_ADD_INT(PL_hints);
+ SS_ADD_PTR(save_cophh);
+ SS_ADD_PTR(oldhh);
+ SS_ADD_UV(SAVEt_HINTS_HH);
+ SS_ADD_END(4);
+ }
GvHV(PL_hintgv) = NULL; /* in case copying dies */
GvHV(PL_hintgv) = hv_copy_hints_hv(oldhh);
+ SAVEFEATUREBITS();
} else {
save_pushi32ptr(PL_hints, save_cophh, SAVEt_HINTS);
}
3, /* SAVEt_SET_SVFLAGS */
3, /* SAVEt_GVSLOT */
3, /* SAVEt_AELEM */
- 3 /* SAVEt_DELETE */
+ 3, /* SAVEt_DELETE */
+ 3 /* SAVEt_HINTS_HH */
};
#ifdef NO_TAINT_SUPPORT
PERL_UNUSED_VAR(was);
#else
- if (UNLIKELY(a0.any_ptr == &(TAINT_get))) {
+ if (UNLIKELY(a0.any_ptr == &(PL_tainted))) {
/* If we don't update <was>, to reflect what was saved on the
* stack for PL_tainted, then we will overwrite this attempt to
* restore it when we exit this routine. Note that this won't
PL_op = (OP*)a0.any_ptr;
break;
- case SAVEt_HINTS:
+ case SAVEt_HINTS_HH:
+ a2 = ap[2];
+ /* FALLTHROUGH */
+ case SAVEt_HINTS:
a0 = ap[0]; a1 = ap[1];
if ((PL_hints & HINT_LOCALIZE_HH)) {
while (GvHV(PL_hintgv)) {
cophh_free(CopHINTHASH_get(&PL_compiling));
CopHINTHASH_set(&PL_compiling, (COPHH*)a1.any_ptr);
*(I32*)&PL_hints = a0.any_i32;
- if (PL_hints & HINT_LOCALIZE_HH) {
+ if (type == SAVEt_HINTS_HH) {
SvREFCNT_dec(MUTABLE_SV(GvHV(PL_hintgv)));
- GvHV(PL_hintgv) = MUTABLE_HV(SSPOPPTR);
+ GvHV(PL_hintgv) = MUTABLE_HV(a2.any_ptr);
}
if (!GvHV(PL_hintgv)) {
/* Need to add a new one manually, else rv2hv can
case SAVEt_COMPILE_WARNINGS:
a0 = ap[0];
- if (!specialWARN(PL_compiling.cop_warnings))
- PerlMemShared_free(PL_compiling.cop_warnings);
- PL_compiling.cop_warnings = (STRLEN*)a0.any_ptr;
+ free_and_set_cop_warnings(&PL_compiling, (STRLEN*) a0.any_ptr);
break;
case SAVEt_PARSER: