#include "sub_op.h"
void sub_op_init(sub_op_config_t *c) {
- c->name = NULL;
- c->namelen = 0;
- c->pp = 0;
- c->check = 0;
- c->ud = NULL;
+ c->name = NULL;
+ c->namelen = 0;
+ c->proto = NULL;
+ c->protolen = 0;
+ c->pp = 0;
+ c->check = 0;
+ c->ud = NULL;
return;
}
}
dupe->namelen = len;
+ len = orig->protolen;
+ if (orig->proto) {
+ dupe->proto = PerlMemShared_malloc(len + 1);
+ Copy(orig->proto, dupe->proto, len, char);
+ ((char *) dupe->proto)[len] = '\0';
+ } else {
+ dupe->proto = NULL;
+ }
+ dupe->protolen = len;
dupe->pp = orig->pp;
dupe->check = orig->check;
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);
+ if (!he)
+ XSRETURN_UNDEF;
+ c = INT2PTR(const sub_op_config_t *, SvIVX(HeVAL(he)));
+ if (!c->proto)
+ XSRETURN_UNDEF;
+ ST(0) = sv_2mortal(newSVpvn(c->proto, c->protolen));
+ XSRETURN(1);