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 }
|