- GV *gv = cGVOPx_gv(gvop);
- STRLEN len;
- const char *s = SvPV_const(name, len);
+ MAGIC *mg = mg_find(pp_sv, PERL_MAGIC_ext);
+ if (mg) {
+ sub_op_check_t check = INT2PTR(sub_op_check_t, SvIVX(mg->mg_obj));
+ o = CALL_FPTR(check)(aTHX_ o, mg->mg_ptr);
+ }
+ }
+
+ {
+ sub_op_name_t *on = PerlMemShared_malloc(sizeof(*on) + len);
+ Copy(name, &on->buf, len, char);
+ (&on->buf)[len] = '\0';
+ on->len = len;
+#ifdef USE_ITHREADS
+ MUTEX_LOCK(&sub_op_name_mutex);
+#endif /* USE_ITHREADS */
+ ptable_store(sub_op_name, o, on);
+#ifdef USE_ITHREADS
+ MUTEX_UNLOCK(&sub_op_name_mutex);
+#endif /* USE_ITHREADS */
+ }
+ }
+ }
+
+skip:
+ return o;
+}
+
+STATIC OP *(*sub_op_old_ck_gelem)(pTHX_ OP *) = 0;
+
+STATIC OP *sub_op_ck_gelem(pTHX_ OP *o) {
+ o = CALL_FPTR(sub_op_old_ck_entersub)(aTHX_ o);