wrapper around newSV_type() and tweaking Perl_sv_upgrade().
p4raw-id: //depot/perl@32676
Apa |GV* |newGVgen |NN const char* pack
Apa |OP* |newGVREF |I32 type|NULLOK OP* o
ApaR |OP* |newHVREF |NN OP* o
-ApdaR |HV* |newHV
+AmdbaR |HV* |newHV
ApaR |HV* |newHVhv |NULLOK HV* hv
Apa |IO* |newIO
Apa |OP* |newLISTOP |I32 type|I32 flags|NULLOK OP* first|NULLOK OP* last
}
}
-/*
-=for apidoc newHV
-
-Creates a new HV. The reference count is set to 1.
-
-=cut
-*/
-
-HV *
-Perl_newHV(pTHX)
-{
- register XPVHV* xhv;
- HV * const hv = (HV*)newSV_type(SVt_PVHV);
- xhv = (XPVHV*)SvANY(hv);
- assert(!SvOK(hv));
-#ifndef NODEFAULT_SHAREKEYS
- HvSHAREKEYS_on(hv); /* key-sharing on by default */
-#endif
-
- xhv->xhv_max = 7; /* HvMAX(hv) = 7 (start with 8 buckets) */
- xhv->xhv_fill = 0; /* HvFILL(hv) = 0 */
- return hv;
-}
-
HV *
Perl_newHVhv(pTHX_ HV *ohv)
{
#define HV_DELETE 0x40
/*
+=for apidoc newHV
+
+Creates a new HV. The reference count is set to 1.
+
+=cut
+*/
+
+#define newHV() ((HV*)newSV_type(SVt_PVHV))
+
+/*
* Local variables:
* c-indentation-style: bsd
* c-basic-offset: 4
PERL_CALLCONV int Perl_printf_nocontext(const char *format, ...);
PERL_CALLCONV int Perl_magic_setglob(pTHX_ SV* sv, MAGIC* mg);
PERL_CALLCONV AV * Perl_newAV(pTHX);
+PERL_CALLCONV HV * Perl_newHV(pTHX);
/* ref() is now a macro using Perl_doref;
* this version provided for binary compatibility only.
AvMAX(av) = AvFILLp(av) = -1; */
}
+HV *
+Perl_newHV(pTHX)
+{
+ HV * const hv = (HV*)newSV_type(SVt_PVHV);
+ assert(!SvOK(hv));
+
+ return hv;
+}
+
#endif /* NO_MATHOMS */
/*
__attribute__warn_unused_result__
__attribute__nonnull__(pTHX_1);
-PERL_CALLCONV HV* Perl_newHV(pTHX)
+/* PERL_CALLCONV HV* Perl_newHV(pTHX)
__attribute__malloc__
- __attribute__warn_unused_result__;
+ __attribute__warn_unused_result__; */
PERL_CALLCONV HV* Perl_newHVhv(pTHX_ HV* hv)
__attribute__malloc__
Lets not write to it, in case it confuses a write-back
cache. */
}
+ } else {
+ assert(!SvOK(sv));
+ SvOK_off(sv);
+#ifndef NODEFAULT_SHAREKEYS
+ HvSHAREKEYS_on(sv); /* key-sharing on by default */
+#endif
+ HvMAX(sv) = 7; /* (start with 8 buckets) */
+ if (old_type >= SVt_RV) {
+ HvFILL(sv) = 0;
+ } else {
+ /* It will have been zeroed when the new body was allocated.
+ Lets not write to it, in case it confuses a write-back
+ cache. */
+ }
}
/* SVt_NULL isn't the only thing upgraded to AV or HV.