- key = newSViv(PTR2IV(o->op_ppaddr));
- he = hv_fetch_ent(PL_custom_op_names, key, 0, 0);
- SvREFCNT_dec(key);
+#ifdef USE_ITHREADS
+ MUTEX_LOCK(&so_op_name_mutex);
+#endif /* USE_ITHREADS */
+ on = ptable_fetch(so_op_name, o);
+#ifdef USE_ITHREADS
+ MUTEX_UNLOCK(&so_op_name_mutex);
+#endif /* USE_ITHREADS */
+ if (!on)
+ XSRETURN_UNDEF;
+ ST(0) = sv_2mortal(newSVpvn(&on->buf, on->len));
+ XSRETURN(1);
+
+void
+_constant_sub(SV *sv)
+PROTOTYPE: $
+PPCODE:
+ if (!SvROK(sv))
+ XSRETURN_UNDEF;
+ sv = SvRV(sv);
+ if (SvTYPE(sv) < SVt_PVCV)
+ XSRETURN_UNDEF;
+ ST(0) = sv_2mortal(newSVuv(CvCONST(sv)));
+ XSRETURN(1);
+
+SV *
+_get_prototype(SV *name)
+PROTOTYPE: $
+PREINIT:
+ HE *he;
+ const sub_op_config_t *c;
+PPCODE:
+ dMY_CXT;
+ he = hv_fetch_ent(MY_CXT.map, name, 0, 0);