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 Digest::FNV macro", s));
27          PUSHs(sv);
28          break;
29        case PERL_constant_NOTDEF:
30          sv = sv_2mortal(newSVpvf(
31	    "Your vendor has not defined Digest::FNV 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 Digest::FNV macro %s, used",
88               type, s));
89          PUSHs(sv);
90        }
91