Changed tests to import minimal constants.
[LibTracker-Client-Perl.git] / const-xs.inc
blob302db8ea90e05368d8237858152befcb1d58ebbf
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 LibTracker::Client macro", s));
26           PUSHs(sv);
27           break;
28         case PERL_constant_NOTDEF:
29           sv = sv_2mortal(newSVpvf(
30             "Your vendor has not defined LibTracker::Client 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 LibTracker::Client macro %s, used",
86                type, s));
87           PUSHs(sv);
88         }