File Coverage

Backtrace_xsgen.cc
Criterion Covered Total %
statement 187 223 83.8
branch 115 356 32.3
condition n/a
subroutine n/a
pod n/a
total 302 579 52.1


line stmt bran cond sub pod time code
1             /*
2             * This file was generated automatically by ExtUtils::ParseXS version 3.34 from the
3             * contents of Backtrace.xs. Do not edit this file, edit Backtrace.xs instead.
4             *
5             * ANY CHANGES MADE HERE WILL BE LOST!
6             *
7             */
8              
9             #line 1 "Backtrace.xs"
10             #include
11             #include "src/xs/backtrace.h"
12              
13             using namespace xs;
14             using namespace panda::backtrace;
15             using namespace panda;
16              
17             #line 18 "Backtrace_xsgen.cc"
18             #ifndef PERL_UNUSED_VAR
19             # define PERL_UNUSED_VAR(var) if (0) var = var
20             #endif
21              
22             #ifndef dVAR
23             # define dVAR dNOOP
24             #endif
25              
26              
27             /* This stuff is not part of the API! You have been warned. */
28             #ifndef PERL_VERSION_DECIMAL
29             # define PERL_VERSION_DECIMAL(r,v,s) (r*1000000 + v*1000 + s)
30             #endif
31             #ifndef PERL_DECIMAL_VERSION
32             # define PERL_DECIMAL_VERSION \
33             PERL_VERSION_DECIMAL(PERL_REVISION,PERL_VERSION,PERL_SUBVERSION)
34             #endif
35             #ifndef PERL_VERSION_GE
36             # define PERL_VERSION_GE(r,v,s) \
37             (PERL_DECIMAL_VERSION >= PERL_VERSION_DECIMAL(r,v,s))
38             #endif
39             #ifndef PERL_VERSION_LE
40             # define PERL_VERSION_LE(r,v,s) \
41             (PERL_DECIMAL_VERSION <= PERL_VERSION_DECIMAL(r,v,s))
42             #endif
43              
44             /* XS_INTERNAL is the explicit static-linkage variant of the default
45             * XS macro.
46             *
47             * XS_EXTERNAL is the same as XS_INTERNAL except it does not include
48             * "STATIC", ie. it exports XSUB symbols. You probably don't want that
49             * for anything but the BOOT XSUB.
50             *
51             * See XSUB.h in core!
52             */
53              
54              
55             /* TODO: This might be compatible further back than 5.10.0. */
56             #if PERL_VERSION_GE(5, 10, 0) && PERL_VERSION_LE(5, 15, 1)
57             # undef XS_EXTERNAL
58             # undef XS_INTERNAL
59             # if defined(__CYGWIN__) && defined(USE_DYNAMIC_LOADING)
60             # define XS_EXTERNAL(name) __declspec(dllexport) XSPROTO(name)
61             # define XS_INTERNAL(name) STATIC XSPROTO(name)
62             # endif
63             # if defined(__SYMBIAN32__)
64             # define XS_EXTERNAL(name) EXPORT_C XSPROTO(name)
65             # define XS_INTERNAL(name) EXPORT_C STATIC XSPROTO(name)
66             # endif
67             # ifndef XS_EXTERNAL
68             # if defined(HASATTRIBUTE_UNUSED) && !defined(__cplusplus)
69             # define XS_EXTERNAL(name) void name(pTHX_ CV* cv __attribute__unused__)
70             # define XS_INTERNAL(name) STATIC void name(pTHX_ CV* cv __attribute__unused__)
71             # else
72             # ifdef __cplusplus
73             # define XS_EXTERNAL(name) extern "C" XSPROTO(name)
74             # define XS_INTERNAL(name) static XSPROTO(name)
75             # else
76             # define XS_EXTERNAL(name) XSPROTO(name)
77             # define XS_INTERNAL(name) STATIC XSPROTO(name)
78             # endif
79             # endif
80             # endif
81             #endif
82              
83             /* perl >= 5.10.0 && perl <= 5.15.1 */
84              
85              
86             /* The XS_EXTERNAL macro is used for functions that must not be static
87             * like the boot XSUB of a module. If perl didn't have an XS_EXTERNAL
88             * macro defined, the best we can do is assume XS is the same.
89             * Dito for XS_INTERNAL.
90             */
91             #ifndef XS_EXTERNAL
92             # define XS_EXTERNAL(name) XS(name)
93             #endif
94             #ifndef XS_INTERNAL
95             # define XS_INTERNAL(name) XS(name)
96             #endif
97              
98             /* Now, finally, after all this mess, we want an ExtUtils::ParseXS
99             * internal macro that we're free to redefine for varying linkage due
100             * to the EXPORT_XSUB_SYMBOLS XS keyword. This is internal, use
101             * XS_EXTERNAL(name) or XS_INTERNAL(name) in your code if you need to!
102             */
103              
104             #undef XS_EUPXS
105             #if defined(PERL_EUPXS_ALWAYS_EXPORT)
106             # define XS_EUPXS(name) XS_EXTERNAL(name)
107             #else
108             /* default to internal */
109             # define XS_EUPXS(name) XS_INTERNAL(name)
110             #endif
111              
112             #ifndef PERL_ARGS_ASSERT_CROAK_XS_USAGE
113             #define PERL_ARGS_ASSERT_CROAK_XS_USAGE assert(cv); assert(params)
114              
115             /* prototype to pass -Wmissing-prototypes */
116             STATIC void
117             S_croak_xs_usage(const CV *const cv, const char *const params);
118              
119             STATIC void
120             S_croak_xs_usage(const CV *const cv, const char *const params)
121             {
122             const GV *const gv = CvGV(cv);
123              
124             PERL_ARGS_ASSERT_CROAK_XS_USAGE;
125              
126             if (gv) {
127             const char *const gvname = GvNAME(gv);
128             const HV *const stash = GvSTASH(gv);
129             const char *const hvname = stash ? HvNAME(stash) : NULL;
130              
131             if (hvname)
132             Perl_croak_nocontext("Usage: %s::%s(%s)", hvname, gvname, params);
133             else
134             Perl_croak_nocontext("Usage: %s(%s)", gvname, params);
135             } else {
136             /* Pants. I don't think that it should be possible to get here. */
137             Perl_croak_nocontext("Usage: CODE(0x%" UVxf ")(%s)", PTR2UV(cv), params);
138             }
139             }
140             #undef PERL_ARGS_ASSERT_CROAK_XS_USAGE
141              
142             #define croak_xs_usage S_croak_xs_usage
143              
144             #endif
145              
146             /* NOTE: the prototype of newXSproto() is different in versions of perls,
147             * so we define a portable version of newXSproto()
148             */
149             #ifdef newXS_flags
150             #define newXSproto_portable(name, c_impl, file, proto) newXS_flags(name, c_impl, file, proto, 0)
151             #else
152             #define newXSproto_portable(name, c_impl, file, proto) (PL_Sv=(SV*)newXS(name, c_impl, file), sv_setpv(PL_Sv, proto), (CV*)PL_Sv)
153             #endif /* !defined(newXS_flags) */
154              
155             #if PERL_VERSION_LE(5, 21, 5)
156             # define newXS_deffile(a,b) Perl_newXS(aTHX_ a,b,file)
157             #else
158             # define newXS_deffile(a,b) Perl_newXS_deffile(aTHX_ a,b)
159             #endif
160              
161             #line 162 "Backtrace_xsgen.cc"
162              
163              
164 24           XS_EUPXS(XS_Exception__Backtrace_get_backtrace_string) { xs::throw_guard(cv, [=]()
165             {
166 12           dVAR; dXSARGS;
167 12 50         if (items != 1)
168 0           croak_xs_usage(cv, "except");
169             {
170 24           panda::string RETVAL;
171 12 50         dXSTARG;
    0          
172 24 50         Ref except = ST(0);
173 12 50         if (!except && SvOK(ST(0))) throw "arg is not a 'Ref' value"
    0          
    0          
    0          
    50          
174 0           ;
175             #line 18 "Backtrace.xs"
176             RETVAL = get_backtrace_string(except);
177             #line 178 "Backtrace_xsgen.cc"
178 12 50         XSprePUSH; PUSHp(RETVAL.data(), RETVAL.length());
    50          
    0          
179             }
180 12           XSRETURN(1);
181 12 50         }); }
182              
183              
184              
185 2           XS_EUPXS(XS_Exception__Backtrace_get_backtrace_string_pp) { xs::throw_guard(cv, [=]()
186             {
187 1           dVAR; dXSARGS;
188 1 50         if (items != 1)
189 0           croak_xs_usage(cv, "except");
190             {
191 2           panda::string RETVAL;
192 1 50         dXSTARG;
    0          
193 2 50         Ref except = ST(0);
194 1 50         if (!except && SvOK(ST(0))) throw "arg is not a 'Ref' value"
    0          
    0          
    0          
    50          
195 0           ;
196             #line 22 "Backtrace.xs"
197             RETVAL = get_backtrace_string_pp(except);
198             #line 199 "Backtrace_xsgen.cc"
199 1 50         XSprePUSH; PUSHp(RETVAL.data(), RETVAL.length());
    50          
    0          
200             }
201 1           XSRETURN(1);
202 1 50         }); }
203              
204              
205              
206 4           XS_EUPXS(XS_Exception__Backtrace_get_backtrace) { xs::throw_guard(cv, [=]()
207             {
208 2           dVAR; dXSARGS;
209 2 50         if (items != 1)
210 0           croak_xs_usage(cv, "except");
211             {
212 4           iptr RETVAL;
213 4 50         Ref except = ST(0);
214 2 50         if (!except && SvOK(ST(0))) throw "arg is not a 'Ref' value"
    0          
    0          
    0          
    50          
215 0           ;
216             #line 26 "Backtrace.xs"
217             xs::Sv PROTO; PERL_UNUSED_VAR(PROTO);
218             RETVAL = get_backtrace(except);
219             #line 220 "Backtrace_xsgen.cc"
220             {
221             SV * RETVALSV;
222 2 50         RETVALSV = xs::out(RETVAL, PROTO).detach();
223 2 50         RETVALSV = sv_2mortal(RETVALSV);
224 2           ST(0) = RETVALSV;
225             }
226             }
227 2           XSRETURN(1);
228 2 50         }); }
229              
230              
231              
232 2           XS_EUPXS(XS_Exception__Backtrace_create_backtrace) { xs::throw_guard(cv, [=]()
233             {
234 1           dVAR; dXSARGS;
235 1 50         if (items != 0)
236 0           croak_xs_usage(cv, "");
237             {
238 2           iptr RETVAL;
239             #line 30 "Backtrace.xs"
240             xs::Sv PROTO; PERL_UNUSED_VAR(PROTO);
241             RETVAL = create_backtrace();
242             #line 243 "Backtrace_xsgen.cc"
243             {
244             SV * RETVALSV;
245 1 50         RETVALSV = xs::out(RETVAL, PROTO).detach();
246 1 50         RETVALSV = sv_2mortal(RETVALSV);
247 1           ST(0) = RETVALSV;
248             }
249             }
250 1           XSRETURN(1);
251 1 50         }); }
252              
253              
254              
255 42           XS_EUPXS(XS_Exception__Backtrace_safe_wrap_exception) { xs::throw_guard(cv, [=]()
256             {
257 21           dVAR; dXSARGS;
258 21 50         if (items != 1)
259 0           croak_xs_usage(cv, "ex");
260             {
261 42           Sv RETVAL;
262 42 50         Sv ex = ST(0)
263             ;
264             #line 33 "Backtrace.xs"
265             RETVAL = safe_wrap_exception(ex);
266             #line 267 "Backtrace_xsgen.cc"
267             {
268             SV * RETVALSV;
269 21           RETVALSV = NULL;
270 21 50         if (!RETVAL) XSRETURN_UNDEF;
271 21 50         if (RETVAL.is_scalar()) RETVALSV = RETVAL.detach();
    50          
272 0           else switch (RETVAL.type()) {
273 0 0         case SVt_PVAV: XSRETURN(xs::Array(RETVAL.get()).push_on_stack(MARK));
    0          
274 0 0         case SVt_PVHV: XSRETURN(xs::Hash(RETVAL.get()).push_on_stack(MARK));
    0          
275             case SVt_PVCV:
276             case SVt_PVIO:
277 0 0         RETVALSV = newRV_noinc(RETVAL.detach());
278 0           break;
279 0           default: throw "unknown type of Sv to return";
280             }
281 21 50         RETVALSV = sv_2mortal(RETVALSV);
282 21 50         ST(0) = RETVALSV;
283             }
284             }
285 21           XSRETURN(1);
286 21 50         }); }
287              
288              
289             /* INCLUDE: Including 'DualTrace.xsi' from 'Backtrace.xs' */
290              
291              
292              
293 6           XS_EUPXS(XS_Exception__Backtrace__DualTrace_c_trace) { xs::throw_guard(cv, [=]()
294             {
295 3           dVAR; dXSARGS;
296 3 50         if (items != 1)
297 0           croak_xs_usage(cv, "THIS");
298             {
299 6           iptr RETVAL;
300 3 50         DualTrace* THIS = xs::in(ST(0)); if (!SvOK(ST(0))) throw "undef not allowed as THIS";
    50          
    0          
    0          
301             ;
302             #line 4 "./DualTrace.xsi"
303             xs::Sv PROTO; PERL_UNUSED_VAR(PROTO);
304             RETVAL = THIS->c_trace;
305             #line 306 "Backtrace_xsgen.cc"
306             {
307             SV * RETVALSV;
308 3 50         RETVALSV = xs::out(RETVAL, PROTO).detach();
309 3 50         RETVALSV = sv_2mortal(RETVALSV);
310 3           ST(0) = RETVALSV;
311             }
312             }
313 3           XSRETURN(1);
314 3 50         }); }
315              
316              
317              
318 6           XS_EUPXS(XS_Exception__Backtrace__DualTrace_perl_trace) { xs::throw_guard(cv, [=]()
319             {
320 3           dVAR; dXSARGS;
321 3 50         if (items != 1)
322 0           croak_xs_usage(cv, "THIS");
323             {
324 6           iptr RETVAL;
325 3 50         DualTrace* THIS = xs::in(ST(0)); if (!SvOK(ST(0))) throw "undef not allowed as THIS";
    50          
    0          
    0          
326             ;
327             #line 6 "./DualTrace.xsi"
328             xs::Sv PROTO; PERL_UNUSED_VAR(PROTO);
329             RETVAL = THIS->perl_trace;
330             #line 331 "Backtrace_xsgen.cc"
331             {
332             SV * RETVALSV;
333 3 50         RETVALSV = xs::out(RETVAL, PROTO).detach();
334 3 50         RETVALSV = sv_2mortal(RETVALSV);
335 3           ST(0) = RETVALSV;
336             }
337             }
338 3           XSRETURN(1);
339 3 50         }); }
340              
341              
342              
343 12           XS_EUPXS(XS_Exception__Backtrace__DualTrace_to_string) { xs::throw_guard(cv, [=]()
344             {
345 6           dVAR; dXSARGS;
346 6 50         if (items != 1)
347 0           croak_xs_usage(cv, "THIS");
348             {
349 12           string RETVAL;
350 6 50         dXSTARG;
    0          
351 6 50         DualTrace* THIS = xs::in(ST(0)); if (!SvOK(ST(0))) throw "undef not allowed as THIS";
    50          
    0          
    0          
352             ;
353             #line 8 "./DualTrace.xsi"
354             RETVAL = THIS->to_string();
355             #line 356 "Backtrace_xsgen.cc"
356 6 50         XSprePUSH; PUSHp(RETVAL.data(), RETVAL.length());
    50          
    0          
357             }
358 6           XSRETURN(1);
359 6 50         }); }
360              
361              
362             /* INCLUDE: Returning to 'Backtrace.xs' from 'DualTrace.xsi' */
363              
364              
365             /* INCLUDE: Including 'BacktraceInfo.xsi' from 'Backtrace.xs' */
366              
367              
368              
369 12           XS_EUPXS(XS_Exception__Backtrace__BacktraceInfo_get_frames) { xs::throw_guard(cv, [=]()
370             {
371 6           dVAR; dXSARGS;
372 6 50         if (items != 1)
373 0           croak_xs_usage(cv, "THIS");
374             {
375 12           std::vector RETVAL;
376 6 50         BacktraceInfo* THIS = xs::in(ST(0)); if (!SvOK(ST(0))) throw "undef not allowed as THIS";
    50          
    0          
    0          
377             ;
378             #line 4 "./BacktraceInfo.xsi"
379             xs::Sv PROTO; PERL_UNUSED_VAR(PROTO);
380             RETVAL = THIS->get_frames();
381             #line 382 "Backtrace_xsgen.cc"
382             {
383             SV * RETVALSV;
384 6 50         RETVALSV = xs::out(RETVAL, PROTO).detach();
385 6 50         RETVALSV = sv_2mortal(RETVALSV);
386 6           ST(0) = RETVALSV;
387             }
388             }
389 6           XSRETURN(1);
390 6 50         }); }
391              
392              
393              
394 24           XS_EUPXS(XS_Exception__Backtrace__BacktraceInfo_to_string) { xs::throw_guard(cv, [=]()
395             {
396 12           dVAR; dXSARGS;
397 12 50         if (items != 1)
398 0           croak_xs_usage(cv, "THIS");
399             {
400 24           string RETVAL;
401 12 50         dXSTARG;
    0          
402 12 50         BacktraceInfo* THIS = xs::in(ST(0)); if (!SvOK(ST(0))) throw "undef not allowed as THIS";
    50          
    0          
    0          
403             ;
404             #line 6 "./BacktraceInfo.xsi"
405             RETVAL = THIS->to_string();
406             #line 407 "Backtrace_xsgen.cc"
407 12 50         XSprePUSH; PUSHp(RETVAL.data(), RETVAL.length());
    50          
    0          
408             }
409 12           XSRETURN(1);
410 12 50         }); }
411              
412              
413             /* INCLUDE: Returning to 'Backtrace.xs' from 'BacktraceInfo.xsi' */
414              
415              
416             /* INCLUDE: Including 'Stackframe.xsi' from 'Backtrace.xs' */
417              
418              
419              
420 12           XS_EUPXS(XS_Exception__Backtrace__Stackframe_file) { xs::throw_guard(cv, [=]()
421             {
422 6           dVAR; dXSARGS;
423 6 50         if (items != 1)
424 0           croak_xs_usage(cv, "THIS");
425             {
426 12           string RETVAL;
427 6 50         dXSTARG;
    0          
428 6 50         Stackframe* THIS = xs::in(ST(0)); if (!SvOK(ST(0))) throw "undef not allowed as THIS";
    50          
    0          
    0          
429             ;
430             #line 4 "./Stackframe.xsi"
431             RETVAL = THIS->file;
432             #line 433 "Backtrace_xsgen.cc"
433 6 50         XSprePUSH; PUSHp(RETVAL.data(), RETVAL.length());
    50          
    0          
434             }
435 6           XSRETURN(1);
436 6 50         }); }
437              
438              
439              
440 218           XS_EUPXS(XS_Exception__Backtrace__Stackframe_library) { xs::throw_guard(cv, [=]()
441             {
442 109           dVAR; dXSARGS;
443 109 50         if (items != 1)
444 0           croak_xs_usage(cv, "THIS");
445             {
446 218           string RETVAL;
447 109 50         dXSTARG;
    0          
448 109 50         Stackframe* THIS = xs::in(ST(0)); if (!SvOK(ST(0))) throw "undef not allowed as THIS";
    50          
    0          
    0          
449             ;
450             #line 6 "./Stackframe.xsi"
451             RETVAL = THIS->library;
452             #line 453 "Backtrace_xsgen.cc"
453 109 50         XSprePUSH; PUSHp(RETVAL.data(), RETVAL.length());
    50          
    0          
454             }
455 109           XSRETURN(1);
456 109 50         }); }
457              
458              
459              
460 80           XS_EUPXS(XS_Exception__Backtrace__Stackframe_name) { xs::throw_guard(cv, [=]()
461             {
462 40           dVAR; dXSARGS;
463 40 50         if (items != 1)
464 0           croak_xs_usage(cv, "THIS");
465             {
466 80           string RETVAL;
467 40 50         dXSTARG;
    0          
468 40 50         Stackframe* THIS = xs::in(ST(0)); if (!SvOK(ST(0))) throw "undef not allowed as THIS";
    50          
    0          
    0          
469             ;
470             #line 8 "./Stackframe.xsi"
471             RETVAL = THIS->name;
472             #line 473 "Backtrace_xsgen.cc"
473 40 50         XSprePUSH; PUSHp(RETVAL.data(), RETVAL.length());
    50          
    0          
474             }
475 40           XSRETURN(1);
476 40 50         }); }
477              
478              
479              
480 0           XS_EUPXS(XS_Exception__Backtrace__Stackframe_mangled_name) { xs::throw_guard(cv, [=]()
481             {
482 0           dVAR; dXSARGS;
483 0 0         if (items != 1)
484 0           croak_xs_usage(cv, "THIS");
485             {
486 0           string RETVAL;
487 0 0         dXSTARG;
    0          
488 0 0         Stackframe* THIS = xs::in(ST(0)); if (!SvOK(ST(0))) throw "undef not allowed as THIS";
    0          
    0          
    0          
489             ;
490             #line 10 "./Stackframe.xsi"
491             RETVAL = THIS->mangled_name;
492             #line 493 "Backtrace_xsgen.cc"
493 0 0         XSprePUSH; PUSHp(RETVAL.data(), RETVAL.length());
    0          
    0          
494             }
495 0           XSRETURN(1);
496 0 0         }); }
497              
498              
499              
500 10           XS_EUPXS(XS_Exception__Backtrace__Stackframe_address) { xs::throw_guard(cv, [=]()
501             {
502 5           dVAR; dXSARGS;
503 5 50         if (items != 1)
504 0           croak_xs_usage(cv, "THIS");
505             {
506             std::uint64_t RETVAL;
507 5 50         Stackframe* THIS = xs::in(ST(0)); if (!SvOK(ST(0))) throw "undef not allowed as THIS";
    50          
    0          
    0          
508             ;
509             #line 12 "./Stackframe.xsi"
510             xs::Sv PROTO; PERL_UNUSED_VAR(PROTO);
511             RETVAL = THIS->address;
512             #line 513 "Backtrace_xsgen.cc"
513             {
514             SV * RETVALSV;
515 5 50         RETVALSV = xs::out(RETVAL, PROTO).detach();
516 5 50         RETVALSV = sv_2mortal(RETVALSV);
517 5           ST(0) = RETVALSV;
518             }
519             }
520 5           XSRETURN(1);
521 5 50         }); }
522              
523              
524              
525 10           XS_EUPXS(XS_Exception__Backtrace__Stackframe_offset) { xs::throw_guard(cv, [=]()
526             {
527 5           dVAR; dXSARGS;
528 5 50         if (items != 1)
529 0           croak_xs_usage(cv, "THIS");
530             {
531             std::uint64_t RETVAL;
532 5 50         Stackframe* THIS = xs::in(ST(0)); if (!SvOK(ST(0))) throw "undef not allowed as THIS";
    50          
    0          
    0          
533             ;
534             #line 14 "./Stackframe.xsi"
535             xs::Sv PROTO; PERL_UNUSED_VAR(PROTO);
536             RETVAL = THIS->offset;
537             #line 538 "Backtrace_xsgen.cc"
538             {
539             SV * RETVALSV;
540 5 50         RETVALSV = xs::out(RETVAL, PROTO).detach();
541 5 50         RETVALSV = sv_2mortal(RETVALSV);
542 5           ST(0) = RETVALSV;
543             }
544             }
545 5           XSRETURN(1);
546 5 50         }); }
547              
548              
549              
550 12           XS_EUPXS(XS_Exception__Backtrace__Stackframe_line_no) { xs::throw_guard(cv, [=]()
551             {
552 6           dVAR; dXSARGS;
553 6 50         if (items != 1)
554 0           croak_xs_usage(cv, "THIS");
555             {
556             std::uint64_t RETVAL;
557 6 50         Stackframe* THIS = xs::in(ST(0)); if (!SvOK(ST(0))) throw "undef not allowed as THIS";
    50          
    0          
    0          
558             ;
559             #line 16 "./Stackframe.xsi"
560             xs::Sv PROTO; PERL_UNUSED_VAR(PROTO);
561             RETVAL = THIS->line_no;
562             #line 563 "Backtrace_xsgen.cc"
563             {
564             SV * RETVALSV;
565 6 50         RETVALSV = xs::out(RETVAL, PROTO).detach();
566 6 50         RETVALSV = sv_2mortal(RETVALSV);
567 6           ST(0) = RETVALSV;
568             }
569             }
570 6           XSRETURN(1);
571 6 50         }); }
572              
573              
574              
575 2           XS_EUPXS(XS_Exception__Backtrace__Stackframe_args) { xs::throw_guard(cv, [=]()
576             {
577 1           dVAR; dXSARGS;
578 1 50         if (items != 1)
579 0           croak_xs_usage(cv, "THIS");
580             {
581 2           std::vector RETVAL;
582 1 50         Stackframe* THIS = xs::in(ST(0)); if (!SvOK(ST(0))) throw "undef not allowed as THIS";
    50          
    0          
    0          
583             ;
584             #line 18 "./Stackframe.xsi"
585             xs::Sv PROTO; PERL_UNUSED_VAR(PROTO);
586             RETVAL = THIS->args;
587             #line 588 "Backtrace_xsgen.cc"
588             {
589             SV * RETVALSV;
590 1 50         RETVALSV = xs::out(RETVAL, PROTO).detach();
591 1 50         RETVALSV = sv_2mortal(RETVALSV);
592 1           ST(0) = RETVALSV;
593             }
594             }
595 1           XSRETURN(1);
596 1 50         }); }
597              
598              
599             /* INCLUDE: Returning to 'Backtrace.xs' from 'Stackframe.xsi' */
600              
601             #ifdef __cplusplus
602             extern "C"
603             #endif
604              
605 12           XS_EXTERNAL(boot_Exception__Backtrace) { xs::throw_guard(cv, [=]() mutable
606             {
607             #if PERL_VERSION_LE(5, 21, 5)
608             dVAR; dXSARGS;
609             #else
610 6 50         dVAR; dXSBOOTARGSXSAPIVERCHK;
    50          
611             #endif
612             #if (PERL_REVISION == 5 && PERL_VERSION < 9)
613             char* file = __FILE__;
614             #else
615 6           const char* file = __FILE__;
616             #endif
617              
618             PERL_UNUSED_VAR(file);
619              
620             PERL_UNUSED_VAR(cv); /* -W */
621             PERL_UNUSED_VAR(items); /* -W */
622             #if PERL_VERSION_LE(5, 21, 5)
623             XS_VERSION_BOOTCHECK;
624             # ifdef XS_APIVERSION_BOOTCHECK
625             XS_APIVERSION_BOOTCHECK;
626             # endif
627             #endif
628              
629 6           newXS_deffile("Exception::Backtrace::get_backtrace_string", XS_Exception__Backtrace_get_backtrace_string);
630 6           newXS_deffile("Exception::Backtrace::get_backtrace_string_pp", XS_Exception__Backtrace_get_backtrace_string_pp);
631 6           newXS_deffile("Exception::Backtrace::get_backtrace", XS_Exception__Backtrace_get_backtrace);
632 6           newXS_deffile("Exception::Backtrace::create_backtrace", XS_Exception__Backtrace_create_backtrace);
633 6           newXS_deffile("Exception::Backtrace::safe_wrap_exception", XS_Exception__Backtrace_safe_wrap_exception);
634 6           newXS_deffile("Exception::Backtrace::DualTrace::c_trace", XS_Exception__Backtrace__DualTrace_c_trace);
635 6           newXS_deffile("Exception::Backtrace::DualTrace::perl_trace", XS_Exception__Backtrace__DualTrace_perl_trace);
636 6           newXS_deffile("Exception::Backtrace::DualTrace::to_string", XS_Exception__Backtrace__DualTrace_to_string);
637 6           newXS_deffile("Exception::Backtrace::BacktraceInfo::get_frames", XS_Exception__Backtrace__BacktraceInfo_get_frames);
638 6           newXS_deffile("Exception::Backtrace::BacktraceInfo::to_string", XS_Exception__Backtrace__BacktraceInfo_to_string);
639 6           newXS_deffile("Exception::Backtrace::Stackframe::file", XS_Exception__Backtrace__Stackframe_file);
640 6           newXS_deffile("Exception::Backtrace::Stackframe::library", XS_Exception__Backtrace__Stackframe_library);
641 6           newXS_deffile("Exception::Backtrace::Stackframe::name", XS_Exception__Backtrace__Stackframe_name);
642 6           newXS_deffile("Exception::Backtrace::Stackframe::mangled_name", XS_Exception__Backtrace__Stackframe_mangled_name);
643 6           newXS_deffile("Exception::Backtrace::Stackframe::address", XS_Exception__Backtrace__Stackframe_address);
644 6           newXS_deffile("Exception::Backtrace::Stackframe::offset", XS_Exception__Backtrace__Stackframe_offset);
645 6           newXS_deffile("Exception::Backtrace::Stackframe::line_no", XS_Exception__Backtrace__Stackframe_line_no);
646 6           newXS_deffile("Exception::Backtrace::Stackframe::args", XS_Exception__Backtrace__Stackframe_args);
647              
648             /* Initialisation Section */
649              
650             #line 11 "Backtrace.xs"
651             {
652             backtrace_c_marker.svt_free = &xs::payload_backtrace_c_free;
653             install_exception_processor(); // XS::Framework
654             install_backtracer(); // XS::libpanda
655             }
656              
657             #line 658 "Backtrace_xsgen.cc"
658              
659             /* End of Initialisation Section */
660              
661             #if PERL_VERSION_LE(5, 21, 5)
662             # if PERL_VERSION_GE(5, 9, 0)
663             if (PL_unitcheckav)
664             call_list(PL_scopestack_ix, PL_unitcheckav);
665             # endif
666             XSRETURN_YES;
667             #else
668 6           Perl_xs_boot_epilog(aTHX_ ax);
669             #endif
670 6 50         }); }
671