Sun, 15 Apr 2007 02:10:37 +0000
propagate from branch 'im.pidgin.gaim' (head b2836a24d81e7a1bd1d21b3aea8794b094391344)
to branch 'im.pidgin.rlaager.merging.soc-msnp13-to-svn18164' (head 463b4fa9f067b279f843520d95a822adc86a0a1b)
| 6678 | 1 | void |
| 2 | constant(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 = sv_2mortal(newSVpvf("%s is not a valid Gaim::DebugLevel macro", s)); | |
| 26 | PUSHs(sv); | |
| 27 | break; | |
| 28 | case PERL_constant_NOTDEF: | |
| 29 | sv = sv_2mortal(newSVpvf( | |
| 30 | "Your vendor has not defined Gaim::DebugLevel macro %s, used", s)); | |
| 31 | PUSHs(sv); | |
| 32 | break; | |
| 33 | case PERL_constant_ISIV: | |
| 34 | EXTEND(SP, 1); | |
| 35 | PUSHs(&PL_sv_undef); | |
| 36 | PUSHi(iv); | |
| 37 | break; | |
| 38 | /* Uncomment this if you need to return NOs | |
| 39 | case PERL_constant_ISNO: | |
| 40 | EXTEND(SP, 1); | |
| 41 | PUSHs(&PL_sv_undef); | |
| 42 | PUSHs(&PL_sv_no); | |
| 43 | break; */ | |
| 44 | /* Uncomment this if you need to return NVs | |
| 45 | case PERL_constant_ISNV: | |
| 46 | EXTEND(SP, 1); | |
| 47 | PUSHs(&PL_sv_undef); | |
| 48 | PUSHn(nv); | |
| 49 | break; */ | |
| 50 | /* Uncomment this if you need to return PVs | |
| 51 | case PERL_constant_ISPV: | |
| 52 | EXTEND(SP, 1); | |
| 53 | PUSHs(&PL_sv_undef); | |
| 54 | PUSHp(pv, strlen(pv)); | |
| 55 | break; */ | |
| 56 | /* Uncomment this if you need to return PVNs | |
| 57 | case PERL_constant_ISPVN: | |
| 58 | EXTEND(SP, 1); | |
| 59 | PUSHs(&PL_sv_undef); | |
| 60 | PUSHp(pv, iv); | |
| 61 | break; */ | |
| 62 | /* Uncomment this if you need to return SVs | |
| 63 | case PERL_constant_ISSV: | |
| 64 | EXTEND(SP, 1); | |
| 65 | PUSHs(&PL_sv_undef); | |
| 66 | PUSHs(sv); | |
| 67 | break; */ | |
| 68 | /* Uncomment this if you need to return UNDEFs | |
| 69 | case PERL_constant_ISUNDEF: | |
| 70 | break; */ | |
| 71 | /* Uncomment this if you need to return UVs | |
| 72 | case PERL_constant_ISUV: | |
| 73 | EXTEND(SP, 1); | |
| 74 | PUSHs(&PL_sv_undef); | |
| 75 | PUSHu((UV)iv); | |
| 76 | break; */ | |
| 77 | /* Uncomment this if you need to return YESs | |
| 78 | case PERL_constant_ISYES: | |
| 79 | EXTEND(SP, 1); | |
| 80 | PUSHs(&PL_sv_undef); | |
| 81 | PUSHs(&PL_sv_yes); | |
| 82 | break; */ | |
| 83 | default: | |
| 84 | sv = sv_2mortal(newSVpvf( | |
| 85 | "Unexpected return type %d while processing Gaim::DebugLevel macro %s, used", | |
| 86 | type, s)); | |
| 87 | PUSHs(sv); | |
| 88 | } |