1void 2constant(sv) 3 PREINIT: 4#ifdef dXSTARG 5 dXSTARG; /* Faster if we have it. */ 6#else 7 dTARGET; 8#endif 9 STRLEN len; 10 int type; 11 IV iv; 12 /* NV nv; Uncomment this if you need to return NVs */ 13 /* const char *pv; Uncomment this if you need to return PVs */ 14 INPUT: 15 SV * sv; 16 const char * s = SvPV(sv, len); 17 PPCODE: 18 /* Change this to constant(aTHX_ s, len, &iv, &nv); 19 if you need to return both NVs and IVs */ 20 type = constant(aTHX_ s, len, &iv); 21 /* Return 1 or 2 items. First is error message, or undef if no error. 22 Second, if present, is found value */ 23 switch (type) { 24 case PERL_constant_NOTFOUND: 25 sv = 26 sv_2mortal(newSVpvf("%s is not a valid Time::HiRes macro", s)); 27 PUSHs(sv); 28 break; 29 case PERL_constant_NOTDEF: 30 sv = sv_2mortal(newSVpvf( 31 "Your vendor has not defined Time::HiRes macro %s, used", 32 s)); 33 PUSHs(sv); 34 break; 35 case PERL_constant_ISIV: 36 EXTEND(SP, 1); 37 PUSHs(&PL_sv_undef); 38 PUSHi(iv); 39 break; 40 /* Uncomment this if you need to return NOs 41 case PERL_constant_ISNO: 42 EXTEND(SP, 1); 43 PUSHs(&PL_sv_undef); 44 PUSHs(&PL_sv_no); 45 break; */ 46 /* Uncomment this if you need to return NVs 47 case PERL_constant_ISNV: 48 EXTEND(SP, 1); 49 PUSHs(&PL_sv_undef); 50 PUSHn(nv); 51 break; */ 52 /* Uncomment this if you need to return PVs 53 case PERL_constant_ISPV: 54 EXTEND(SP, 1); 55 PUSHs(&PL_sv_undef); 56 PUSHp(pv, strlen(pv)); 57 break; */ 58 /* Uncomment this if you need to return PVNs 59 case PERL_constant_ISPVN: 60 EXTEND(SP, 1); 61 PUSHs(&PL_sv_undef); 62 PUSHp(pv, iv); 63 break; */ 64 /* Uncomment this if you need to return SVs 65 case PERL_constant_ISSV: 66 EXTEND(SP, 1); 67 PUSHs(&PL_sv_undef); 68 PUSHs(sv); 69 break; */ 70 /* Uncomment this if you need to return UNDEFs 71 case PERL_constant_ISUNDEF: 72 break; */ 73 /* Uncomment this if you need to return UVs 74 case PERL_constant_ISUV: 75 EXTEND(SP, 1); 76 PUSHs(&PL_sv_undef); 77 PUSHu((UV)iv); 78 break; */ 79 /* Uncomment this if you need to return YESs 80 case PERL_constant_ISYES: 81 EXTEND(SP, 1); 82 PUSHs(&PL_sv_undef); 83 PUSHs(&PL_sv_yes); 84 break; */ 85 default: 86 sv = sv_2mortal(newSVpvf( 87 "Unexpected return type %d while processing Time::HiRes macro %s, used", 88 type, s)); 89 PUSHs(sv); 90 } 91