-#endif /* I_WORKAROUND_REQUIRE_PROPAGATION */
-
-STATIC SV *indirect_tag(pTHX_ SV *value) {
-#define indirect_tag(V) indirect_tag(aTHX_ (V))
- indirect_hint_t *h;
- SV *code = NULL;
-
- if (SvROK(value)) {
- value = SvRV(value);
- if (SvTYPE(value) >= SVt_PVCV) {
- code = value;
- SvREFCNT_inc_simple_void_NN(code);
- }
- }
-
-#if I_HINT_STRUCT
- h = PerlMemShared_malloc(sizeof *h);
- h->code = code;
-# if I_WORKAROUND_REQUIRE_PROPAGATION
- h->require_tag = indirect_require_tag();
-# endif /* I_WORKAROUND_REQUIRE_PROPAGATION */
-#else /* I_HINT_STRUCT */
- h = code;
-#endif /* !I_HINT_STRUCT */
-
-#if I_THREADSAFE
- {
- dMY_CXT;
- /* We only need for the key to be an unique tag for looking up the value later
- * Allocated memory provides convenient unique identifiers, so that's why we
- * use the hint as the key itself. */
- ptable_hints_store(MY_CXT.tbl, h, h);
- }
-#endif /* I_THREADSAFE */
-
- return newSViv(PTR2IV(h));
-}
-
-STATIC SV *indirect_detag(pTHX_ const SV *hint) {
-#define indirect_detag(H) indirect_detag(aTHX_ (H))
- indirect_hint_t *h;
-#if I_THREADSAFE || I_WORKAROUND_REQUIRE_PROPAGATION
- dMY_CXT;
-#endif
-
- h = INT2PTR(indirect_hint_t *, SvIVX(hint));
-#if I_THREADSAFE
- h = ptable_fetch(MY_CXT.tbl, h);
-#endif /* I_THREADSAFE */
-
-#if I_WORKAROUND_REQUIRE_PROPAGATION
- if (indirect_require_tag() != h->require_tag)
- return MY_CXT.global_code;
-#endif /* I_WORKAROUND_REQUIRE_PROPAGATION */
-
- return I_HINT_CODE(h);
-}
-
-STATIC U32 indirect_hash = 0;
-
-STATIC SV *indirect_hint(pTHX) {
-#define indirect_hint() indirect_hint(aTHX)
- SV *hint = NULL;
-
- if (IN_PERL_RUNTIME)
- return NULL;
-
-#if I_HAS_PERL(5, 10, 0) || defined(PL_parser)
- if (!PL_parser)
- return NULL;
-#endif
-
-#ifdef cop_hints_fetch_pvn
- hint = cop_hints_fetch_pvn(PL_curcop, __PACKAGE__, __PACKAGE_LEN__,
- indirect_hash, 0);
-#elif I_HAS_PERL(5, 9, 5)
- hint = Perl_refcounted_he_fetch(aTHX_ PL_curcop->cop_hints_hash,
- NULL,
- __PACKAGE__, __PACKAGE_LEN__,
- 0,
- indirect_hash);
-#else
- {
- SV **val = hv_fetch(GvHV(PL_hintgv), __PACKAGE__, __PACKAGE_LEN__, 0);
- if (val)
- hint = *val;
- }
-#endif