1 /*
2 * This file was generated automatically by ExtUtils::ParseXS version 3.34 from the
3 * contents of TestXS.xs. Do not edit this file, edit TestXS.xs instead.
4 *
5 * ANY CHANGES MADE HERE WILL BE LOST!
6 *
7 */
8
9 #line 1 "TestXS.xs"
10 #include <config.h>
11
12 #define PERL_NO_GET_CONTEXT
13 #include "EXTERN.h"
14 #include "perl.h"
15 #include "XSUB.h"
16
17 #include "ppport.h"
18
19
20
21 #line 22 "TestXS.c"
22 #ifndef PERL_UNUSED_VAR
23 # define PERL_UNUSED_VAR(var) if (0) var = var
24 #endif
25
26 #ifndef dVAR
27 # define dVAR dNOOP
28 #endif
29
30
31 /* This stuff is not part of the API! You have been warned. */
32 #ifndef PERL_VERSION_DECIMAL
33 # define PERL_VERSION_DECIMAL(r,v,s) (r*1000000 + v*1000 + s)
34 #endif
35 #ifndef PERL_DECIMAL_VERSION
36 # define PERL_DECIMAL_VERSION \
37 PERL_VERSION_DECIMAL(PERL_REVISION,PERL_VERSION,PERL_SUBVERSION)
38 #endif
39 #ifndef PERL_VERSION_GE
40 # define PERL_VERSION_GE(r,v,s) \
41 (PERL_DECIMAL_VERSION >= PERL_VERSION_DECIMAL(r,v,s))
42 #endif
43 #ifndef PERL_VERSION_LE
44 # define PERL_VERSION_LE(r,v,s) \
45 (PERL_DECIMAL_VERSION <= PERL_VERSION_DECIMAL(r,v,s))
46 #endif
47
48 /* XS_INTERNAL is the explicit static-linkage variant of the default
49 * XS macro.
50 *
51 * XS_EXTERNAL is the same as XS_INTERNAL except it does not include
52 * "STATIC", ie. it exports XSUB symbols. You probably don't want that
53 * for anything but the BOOT XSUB.
54 *
55 * See XSUB.h in core!
56 */
57
58
59 /* TODO: This might be compatible further back than 5.10.0. */
60 #if PERL_VERSION_GE(5, 10, 0) && PERL_VERSION_LE(5, 15, 1)
61 # undef XS_EXTERNAL
62 # undef XS_INTERNAL
63 # if defined(__CYGWIN__) && defined(USE_DYNAMIC_LOADING)
64 # define XS_EXTERNAL(name) __declspec(dllexport) XSPROTO(name)
65 # define XS_INTERNAL(name) STATIC XSPROTO(name)
66 # endif
67 # if defined(__SYMBIAN32__)
68 # define XS_EXTERNAL(name) EXPORT_C XSPROTO(name)
69 # define XS_INTERNAL(name) EXPORT_C STATIC XSPROTO(name)
70 # endif
71 # ifndef XS_EXTERNAL
72 # if defined(HASATTRIBUTE_UNUSED) && !defined(__cplusplus)
73 # define XS_EXTERNAL(name) void name(pTHX_ CV* cv __attribute__unused__)
74 # define XS_INTERNAL(name) STATIC void name(pTHX_ CV* cv __attribute__unused__)
75 # else
76 # ifdef __cplusplus
77 # define XS_EXTERNAL(name) extern "C" XSPROTO(name)
78 # define XS_INTERNAL(name) static XSPROTO(name)
79 # else
80 # define XS_EXTERNAL(name) XSPROTO(name)
81 # define XS_INTERNAL(name) STATIC XSPROTO(name)
82 # endif
83 # endif
84 # endif
85 #endif
86
87 /* perl >= 5.10.0 && perl <= 5.15.1 */
88
89
90 /* The XS_EXTERNAL macro is used for functions that must not be static
91 * like the boot XSUB of a module. If perl didn't have an XS_EXTERNAL
92 * macro defined, the best we can do is assume XS is the same.
93 * Dito for XS_INTERNAL.
94 */
95 #ifndef XS_EXTERNAL
96 # define XS_EXTERNAL(name) XS(name)
97 #endif
98 #ifndef XS_INTERNAL
99 # define XS_INTERNAL(name) XS(name)
100 #endif
101
102 /* Now, finally, after all this mess, we want an ExtUtils::ParseXS
103 * internal macro that we're free to redefine for varying linkage due
104 * to the EXPORT_XSUB_SYMBOLS XS keyword. This is internal, use
105 * XS_EXTERNAL(name) or XS_INTERNAL(name) in your code if you need to!
106 */
107
108 #undef XS_EUPXS
109 #if defined(PERL_EUPXS_ALWAYS_EXPORT)
110 # define XS_EUPXS(name) XS_EXTERNAL(name)
111 #else
112 /* default to internal */
113 # define XS_EUPXS(name) XS_INTERNAL(name)
114 #endif
115
116 #ifndef PERL_ARGS_ASSERT_CROAK_XS_USAGE
117 #define PERL_ARGS_ASSERT_CROAK_XS_USAGE assert(cv); assert(params)
118
119 /* prototype to pass -Wmissing-prototypes */
120 STATIC void
121 S_croak_xs_usage(const CV *const cv, const char *const params);
122
123 STATIC void
S_croak_xs_usage(const CV * const cv,const char * const params)124 S_croak_xs_usage(const CV *const cv, const char *const params)
125 {
126 const GV *const gv = CvGV(cv);
127
128 PERL_ARGS_ASSERT_CROAK_XS_USAGE;
129
130 if (gv) {
131 const char *const gvname = GvNAME(gv);
132 const HV *const stash = GvSTASH(gv);
133 const char *const hvname = stash ? HvNAME(stash) : NULL;
134
135 if (hvname)
136 Perl_croak_nocontext("Usage: %s::%s(%s)", hvname, gvname, params);
137 else
138 Perl_croak_nocontext("Usage: %s(%s)", gvname, params);
139 } else {
140 /* Pants. I don't think that it should be possible to get here. */
141 Perl_croak_nocontext("Usage: CODE(0x%" UVxf ")(%s)", PTR2UV(cv), params);
142 }
143 }
144 #undef PERL_ARGS_ASSERT_CROAK_XS_USAGE
145
146 #define croak_xs_usage S_croak_xs_usage
147
148 #endif
149
150 /* NOTE: the prototype of newXSproto() is different in versions of perls,
151 * so we define a portable version of newXSproto()
152 */
153 #ifdef newXS_flags
154 #define newXSproto_portable(name, c_impl, file, proto) newXS_flags(name, c_impl, file, proto, 0)
155 #else
156 #define newXSproto_portable(name, c_impl, file, proto) (PL_Sv=(SV*)newXS(name, c_impl, file), sv_setpv(PL_Sv, proto), (CV*)PL_Sv)
157 #endif /* !defined(newXS_flags) */
158
159 #if PERL_VERSION_LE(5, 21, 5)
160 # define newXS_deffile(a,b) Perl_newXS(aTHX_ a,b,file)
161 #else
162 # define newXS_deffile(a,b) Perl_newXS_deffile(aTHX_ a,b)
163 #endif
164
165 #line 166 "TestXS.c"
166
167 XS_EUPXS(XS_TestXS_init); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_TestXS_init)168 XS_EUPXS(XS_TestXS_init)
169 {
170 dVAR; dXSARGS;
171 if (items != 2)
172 croak_xs_usage(cv, "int, char *");
173 {
174 int RETVAL;
175 dXSTARG;
176 #line 19 "TestXS.xs"
177 puts ("message from XS module\n");
178 RETVAL = 1;
179 #line 180 "TestXS.c"
180 XSprePUSH; PUSHi((IV)RETVAL);
181 }
182 XSRETURN(1);
183 }
184
185 #ifdef __cplusplus
186 extern "C"
187 #endif
188 XS_EXTERNAL(boot_TestXS); /* prototype to pass -Wmissing-prototypes */
XS_EXTERNAL(boot_TestXS)189 XS_EXTERNAL(boot_TestXS)
190 {
191 #if PERL_VERSION_LE(5, 21, 5)
192 dVAR; dXSARGS;
193 #else
194 dVAR; dXSBOOTARGSXSAPIVERCHK;
195 #endif
196 #if (PERL_REVISION == 5 && PERL_VERSION < 9)
197 char* file = __FILE__;
198 #else
199 const char* file = __FILE__;
200 #endif
201
202 PERL_UNUSED_VAR(file);
203
204 PERL_UNUSED_VAR(cv); /* -W */
205 PERL_UNUSED_VAR(items); /* -W */
206 #if PERL_VERSION_LE(5, 21, 5)
207 XS_VERSION_BOOTCHECK;
208 # ifdef XS_APIVERSION_BOOTCHECK
209 XS_APIVERSION_BOOTCHECK;
210 # endif
211 #endif
212
213 (void)newXSproto_portable("TestXS::init", XS_TestXS_init, file, "$$");
214 #if PERL_VERSION_LE(5, 21, 5)
215 # if PERL_VERSION_GE(5, 9, 0)
216 if (PL_unitcheckav)
217 call_list(PL_scopestack_ix, PL_unitcheckav);
218 # endif
219 XSRETURN_YES;
220 #else
221 Perl_xs_boot_epilog(aTHX_ ax);
222 #endif
223 }
224
225