+STATIC void indirect_map_delete(pTHX_ const OP *o) {
+#define indirect_map_delete(O) indirect_map_delete(aTHX_ (O))
+ char buf[32];
+ SV *val;
+
+ hv_delete(indirect_map, buf, OP2STR(o), G_DISCARD);
+}
+
+STATIC void indirect_map_clean(pTHX_ const OP *o) {
+#define indirect_map_clean(O) indirect_map_clean(aTHX_ (O))
+ if (o->op_flags & OPf_KIDS) {
+ const OP *kid = cUNOPo->op_first;
+ for (; kid; kid = kid->op_sibling) {
+ indirect_map_delete(kid);
+ indirect_map_clean(kid);
+ }
+ } else {
+ indirect_map_delete(o);
+ }
+}
+