typedef struct {
int x_GLOB_ERROR;
HV * x_GLOB_ENTRIES;
+ Perl_ophook_t x_GLOB_OLD_OPHOOK;
} my_cxt_t;
START_MY_CXT
return FALSE;
}
+static void
+glob_ophook(pTHX_ OP *o)
+{
+ dMY_CXT;
+ if (MY_CXT.x_GLOB_ENTRIES
+ && (o->op_type == OP_GLOB || o->op_type == OP_ENTERSUB))
+ hv_delete(MY_CXT.x_GLOB_ENTRIES, (char *)&o, sizeof(OP *),
+ G_DISCARD);
+ if (MY_CXT.x_GLOB_OLD_OPHOOK) MY_CXT.x_GLOB_OLD_OPHOOK(aTHX_ o);
+}
+
MODULE = File::Glob PACKAGE = File::Glob
int
{
dMY_CXT;
MY_CXT.x_GLOB_ENTRIES = NULL;
+ MY_CXT.x_GLOB_OLD_OPHOOK = PL_opfreehook;
+ PL_opfreehook = glob_ophook;
}
}