-# define indirect_ck_replace(T, NC, OCP) wrap_op_checker((T), (NC), (OCP))
-
-#else
-
-static void indirect_ck_replace(pTHX_ OPCODE type, indirect_ck_t new_ck, indirect_ck_t *old_ck_p) {
-#define indirect_ck_replace(T, NC, OCP) indirect_ck_replace(aTHX_ (T), (NC), (OCP))
- I_CHECK_LOCK;
- if (!*old_ck_p) {
- *old_ck_p = PL_check[type];
- PL_check[type] = new_ck;
- }
- I_CHECK_UNLOCK;
-}
-
-#endif
-
-static void indirect_ck_restore(pTHX_ OPCODE type, indirect_ck_t *old_ck_p) {
-#define indirect_ck_restore(T, OCP) indirect_ck_restore(aTHX_ (T), (OCP))
- I_CHECK_LOCK;
- if (*old_ck_p) {
- PL_check[type] = *old_ck_p;
- *old_ck_p = 0;
- }
- I_CHECK_UNLOCK;
-}
-
-/* --- Helpers ------------------------------------------------------------- */
-
-/* ... Check if the module is loaded ....................................... */
-
-static I32 indirect_loaded = 0;
-
-#if I_THREADSAFE
-
-#define PTABLE_NAME ptable_loaded
-#define PTABLE_NEED_DELETE 1
-#define PTABLE_NEED_WALK 0
-
-#include "ptable.h"
-
-#define ptable_loaded_store(T, K, V) ptable_loaded_store(aPTBLMS_ (T), (K), (V))
-#define ptable_loaded_delete(T, K) ptable_loaded_delete(aPTBLMS_ (T), (K))
-#define ptable_loaded_free(T) ptable_loaded_free(aPTBLMS_ (T))
-
-static ptable *indirect_loaded_cxts = NULL;
-
-static int indirect_is_loaded(pTHX_ void *cxt) {
-#define indirect_is_loaded(C) indirect_is_loaded(aTHX_ (C))
- int res = 0;
-
- I_LOADED_LOCK;
- if (indirect_loaded_cxts && ptable_fetch(indirect_loaded_cxts, cxt))
- res = 1;
- I_LOADED_UNLOCK;
-
- return res;
-}
-
-static int indirect_set_loaded_locked(pTHX_ void *cxt) {
-#define indirect_set_loaded_locked(C) indirect_set_loaded_locked(aTHX_ (C))
- int global_setup = 0;
-
- if (indirect_loaded <= 0) {
- assert(indirect_loaded == 0);
- assert(!indirect_loaded_cxts);
- indirect_loaded_cxts = ptable_new();
- global_setup = 1;
- }
- ++indirect_loaded;
- assert(indirect_loaded_cxts);
- ptable_loaded_store(indirect_loaded_cxts, cxt, cxt);
-
- return global_setup;
-}
-
-static int indirect_clear_loaded_locked(pTHX_ void *cxt) {
-#define indirect_clear_loaded_locked(C) indirect_clear_loaded_locked(aTHX_ (C))
- int global_teardown = 0;
-
- if (indirect_loaded > 1) {
- assert(indirect_loaded_cxts);
- ptable_loaded_delete(indirect_loaded_cxts, cxt);
- --indirect_loaded;
- } else if (indirect_loaded_cxts) {
- assert(indirect_loaded == 1);
- ptable_loaded_free(indirect_loaded_cxts);
- indirect_loaded_cxts = NULL;
- indirect_loaded = 0;
- global_teardown = 1;