File Coverage

xs/main_xsgen.cc
Criterion Covered Total %
statement 563 774 72.7
branch 404 1270 31.8
condition n/a
subroutine n/a
pod n/a
total 967 2044 47.3


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 main.xs. Do not edit this file, edit main.xs instead.
4             *
5             * ANY CHANGES MADE HERE WILL BE LOST!
6             *
7             */
8              
9             #line 1 "xs/main.xs"
10             #include
11             #include
12             #include
13             #include
14             #include
15              
16             using namespace xs;
17             using namespace xs::uri;
18             using namespace panda::uri;
19             using panda::string;
20             using panda::string_view;
21              
22             static std::unordered_map uri_class_map;
23             static Sv::payload_marker_t data_marker;
24              
25             struct XsUriData {
26             XsUriData () : query_cache_rev(0) {}
27              
28             void sync_query_hash (const URI* uri) {
29             Hash hash;
30             if (query_cache) {
31             hash = query_cache.value();
32             hash.clear();
33             } else {
34             hash = Hash::create();
35             query_cache = Ref::create(hash);
36             }
37              
38             auto end = uri->query().cend();
39             for (auto it = uri->query().cbegin(); it != end; ++it) hash.store(it->first, Simple(it->second));
40              
41             query_cache_rev = uri->query().rev;
42             }
43              
44             Ref query_hash (const URI* uri) {
45             if (!query_cache || query_cache_rev != uri->query().rev) sync_query_hash(uri);
46             return query_cache;
47             }
48              
49             private:
50             Ref query_cache;
51             uint32_t query_cache_rev;
52             };
53              
54             static void register_perl_scheme (const string& scheme, const string_view& perl_class) {
55             uri_class_map[scheme] = Stash(perl_class);
56             }
57              
58             Stash xs::uri::get_perl_class (const URI* uri) {
59             auto it = uri_class_map.find(uri->scheme());
60             if (it == uri_class_map.end()) return Stash();
61             else return it->second;
62             }
63              
64             void xs::uri::data_attach (Sv& sv) {
65             void* data = new XsUriData();
66             Object(sv).payload_attach(data, &data_marker);
67             }
68              
69             static int data_free (pTHX_ SV*, MAGIC* mg) {
70             auto data = (XsUriData*)mg->mg_ptr;
71             delete data;
72             return 0;
73             }
74              
75             static XsUriData* data_get (SV* sv) {
76             return (XsUriData*)Object(sv).payload(&data_marker).ptr;
77             }
78              
79             static void add_param (URI* uri, const string& key, const Scalar& val, bool replace = false) {
80             if (val.is_array_ref()) {
81             Array arr = val;
82             if (replace) uri->query().erase(key);
83             auto end = arr.end();
84             for (auto it = arr.begin(); it != end; ++it) {
85             if (!*it) continue;
86             uri->query().emplace(key, xs::in(*it));
87             }
88             }
89             else if (replace) uri->param(key, xs::in(val));
90             else uri->query().emplace(key, xs::in(val));
91             }
92              
93             static void hash2query (Hash& hash, Query* query) {
94             auto end = hash.end();
95             for (auto it = hash.begin(); it != end; ++it) {
96             string key(it->key());
97             auto val = it->value();
98             if (val.is_array_ref()) {
99             Array arr = val;
100             auto end = arr.end();
101             for (auto it = arr.begin(); it != end; ++it) {
102             if (!*it) continue;
103             query->emplace(key, xs::in(*it));
104             }
105             }
106             else query->emplace(key, xs::in(val));
107             }
108             }
109              
110             static void add_query_hash (URI* uri, Hash& hash, bool replace = false) {
111             if (replace) {
112             Query query;
113             hash2query(hash, &query);
114             uri->query(query);
115             }
116             else {
117             auto end = hash.end();
118             for (auto it = hash.begin(); it != end; ++it) add_param(uri, string(it->key()), it->value());
119             }
120             }
121              
122             static void add_query_args (URI* uri, SV** sp, I32 items, bool replace = false) {
123             if (items == 1) {
124             if (SvROK(*sp)) {
125             Hash hash = *sp;
126             if (hash) add_query_hash(uri, hash, replace);
127             }
128             else if (replace) uri->query(xs::in(*sp));
129             else uri->add_query(xs::in(*sp));
130             }
131             else {
132             SV** spe = sp + items;
133             for (; sp < spe; sp += 2) add_param(uri, xs::in(*sp), *(sp+1), replace);
134             }
135             }
136              
137             #line 138 "xs/main_xsgen.cc"
138             #ifndef PERL_UNUSED_VAR
139             # define PERL_UNUSED_VAR(var) if (0) var = var
140             #endif
141              
142             #ifndef dVAR
143             # define dVAR dNOOP
144             #endif
145              
146              
147             /* This stuff is not part of the API! You have been warned. */
148             #ifndef PERL_VERSION_DECIMAL
149             # define PERL_VERSION_DECIMAL(r,v,s) (r*1000000 + v*1000 + s)
150             #endif
151             #ifndef PERL_DECIMAL_VERSION
152             # define PERL_DECIMAL_VERSION \
153             PERL_VERSION_DECIMAL(PERL_REVISION,PERL_VERSION,PERL_SUBVERSION)
154             #endif
155             #ifndef PERL_VERSION_GE
156             # define PERL_VERSION_GE(r,v,s) \
157             (PERL_DECIMAL_VERSION >= PERL_VERSION_DECIMAL(r,v,s))
158             #endif
159             #ifndef PERL_VERSION_LE
160             # define PERL_VERSION_LE(r,v,s) \
161             (PERL_DECIMAL_VERSION <= PERL_VERSION_DECIMAL(r,v,s))
162             #endif
163              
164             /* XS_INTERNAL is the explicit static-linkage variant of the default
165             * XS macro.
166             *
167             * XS_EXTERNAL is the same as XS_INTERNAL except it does not include
168             * "STATIC", ie. it exports XSUB symbols. You probably don't want that
169             * for anything but the BOOT XSUB.
170             *
171             * See XSUB.h in core!
172             */
173              
174              
175             /* TODO: This might be compatible further back than 5.10.0. */
176             #if PERL_VERSION_GE(5, 10, 0) && PERL_VERSION_LE(5, 15, 1)
177             # undef XS_EXTERNAL
178             # undef XS_INTERNAL
179             # if defined(__CYGWIN__) && defined(USE_DYNAMIC_LOADING)
180             # define XS_EXTERNAL(name) __declspec(dllexport) XSPROTO(name)
181             # define XS_INTERNAL(name) STATIC XSPROTO(name)
182             # endif
183             # if defined(__SYMBIAN32__)
184             # define XS_EXTERNAL(name) EXPORT_C XSPROTO(name)
185             # define XS_INTERNAL(name) EXPORT_C STATIC XSPROTO(name)
186             # endif
187             # ifndef XS_EXTERNAL
188             # if defined(HASATTRIBUTE_UNUSED) && !defined(__cplusplus)
189             # define XS_EXTERNAL(name) void name(pTHX_ CV* cv __attribute__unused__)
190             # define XS_INTERNAL(name) STATIC void name(pTHX_ CV* cv __attribute__unused__)
191             # else
192             # ifdef __cplusplus
193             # define XS_EXTERNAL(name) extern "C" XSPROTO(name)
194             # define XS_INTERNAL(name) static XSPROTO(name)
195             # else
196             # define XS_EXTERNAL(name) XSPROTO(name)
197             # define XS_INTERNAL(name) STATIC XSPROTO(name)
198             # endif
199             # endif
200             # endif
201             #endif
202              
203             /* perl >= 5.10.0 && perl <= 5.15.1 */
204              
205              
206             /* The XS_EXTERNAL macro is used for functions that must not be static
207             * like the boot XSUB of a module. If perl didn't have an XS_EXTERNAL
208             * macro defined, the best we can do is assume XS is the same.
209             * Dito for XS_INTERNAL.
210             */
211             #ifndef XS_EXTERNAL
212             # define XS_EXTERNAL(name) XS(name)
213             #endif
214             #ifndef XS_INTERNAL
215             # define XS_INTERNAL(name) XS(name)
216             #endif
217              
218             /* Now, finally, after all this mess, we want an ExtUtils::ParseXS
219             * internal macro that we're free to redefine for varying linkage due
220             * to the EXPORT_XSUB_SYMBOLS XS keyword. This is internal, use
221             * XS_EXTERNAL(name) or XS_INTERNAL(name) in your code if you need to!
222             */
223              
224             #undef XS_EUPXS
225             #if defined(PERL_EUPXS_ALWAYS_EXPORT)
226             # define XS_EUPXS(name) XS_EXTERNAL(name)
227             #else
228             /* default to internal */
229             # define XS_EUPXS(name) XS_INTERNAL(name)
230             #endif
231              
232             #ifndef PERL_ARGS_ASSERT_CROAK_XS_USAGE
233             #define PERL_ARGS_ASSERT_CROAK_XS_USAGE assert(cv); assert(params)
234              
235             /* prototype to pass -Wmissing-prototypes */
236             STATIC void
237             S_croak_xs_usage(const CV *const cv, const char *const params);
238              
239             STATIC void
240             S_croak_xs_usage(const CV *const cv, const char *const params)
241             {
242             const GV *const gv = CvGV(cv);
243              
244             PERL_ARGS_ASSERT_CROAK_XS_USAGE;
245              
246             if (gv) {
247             const char *const gvname = GvNAME(gv);
248             const HV *const stash = GvSTASH(gv);
249             const char *const hvname = stash ? HvNAME(stash) : NULL;
250              
251             if (hvname)
252             Perl_croak_nocontext("Usage: %s::%s(%s)", hvname, gvname, params);
253             else
254             Perl_croak_nocontext("Usage: %s(%s)", gvname, params);
255             } else {
256             /* Pants. I don't think that it should be possible to get here. */
257             Perl_croak_nocontext("Usage: CODE(0x%" UVxf ")(%s)", PTR2UV(cv), params);
258             }
259             }
260             #undef PERL_ARGS_ASSERT_CROAK_XS_USAGE
261              
262             #define croak_xs_usage S_croak_xs_usage
263              
264             #endif
265              
266             /* NOTE: the prototype of newXSproto() is different in versions of perls,
267             * so we define a portable version of newXSproto()
268             */
269             #ifdef newXS_flags
270             #define newXSproto_portable(name, c_impl, file, proto) newXS_flags(name, c_impl, file, proto, 0)
271             #else
272             #define newXSproto_portable(name, c_impl, file, proto) (PL_Sv=(SV*)newXS(name, c_impl, file), sv_setpv(PL_Sv, proto), (CV*)PL_Sv)
273             #endif /* !defined(newXS_flags) */
274              
275             #if PERL_VERSION_LE(5, 21, 5)
276             # define newXS_deffile(a,b) Perl_newXS(aTHX_ a,b,file)
277             #else
278             # define newXS_deffile(a,b) Perl_newXS_deffile(aTHX_ a,b)
279             #endif
280              
281             #line 282 "xs/main_xsgen.cc"
282              
283              
284 38           XS_EUPXS(XS_URI__XS_uri) { xs::throw_guard(cv, [=]()
285             {
286 19           dVAR; dXSARGS;
287 19 50         if (items < 0 || items > 2)
    50          
288 0           croak_xs_usage(cv, "url= string(), flags= 0");
289             {
290 19           URIx RETVAL;
291 38           string url;
292             int flags;
293              
294 19 50         if (items < 1)
295 0 0         url = string();
296             else {
297             { STRLEN __url_len;
298 19 50         const char* __url_buf = SvPV(ST(0), __url_len);
    0          
299 19 50         url.assign(__url_buf, __url_len); }
300             ;
301             }
302              
303 19 50         if (items < 2)
304 19           flags = 0;
305             else {
306 0 0         flags = (int)SvIV(ST(1))
307 0 0         ;
308             }
309             #line 140 "xs/main.xs"
310             xs::Sv PROTO; PERL_UNUSED_VAR(PROTO);
311             RETVAL = URI::create(url, flags);
312             #line 313 "xs/main_xsgen.cc"
313             {
314             SV * RETVALSV;
315 19 50         RETVALSV = xs::out(RETVAL, PROTO).detach();
316 19 50         RETVALSV = sv_2mortal(RETVALSV);
317 19           ST(0) = RETVALSV;
318             }
319             }
320 19           XSRETURN(1);
321 19 50         }); }
322              
323              
324              
325 2           XS_EUPXS(XS_URI__XS_register_scheme) { xs::throw_guard(cv, [=]()
326             {
327 1           dVAR; dXSARGS;
328 1 50         if (items != 2)
329 0           croak_xs_usage(cv, "scheme, perl_class");
330             PERL_UNUSED_VAR(ax); /* -Wall */
331 1           SP -= items;
332             {
333 2           string scheme;
334 1           string_view perl_class;
335              
336             { STRLEN __scheme_len;
337 1 50         const char* __scheme_buf = SvPV(ST(0), __scheme_len);
    0          
338 1 50         scheme.assign(__scheme_buf, __scheme_len); }
339             ;
340              
341             { STRLEN __perl_class_len;
342 1 50         const char* __perl_class_buf = SvPV(ST(1), __perl_class_len);
    0          
343 1           perl_class = decltype(perl_class)(__perl_class_buf, __perl_class_len); }
344             ;
345             #line 144 "xs/main.xs"
346             register_perl_scheme(scheme, perl_class);
347             #line 348 "xs/main_xsgen.cc"
348 1           PUTBACK;
349 2           return;
350             }
351 1 50         }); }
352              
353              
354              
355 0           XS_EUPXS(XS_URI__XS_bench_parse) { xs::throw_guard(cv, [=]()
356             {
357 0           dVAR; dXSARGS;
358 0 0         if (items < 1 || items > 2)
    0          
359 0           croak_xs_usage(cv, "str, flags= 0");
360             {
361             uint64_t RETVAL;
362 0 0         dXSTARG;
    0          
363 0           string str;
364             int flags;
365              
366             { STRLEN __str_len;
367 0 0         const char* __str_buf = SvPV(ST(0), __str_len);
    0          
368 0 0         str.assign(__str_buf, __str_len); }
369             ;
370              
371 0 0         if (items < 2)
372 0           flags = 0;
373             else {
374 0 0         flags = (int)SvIV(ST(1))
375 0 0         ;
376             }
377             #line 148 "xs/main.xs"
378             RETVAL = 0;
379             for (int i = 0; i < 1000; ++i) {
380             URI u(str, flags);
381             RETVAL += u.path().length();
382             }
383             #line 384 "xs/main_xsgen.cc"
384 0 0         XSprePUSH; PUSHu((UV)RETVAL);
    0          
385             }
386 0           XSRETURN(1);
387 0 0         }); }
388              
389              
390              
391 0           XS_EUPXS(XS_URI__XS_test_parse) { xs::throw_guard(cv, [=]()
392             {
393 0           dVAR; dXSARGS;
394 0 0         if (items != 1)
395 0           croak_xs_usage(cv, "str");
396             PERL_UNUSED_VAR(ax); /* -Wall */
397 0           SP -= items;
398             {
399 0           string str;
400              
401             { STRLEN __str_len;
402 0 0         const char* __str_buf = SvPV(ST(0), __str_len);
    0          
403 0 0         str.assign(__str_buf, __str_len); }
404             ;
405             #line 156 "xs/main.xs"
406             auto uri = URI(str);
407             printf("scheme=%s\n", uri.scheme().c_str());
408             printf("userinfo=%s\n", uri.user_info().c_str());
409             printf("host=%s\n", uri.host().c_str());
410             printf("port=%d\n", uri.port());
411             printf("path=%s\n", uri.path().c_str());
412             printf("query=%s\n", uri.raw_query().c_str());
413             printf("fragment=%s\n", uri.fragment().c_str());
414             #line 415 "xs/main_xsgen.cc"
415 0           PUTBACK;
416 0           return;
417             }
418 0 0         }); }
419              
420              
421              
422 0           XS_EUPXS(XS_URI__XS_bench_parse_query) { xs::throw_guard(cv, [=]()
423             {
424 0           dVAR; dXSARGS;
425 0 0         if (items != 1)
426 0           croak_xs_usage(cv, "str");
427             PERL_UNUSED_VAR(ax); /* -Wall */
428 0           SP -= items;
429             {
430 0           string str;
431              
432             { STRLEN __str_len;
433 0 0         const char* __str_buf = SvPV(ST(0), __str_len);
    0          
434 0 0         str.assign(__str_buf, __str_len); }
435             ;
436             #line 167 "xs/main.xs"
437             URI u;
438             for (int i = 0; i < 1000; ++i) {
439             u.query_string(str);
440             u.query();
441             }
442             #line 443 "xs/main_xsgen.cc"
443 0           PUTBACK;
444 0           return;
445             }
446 0 0         }); }
447              
448              
449              
450 0           XS_EUPXS(XS_URI__XS_bench_encode_uri_component) { xs::throw_guard(cv, [=]()
451             {
452 0           dVAR; dXSARGS;
453 0 0         if (items != 1)
454 0           croak_xs_usage(cv, "str");
455             {
456             uint64_t RETVAL;
457 0 0         dXSTARG;
    0          
458 0           string_view str;
459              
460             { STRLEN __str_len;
461 0 0         const char* __str_buf = SvPV(ST(0), __str_len);
    0          
462 0           str = decltype(str)(__str_buf, __str_len); }
463             ;
464             #line 175 "xs/main.xs"
465             RETVAL = 0;
466             char dest[str.length() * 3];
467             for (int i = 0; i < 1000; ++i) {
468             encode_uri_component(str, dest);
469             }
470             #line 471 "xs/main_xsgen.cc"
471 0 0         XSprePUSH; PUSHu((UV)RETVAL);
    0          
472             }
473 0           XSRETURN(1);
474 0 0         }); }
475              
476              
477              
478 0           XS_EUPXS(XS_URI__XS_bench_decode_uri_component) { xs::throw_guard(cv, [=]()
479             {
480 0           dVAR; dXSARGS;
481 0 0         if (items != 1)
482 0           croak_xs_usage(cv, "str");
483             {
484             uint64_t RETVAL;
485 0 0         dXSTARG;
    0          
486 0           string_view str;
487              
488             { STRLEN __str_len;
489 0 0         const char* __str_buf = SvPV(ST(0), __str_len);
    0          
490 0           str = decltype(str)(__str_buf, __str_len); }
491             ;
492             #line 183 "xs/main.xs"
493             RETVAL = 0;
494             char dest[str.length()];
495             for (int i = 0; i < 1000; ++i) {
496             decode_uri_component(str, dest);
497             }
498             #line 499 "xs/main_xsgen.cc"
499 0 0         XSprePUSH; PUSHu((UV)RETVAL);
    0          
500             }
501 0           XSRETURN(1);
502 0 0         }); }
503              
504              
505             /* INCLUDE: Including 'encode.xsi' from 'main.xs' */
506              
507              
508             /* INCLUDE: Including 'URI.xsi' from 'encode.xsi' */
509              
510              
511             /* INCLUDE: Including 'schemas.xsi' from 'URI.xsi' */
512              
513              
514             /* INCLUDE: Including 'cloning.xsi' from 'schemas.xsi' */
515              
516              
517              
518 0           XS_EUPXS(XS_URI__XS_HOOK_CLONE) { xs::throw_guard(cv, [=]()
519             {
520 0           dVAR; dXSARGS;
521 0 0         if (items != 1)
522 0           croak_xs_usage(cv, "THIS");
523             {
524 0           URISP RETVAL;
525 0 0         URI* THIS = xs::in(ST(0)); if (!SvOK(ST(0))) throw "undef not allowed as THIS";
    0          
    0          
    0          
526             ;
527             #line 5 "xs/cloning.xsi"
528             xs::Sv PROTO; PERL_UNUSED_VAR(PROTO);
529             PROTO = Object(ST(0)).stash();
530             if (dynamic_cast(THIS)) RETVAL = URI::create(*THIS);
531             else RETVAL = make_backref(*THIS);
532             #line 533 "xs/main_xsgen.cc"
533             {
534             SV * RETVALSV;
535 0 0         RETVALSV = xs::out(RETVAL, PROTO).detach();
536 0 0         RETVALSV = sv_2mortal(RETVALSV);
537 0           ST(0) = RETVALSV;
538             }
539             }
540 0           XSRETURN(1);
541 0 0         }); }
542              
543              
544              
545 6           XS_EUPXS(XS_URI__XS_STORABLE_freeze) { xs::throw_guard(cv, [=]()
546             {
547 3           dVAR; dXSARGS;
548 3 50         if (items != 2)
549 0           croak_xs_usage(cv, "THIS, bool");
550             {
551 6           string RETVAL;
552 3 50         dXSTARG;
    50          
553 3 50         URI* THIS = xs::in(ST(0)); if (!SvOK(ST(0))) throw "undef not allowed as THIS";
    50          
    0          
    0          
554             ;
555             #line 11 "xs/cloning.xsi"
556             RETVAL = THIS->to_string();
557             if (dynamic_cast(THIS)) RETVAL += '1';
558             else RETVAL += '0';
559             #line 560 "xs/main_xsgen.cc"
560 3 50         XSprePUSH; PUSHp(RETVAL.data(), RETVAL.length());
    50          
    0          
561             }
562 3           XSRETURN(1);
563 3 50         }); }
564              
565              
566              
567 6           XS_EUPXS(XS_URI__XS_STORABLE_attach) { xs::throw_guard(cv, [=]()
568             {
569 3           dVAR; dXSARGS;
570 3 50         if (items != 3)
571 0           croak_xs_usage(cv, "CLASS, bool, serialized");
572             {
573 3           URISP RETVAL;
574 3           SV* CLASS = ST(0)
575             ;
576 3           SV* serialized = ST(2)
577             ;
578             #line 17 "xs/cloning.xsi"
579             xs::Sv PROTO; PERL_UNUSED_VAR(PROTO);
580             STRLEN len;
581             char* p = SvPV(serialized, len);
582             len--;
583             char ctrl = p[len];
584             p[len] = 0;
585             if (ctrl == '1') RETVAL = URI::create(string(p, len));
586             else RETVAL = make_backref(string(p, len));
587             PROTO = CLASS;
588             #line 589 "xs/main_xsgen.cc"
589             {
590             SV * RETVALSV;
591 3 50         RETVALSV = xs::out(RETVAL, PROTO).detach();
592 3 50         RETVALSV = sv_2mortal(RETVALSV);
593 3           ST(0) = RETVALSV;
594             }
595             }
596 3           XSRETURN(1);
597 3 50         }); }
598              
599              
600              
601 0           XS_EUPXS(XS_URI__XS_TO_JSON) { xs::throw_guard(cv, [=]()
602             {
603 0           dVAR; dXSARGS;
604 0 0         if (items != 1)
605 0           croak_xs_usage(cv, "THIS");
606             {
607 0           string RETVAL;
608 0 0         dXSTARG;
    0          
609 0 0         URI* THIS = xs::in(ST(0)); if (!SvOK(ST(0))) throw "undef not allowed as THIS";
    0          
    0          
    0          
610             ;
611             #line 28 "xs/cloning.xsi"
612             RETVAL = THIS->to_string();
613             #line 614 "xs/main_xsgen.cc"
614 0 0         XSprePUSH; PUSHp(RETVAL.data(), RETVAL.length());
    0          
    0          
615             }
616 0           XSRETURN(1);
617 0 0         }); }
618              
619              
620             /* INCLUDE: Returning to 'schemas.xsi' from 'cloning.xsi' */
621              
622              
623              
624 14           XS_EUPXS(XS_URI__XS__http_new) { xs::throw_guard(cv, [=]()
625             {
626 7           dVAR; dXSARGS;
627 7 50         if (items < 1)
628 0           croak_xs_usage(cv, "CLASS, url= string(), ...");
629             {
630             URI::http * RETVAL;
631 7           SV* CLASS = ST(0)
632             ;
633 14           string url;
634              
635 7 50         if (items < 2)
636 0 0         url = string();
637             else {
638             { STRLEN __url_len;
639 7 50         const char* __url_buf = SvPV(ST(1), __url_len);
    0          
640 7 50         url.assign(__url_buf, __url_len); }
641             ;
642             }
643             #line 11 "xs/schemas.xsi"
644             xs::Sv PROTO; PERL_UNUSED_VAR(PROTO);
645             PROTO = CLASS;
646             RETVAL = make_backref(url);
647             add_query_args(RETVAL, MARK+3, items-2);
648             #line 649 "xs/main_xsgen.cc"
649             {
650             SV * RETVALSV;
651 6 50         RETVALSV = xs::out(RETVAL, PROTO).detach();
652 6 50         RETVALSV = sv_2mortal(RETVALSV);
653 6           ST(0) = RETVALSV;
654             }
655             }
656 6           XSRETURN(1);
657 7 50         }); }
658              
659              
660              
661 4           XS_EUPXS(XS_URI__XS__https_new) { xs::throw_guard(cv, [=]()
662             {
663 2           dVAR; dXSARGS;
664 2 50         if (items < 1)
665 0           croak_xs_usage(cv, "CLASS, url= string(), ...");
666             {
667             URI::https * RETVAL;
668 2           SV* CLASS = ST(0)
669             ;
670 4           string url;
671              
672 2 50         if (items < 2)
673 0 0         url = string();
674             else {
675             { STRLEN __url_len;
676 2 50         const char* __url_buf = SvPV(ST(1), __url_len);
    0          
677 2 50         url.assign(__url_buf, __url_len); }
678             ;
679             }
680             #line 27 "xs/schemas.xsi"
681             xs::Sv PROTO; PERL_UNUSED_VAR(PROTO);
682             PROTO = CLASS;
683             RETVAL = make_backref(url);
684             add_query_args(RETVAL, MARK+3, items-2);
685             #line 686 "xs/main_xsgen.cc"
686             {
687             SV * RETVALSV;
688 2 50         RETVALSV = xs::out(RETVAL, PROTO).detach();
689 2 50         RETVALSV = sv_2mortal(RETVALSV);
690 2           ST(0) = RETVALSV;
691             }
692             }
693 2           XSRETURN(1);
694 2 50         }); }
695              
696              
697              
698 2           XS_EUPXS(XS_URI__XS__ws_new) { xs::throw_guard(cv, [=]()
699             {
700 1           dVAR; dXSARGS;
701 1 50         if (items < 1)
702 0           croak_xs_usage(cv, "CLASS, url= string(), ...");
703             {
704             URI::ws * RETVAL;
705 1           SV* CLASS = ST(0)
706             ;
707 2           string url;
708              
709 1 50         if (items < 2)
710 0 0         url = string();
711             else {
712             { STRLEN __url_len;
713 1 50         const char* __url_buf = SvPV(ST(1), __url_len);
    0          
714 1 50         url.assign(__url_buf, __url_len); }
715             ;
716             }
717             #line 43 "xs/schemas.xsi"
718             xs::Sv PROTO; PERL_UNUSED_VAR(PROTO);
719             PROTO = CLASS;
720             RETVAL = make_backref(url);
721             add_query_args(RETVAL, MARK+3, items-2);
722             #line 723 "xs/main_xsgen.cc"
723             {
724             SV * RETVALSV;
725 1 50         RETVALSV = xs::out(RETVAL, PROTO).detach();
726 1 50         RETVALSV = sv_2mortal(RETVALSV);
727 1           ST(0) = RETVALSV;
728             }
729             }
730 1           XSRETURN(1);
731 1 50         }); }
732              
733              
734              
735 2           XS_EUPXS(XS_URI__XS__wss_new) { xs::throw_guard(cv, [=]()
736             {
737 1           dVAR; dXSARGS;
738 1 50         if (items < 1)
739 0           croak_xs_usage(cv, "CLASS, url= string(), ...");
740             {
741             URI::wss * RETVAL;
742 1           SV* CLASS = ST(0)
743             ;
744 2           string url;
745              
746 1 50         if (items < 2)
747 0 0         url = string();
748             else {
749             { STRLEN __url_len;
750 1 50         const char* __url_buf = SvPV(ST(1), __url_len);
    0          
751 1 50         url.assign(__url_buf, __url_len); }
752             ;
753             }
754             #line 59 "xs/schemas.xsi"
755             xs::Sv PROTO; PERL_UNUSED_VAR(PROTO);
756             PROTO = CLASS;
757             RETVAL = make_backref(url);
758             add_query_args(RETVAL, MARK+3, items-2);
759             #line 760 "xs/main_xsgen.cc"
760             {
761             SV * RETVALSV;
762 1 50         RETVALSV = xs::out(RETVAL, PROTO).detach();
763 1 50         RETVALSV = sv_2mortal(RETVALSV);
764 1           ST(0) = RETVALSV;
765             }
766             }
767 1           XSRETURN(1);
768 1 50         }); }
769              
770              
771              
772 4           XS_EUPXS(XS_URI__XS__ftp_new) { xs::throw_guard(cv, [=]()
773             {
774 2           dVAR; dXSARGS;
775 2 50         if (items < 1 || items > 3)
    50          
776 0           croak_xs_usage(cv, "CLASS, url= string(), flags= 0");
777             {
778             URI::ftp * RETVAL;
779 2           SV* CLASS = ST(0)
780             ;
781 4           string url;
782             int flags;
783              
784 2 50         if (items < 2)
785 0 0         url = string();
786             else {
787             { STRLEN __url_len;
788 2 50         const char* __url_buf = SvPV(ST(1), __url_len);
    0          
789 2 50         url.assign(__url_buf, __url_len); }
790             ;
791             }
792              
793 2 100         if (items < 3)
794 1           flags = 0;
795             else {
796 0 0         flags = (int)SvIV(ST(2))
797 1 50         ;
798             }
799             #line 75 "xs/schemas.xsi"
800             xs::Sv PROTO; PERL_UNUSED_VAR(PROTO);
801             PROTO = CLASS;
802             RETVAL = make_backref(url, flags);
803             #line 804 "xs/main_xsgen.cc"
804             {
805             SV * RETVALSV;
806 2 50         RETVALSV = xs::out(RETVAL, PROTO).detach();
807 2 50         RETVALSV = sv_2mortal(RETVALSV);
808 2           ST(0) = RETVALSV;
809             }
810             }
811 2           XSRETURN(1);
812 2 50         }); }
813              
814              
815              
816 2           XS_EUPXS(XS_URI__XS__socks_new) { xs::throw_guard(cv, [=]()
817             {
818 1           dVAR; dXSARGS;
819 1 50         if (items < 1 || items > 3)
    50          
820 0           croak_xs_usage(cv, "CLASS, url= string(), flags= 0");
821             {
822             URI::socks * RETVAL;
823 1           SV* CLASS = ST(0)
824             ;
825 2           string url;
826             int flags;
827              
828 1 50         if (items < 2)
829 0 0         url = string();
830             else {
831             { STRLEN __url_len;
832 1 50         const char* __url_buf = SvPV(ST(1), __url_len);
    0          
833 1 50         url.assign(__url_buf, __url_len); }
834             ;
835             }
836              
837 1 50         if (items < 3)
838 1           flags = 0;
839             else {
840 0 0         flags = (int)SvIV(ST(2))
841 0 0         ;
842             }
843             #line 90 "xs/schemas.xsi"
844             xs::Sv PROTO; PERL_UNUSED_VAR(PROTO);
845             PROTO = CLASS;
846             RETVAL = make_backref(url, flags);
847             #line 848 "xs/main_xsgen.cc"
848             {
849             SV * RETVALSV;
850 1 50         RETVALSV = xs::out(RETVAL, PROTO).detach();
851 1 50         RETVALSV = sv_2mortal(RETVALSV);
852 1           ST(0) = RETVALSV;
853             }
854             }
855 1           XSRETURN(1);
856 1 50         }); }
857              
858              
859              
860 2           XS_EUPXS(XS_URI__XS__ssh_new) { xs::throw_guard(cv, [=]()
861             {
862 1           dVAR; dXSARGS;
863 1 50         if (items < 1 || items > 3)
    50          
864 0           croak_xs_usage(cv, "CLASS, url= string(), flags= 0");
865             {
866             URI::ssh * RETVAL;
867 1           SV* CLASS = ST(0)
868             ;
869 2           string url;
870             int flags;
871              
872 1 50         if (items < 2)
873 0 0         url = string();
874             else {
875             { STRLEN __url_len;
876 1 50         const char* __url_buf = SvPV(ST(1), __url_len);
    0          
877 1 50         url.assign(__url_buf, __url_len); }
878             ;
879             }
880              
881 1 50         if (items < 3)
882 1           flags = 0;
883             else {
884 0 0         flags = (int)SvIV(ST(2))
885 0 0         ;
886             }
887             #line 105 "xs/schemas.xsi"
888             xs::Sv PROTO; PERL_UNUSED_VAR(PROTO);
889             PROTO = CLASS;
890             RETVAL = make_backref(url, flags);
891             #line 892 "xs/main_xsgen.cc"
892             {
893             SV * RETVALSV;
894 1 50         RETVALSV = xs::out(RETVAL, PROTO).detach();
895 1 50         RETVALSV = sv_2mortal(RETVALSV);
896 1           ST(0) = RETVALSV;
897             }
898             }
899 1           XSRETURN(1);
900 1 50         }); }
901              
902              
903              
904 2           XS_EUPXS(XS_URI__XS__telnet_new) { xs::throw_guard(cv, [=]()
905             {
906 1           dVAR; dXSARGS;
907 1 50         if (items < 1 || items > 3)
    50          
908 0           croak_xs_usage(cv, "CLASS, url= string(), flags= 0");
909             {
910             URI::telnet * RETVAL;
911 1           SV* CLASS = ST(0)
912             ;
913 2           string url;
914             int flags;
915              
916 1 50         if (items < 2)
917 0 0         url = string();
918             else {
919             { STRLEN __url_len;
920 1 50         const char* __url_buf = SvPV(ST(1), __url_len);
    0          
921 1 50         url.assign(__url_buf, __url_len); }
922             ;
923             }
924              
925 1 50         if (items < 3)
926 1           flags = 0;
927             else {
928 0 0         flags = (int)SvIV(ST(2))
929 0 0         ;
930             }
931             #line 120 "xs/schemas.xsi"
932             xs::Sv PROTO; PERL_UNUSED_VAR(PROTO);
933             PROTO = CLASS;
934             RETVAL = make_backref(url, flags);
935             #line 936 "xs/main_xsgen.cc"
936             {
937             SV * RETVALSV;
938 1 50         RETVALSV = xs::out(RETVAL, PROTO).detach();
939 1 50         RETVALSV = sv_2mortal(RETVALSV);
940 1           ST(0) = RETVALSV;
941             }
942             }
943 1           XSRETURN(1);
944 1 50         }); }
945              
946              
947              
948 2           XS_EUPXS(XS_URI__XS__sftp_new) { xs::throw_guard(cv, [=]()
949             {
950 1           dVAR; dXSARGS;
951 1 50         if (items < 1 || items > 3)
    50          
952 0           croak_xs_usage(cv, "CLASS, url= string(), flags= 0");
953             {
954             URI::sftp * RETVAL;
955 1           SV* CLASS = ST(0)
956             ;
957 2           string url;
958             int flags;
959              
960 1 50         if (items < 2)
961 0 0         url = string();
962             else {
963             { STRLEN __url_len;
964 1 50         const char* __url_buf = SvPV(ST(1), __url_len);
    0          
965 1 50         url.assign(__url_buf, __url_len); }
966             ;
967             }
968              
969 1 50         if (items < 3)
970 1           flags = 0;
971             else {
972 0 0         flags = (int)SvIV(ST(2))
973 0 0         ;
974             }
975             #line 135 "xs/schemas.xsi"
976             xs::Sv PROTO; PERL_UNUSED_VAR(PROTO);
977             PROTO = CLASS;
978             RETVAL = make_backref(url, flags);
979             #line 980 "xs/main_xsgen.cc"
980             {
981             SV * RETVALSV;
982 1 50         RETVALSV = xs::out(RETVAL, PROTO).detach();
983 1 50         RETVALSV = sv_2mortal(RETVALSV);
984 1           ST(0) = RETVALSV;
985             }
986             }
987 1           XSRETURN(1);
988 1 50         }); }
989              
990              
991             /* INCLUDE: Returning to 'URI.xsi' from 'schemas.xsi' */
992              
993             static U32 uxs_hashval;
994              
995              
996 192           XS_EUPXS(XS_URI__XS_new) { xs::throw_guard(cv, [=]()
997             {
998 96           dVAR; dXSARGS;
999 96 50         if (items < 1 || items > 3)
    50          
1000 0           croak_xs_usage(cv, "CLASS, url= string(), flags= 0");
1001             {
1002             URI * RETVAL;
1003 96           SV* CLASS = ST(0)
1004             ;
1005 192           string url;
1006             int flags;
1007              
1008 96 100         if (items < 2)
1009 1 50         url = string();
1010             else {
1011             { STRLEN __url_len;
1012 95 50         const char* __url_buf = SvPV(ST(1), __url_len);
    0          
1013 95 50         url.assign(__url_buf, __url_len); }
1014             ;
1015             }
1016              
1017 96 100         if (items < 3)
1018 86           flags = 0;
1019             else {
1020 0 0         flags = (int)SvIV(ST(2))
1021 10 50         ;
1022             }
1023             #line 25 "xs/URI.xsi"
1024             xs::Sv PROTO; PERL_UNUSED_VAR(PROTO);
1025             PROTO = CLASS;
1026             PROTO = CLASS;
1027             RETVAL = make_backref(url, flags);
1028             #line 1029 "xs/main_xsgen.cc"
1029             {
1030             SV * RETVALSV;
1031 96 50         RETVALSV = xs::out(RETVAL, PROTO).detach();
1032 96 50         RETVALSV = sv_2mortal(RETVALSV);
1033 96           ST(0) = RETVALSV;
1034             }
1035             }
1036 96           XSRETURN(1);
1037 96 50         }); }
1038              
1039              
1040              
1041 118           XS_EUPXS(XS_URI__XS_url) { xs::throw_guard(cv, [=]()
1042             {
1043 59           dVAR; dXSARGS;
1044 59 50         if (items < 1 || items > 3)
    50          
1045 0           croak_xs_usage(cv, "THIS, newval= NULL, flags= 0");
1046             {
1047 118           string RETVAL;
1048 59 50         dXSTARG;
    0          
1049 59 50         URI* THIS = xs::in(ST(0)); if (!SvOK(ST(0))) throw "undef not allowed as THIS";
    50          
    0          
    0          
1050             ;
1051             SV* newval;
1052             int flags;
1053              
1054 59 50         if (items < 2)
1055 59           newval = NULL;
1056             else {
1057 0           newval = ST(1)
1058 0           ;
1059             }
1060              
1061 59 50         if (items < 3)
1062 59           flags = 0;
1063             else {
1064 0 0         flags = (int)SvIV(ST(2))
1065 0 0         ;
1066             }
1067             #line 30 "xs/URI.xsi"
1068             if (newval) {
1069             THIS->assign(SvOK(newval) ? xs::in(newval) : "", flags);
1070             XSRETURN_UNDEF;
1071             }
1072             RETVAL = THIS->to_string();
1073             #line 1074 "xs/main_xsgen.cc"
1074 59 50         XSprePUSH; PUSHp(RETVAL.data(), RETVAL.length());
    50          
    0          
    50          
1075             }
1076 59           XSRETURN(1);
1077 59 50         }); }
1078              
1079              
1080              
1081 158           XS_EUPXS(XS_URI__XS_scheme) { xs::throw_guard(cv, [=]()
1082             {
1083 79           dVAR; dXSARGS;
1084 79           dXSI32;
1085 79 50         if (items < 1 || items > 2)
    50          
1086 0           croak_xs_usage(cv, "THIS, newval= NULL");
1087             {
1088 151           string RETVAL;
1089 79 50         dXSTARG;
    0          
1090 79 50         URI* THIS = xs::in(ST(0)); if (!SvOK(ST(0))) throw "undef not allowed as THIS";
    50          
    0          
    0          
1091             ;
1092             SV* newval;
1093              
1094 79 100         if (items < 2)
1095 67           newval = NULL;
1096             else {
1097 12           newval = ST(1)
1098 12           ;
1099             }
1100             #line 38 "xs/URI.xsi"
1101             if (newval) {
1102             THIS->scheme(SvOK(newval) ? xs::in(newval) : "");
1103             XSRETURN_UNDEF;
1104             }
1105             RETVAL = THIS->scheme();
1106             PERL_UNUSED_VAR(ix);
1107             #line 1108 "xs/main_xsgen.cc"
1108 74 50         XSprePUSH; PUSHp(RETVAL.data(), RETVAL.length());
    50          
    0          
    100          
1109             }
1110 74           XSRETURN(1);
1111 79 50         }); }
1112              
1113              
1114              
1115 118           XS_EUPXS(XS_URI__XS_user_info) { xs::throw_guard(cv, [=]()
1116             {
1117 59           dVAR; dXSARGS;
1118 59 50         if (items < 1 || items > 2)
    50          
1119 0           croak_xs_usage(cv, "THIS, newval= NULL");
1120             {
1121 118           string RETVAL;
1122 59 50         dXSTARG;
    0          
1123 59 50         URI* THIS = xs::in(ST(0)); if (!SvOK(ST(0))) throw "undef not allowed as THIS";
    50          
    0          
    0          
1124             ;
1125             SV* newval;
1126              
1127 59 50         if (items < 2)
1128 59           newval = NULL;
1129             else {
1130 0           newval = ST(1)
1131 0           ;
1132             }
1133             #line 47 "xs/URI.xsi"
1134             if (newval) {
1135             THIS->user_info(SvOK(newval) ? xs::in(newval) : "");
1136             XSRETURN_UNDEF;
1137             }
1138             RETVAL = THIS->user_info();
1139             #line 1140 "xs/main_xsgen.cc"
1140 59 50         XSprePUSH; PUSHp(RETVAL.data(), RETVAL.length());
    50          
    0          
    50          
1141             }
1142 59           XSRETURN(1);
1143 59 50         }); }
1144              
1145              
1146              
1147 134           XS_EUPXS(XS_URI__XS_host) { xs::throw_guard(cv, [=]()
1148             {
1149 67           dVAR; dXSARGS;
1150 67 50         if (items < 1 || items > 2)
    50          
1151 0           croak_xs_usage(cv, "THIS, newval= NULL");
1152             {
1153 131           string RETVAL;
1154 67 50         dXSTARG;
    0          
1155 67 50         URI* THIS = xs::in(ST(0)); if (!SvOK(ST(0))) throw "undef not allowed as THIS";
    50          
    0          
    0          
1156             ;
1157             SV* newval;
1158              
1159 67 100         if (items < 2)
1160 64           newval = NULL;
1161             else {
1162 3           newval = ST(1)
1163 3           ;
1164             }
1165             #line 55 "xs/URI.xsi"
1166             if (newval) {
1167             THIS->host(SvOK(newval) ? xs::in(newval) : "");
1168             XSRETURN_UNDEF;
1169             }
1170             RETVAL = THIS->host();
1171             #line 1172 "xs/main_xsgen.cc"
1172 67 50         XSprePUSH; PUSHp(RETVAL.data(), RETVAL.length());
    50          
    0          
    100          
1173             }
1174 67           XSRETURN(1);
1175 67 50         }); }
1176              
1177              
1178              
1179 38           XS_EUPXS(XS_URI__XS_port) { xs::throw_guard(cv, [=]()
1180             {
1181 19           dVAR; dXSARGS;
1182 19 50         if (items < 1 || items > 2)
    50          
1183 0           croak_xs_usage(cv, "THIS, newval= NULL");
1184             {
1185             int RETVAL;
1186 19 50         dXSTARG;
    0          
1187 19 50         URI* THIS = xs::in(ST(0)); if (!SvOK(ST(0))) throw "undef not allowed as THIS";
    50          
    0          
    0          
1188             ;
1189             SV* newval;
1190              
1191 19 100         if (items < 2)
1192 17           newval = NULL;
1193             else {
1194 2           newval = ST(1)
1195 2           ;
1196             }
1197             #line 63 "xs/URI.xsi"
1198             if (newval) {
1199             THIS->port(SvIV(newval));
1200             XSRETURN_UNDEF;
1201             }
1202             RETVAL = THIS->port();
1203             #line 1204 "xs/main_xsgen.cc"
1204 17 50         XSprePUSH; PUSHi((IV)RETVAL);
    50          
1205             }
1206 17           XSRETURN(1);
1207 19 50         }); }
1208              
1209              
1210              
1211 130           XS_EUPXS(XS_URI__XS_path) { xs::throw_guard(cv, [=]()
1212             {
1213 65           dVAR; dXSARGS;
1214 65 50         if (items < 1 || items > 2)
    50          
1215 0           croak_xs_usage(cv, "THIS, newval= NULL");
1216             {
1217 128           string RETVAL;
1218 65 50         dXSTARG;
    0          
1219 65 50         URI* THIS = xs::in(ST(0)); if (!SvOK(ST(0))) throw "undef not allowed as THIS";
    50          
    0          
    0          
1220             ;
1221             SV* newval;
1222              
1223 65 100         if (items < 2)
1224 63           newval = NULL;
1225             else {
1226 2           newval = ST(1)
1227 2           ;
1228             }
1229             #line 71 "xs/URI.xsi"
1230             if (newval) {
1231             THIS->path(SvOK(newval) ? xs::in(newval) : "");
1232             XSRETURN_UNDEF;
1233             }
1234             RETVAL = THIS->path();
1235             #line 1236 "xs/main_xsgen.cc"
1236 65 50         XSprePUSH; PUSHp(RETVAL.data(), RETVAL.length());
    50          
    0          
    100          
1237             }
1238 65           XSRETURN(1);
1239 65 50         }); }
1240              
1241              
1242              
1243 0           XS_EUPXS(XS_URI__XS_path_info) { xs::throw_guard(cv, [=]()
1244             {
1245 0           dVAR; dXSARGS;
1246 0 0         if (items != 1)
1247 0           croak_xs_usage(cv, "THIS");
1248             {
1249 0           string RETVAL;
1250 0 0         dXSTARG;
    0          
1251 0 0         URI* THIS = xs::in(ST(0)); if (!SvOK(ST(0))) throw "undef not allowed as THIS";
    0          
    0          
    0          
1252             ;
1253             #line 78 "xs/URI.xsi"
1254             RETVAL = THIS->path_info();
1255             #line 1256 "xs/main_xsgen.cc"
1256 0 0         XSprePUSH; PUSHp(RETVAL.data(), RETVAL.length());
    0          
    0          
1257             }
1258 0           XSRETURN(1);
1259 0 0         }); }
1260              
1261              
1262              
1263 152           XS_EUPXS(XS_URI__XS_query_string) { xs::throw_guard(cv, [=]()
1264             {
1265 76           dVAR; dXSARGS;
1266 76 50         if (items < 1 || items > 2)
    50          
1267 0           croak_xs_usage(cv, "THIS, newval= NULL");
1268             {
1269 148           string RETVAL;
1270 76 50         dXSTARG;
    0          
1271 76 50         URI* THIS = xs::in(ST(0)); if (!SvOK(ST(0))) throw "undef not allowed as THIS";
    50          
    0          
    0          
1272             ;
1273             SV* newval;
1274              
1275 76 100         if (items < 2)
1276 72           newval = NULL;
1277             else {
1278 4           newval = ST(1)
1279 4           ;
1280             }
1281             #line 81 "xs/URI.xsi"
1282             if (newval) {
1283             THIS->query_string(SvOK(newval) ? xs::in(newval) : "");
1284             XSRETURN_UNDEF;
1285             }
1286             RETVAL = THIS->query_string();
1287             #line 1288 "xs/main_xsgen.cc"
1288 76 50         XSprePUSH; PUSHp(RETVAL.data(), RETVAL.length());
    50          
    0          
    100          
1289             }
1290 76           XSRETURN(1);
1291 76 50         }); }
1292              
1293              
1294              
1295 2           XS_EUPXS(XS_URI__XS_raw_query) { xs::throw_guard(cv, [=]()
1296             {
1297 1           dVAR; dXSARGS;
1298 1 50         if (items < 1 || items > 2)
    50          
1299 0           croak_xs_usage(cv, "THIS, newval= NULL");
1300             {
1301 2           string RETVAL;
1302 1 50         dXSTARG;
    0          
1303 1 50         URI* THIS = xs::in(ST(0)); if (!SvOK(ST(0))) throw "undef not allowed as THIS";
    50          
    0          
    0          
1304             ;
1305             SV* newval;
1306              
1307 1 50         if (items < 2)
1308 1           newval = NULL;
1309             else {
1310 0           newval = ST(1)
1311 0           ;
1312             }
1313             #line 89 "xs/URI.xsi"
1314             if (newval) {
1315             THIS->raw_query(SvOK(newval) ? xs::in(newval) : "");
1316             XSRETURN_UNDEF;
1317             }
1318             RETVAL = THIS->raw_query();
1319             #line 1320 "xs/main_xsgen.cc"
1320 1 50         XSprePUSH; PUSHp(RETVAL.data(), RETVAL.length());
    50          
    0          
    50          
1321             }
1322 1           XSRETURN(1);
1323 1 50         }); }
1324              
1325              
1326              
1327 16           XS_EUPXS(XS_URI__XS_query) { xs::throw_guard(cv, [=]()
1328             {
1329 8           dVAR; dXSARGS;
1330 8 50         if (items < 1)
1331 0           croak_xs_usage(cv, "THIS, ...");
1332             {
1333 14           Ref RETVAL;
1334 8 50         URI* THIS = xs::in(ST(0)); if (!SvOK(ST(0))) throw "undef not allowed as THIS";
    50          
    0          
    0          
1335             ;
1336             #line 97 "xs/URI.xsi"
1337             if (items > 1) {
1338             add_query_args(THIS, MARK+2, items-1, true);
1339             XSRETURN_UNDEF;
1340             }
1341             auto data = data_get(ST(0));
1342             RETVAL = data->query_hash(THIS);
1343             #line 1344 "xs/main_xsgen.cc"
1344             {
1345             SV * RETVALSV;
1346 6           RETVALSV = NULL;
1347 6 50         if (!RETVAL) XSRETURN_UNDEF;
1348 6           RETVALSV = RETVAL.detach();
1349 6 50         RETVALSV = sv_2mortal(RETVALSV);
1350 8 100         ST(0) = RETVALSV;
1351             }
1352             }
1353 8           XSRETURN(1);
1354 8 50         }); }
1355              
1356              
1357              
1358 6           XS_EUPXS(XS_URI__XS_add_query) { xs::throw_guard(cv, [=]()
1359             {
1360 3           dVAR; dXSARGS;
1361 3 50         if (items < 1)
1362 0           croak_xs_usage(cv, "THIS, ...");
1363             PERL_UNUSED_VAR(ax); /* -Wall */
1364 3           SP -= items;
1365             {
1366 3 50         URI* THIS = xs::in(ST(0)); if (!SvOK(ST(0))) throw "undef not allowed as THIS";
    0          
    0          
1367             ;
1368             #line 106 "xs/URI.xsi"
1369             add_query_args(THIS, MARK+2, items-1);
1370             #line 1371 "xs/main_xsgen.cc"
1371 3           PUTBACK;
1372 3           return;
1373             }
1374 3 50         }); }
1375              
1376              
1377              
1378 34           XS_EUPXS(XS_URI__XS_param) { xs::throw_guard(cv, [=]()
1379             {
1380 17           dVAR; dXSARGS;
1381 17           dXSI32;
1382 17 50         if (items < 2 || items > 3)
    50          
1383 0           croak_xs_usage(cv, "THIS, name, val= NULL");
1384             {
1385 30           string RETVAL;
1386 17 50         dXSTARG;
    0          
1387 17 50         URI* THIS = xs::in(ST(0)); if (!SvOK(ST(0))) throw "undef not allowed as THIS";
    50          
    0          
    0          
1388             ;
1389 17           string_view name;
1390             SV* val;
1391              
1392             { STRLEN __name_len;
1393 17 50         const char* __name_buf = SvPV(ST(1), __name_len);
    0          
1394 17           name = decltype(name)(__name_buf, __name_len); }
1395             ;
1396              
1397 17 100         if (items < 3)
1398 16           val = NULL;
1399             else {
1400 1           val = ST(2)
1401 1           ;
1402             }
1403             #line 110 "xs/URI.xsi"
1404             if (val) {
1405             add_param(THIS, string(name), val, true);
1406             XSRETURN_UNDEF;
1407             }
1408             if (ix == 0) { // param method
1409             auto it = THIS->query().find(name);
1410             if (it == THIS->query().cend()) XSRETURN_UNDEF;
1411             RETVAL = it->second;
1412             } else { // multiparam method
1413             size_t nvals = THIS->query().count(name);
1414             switch (nvals) {
1415             case 0:
1416             XSRETURN_EMPTY; break;
1417             case 1:
1418             RETVAL = THIS->query().find(name)->second; break;
1419             default:
1420             SP -= items;
1421             EXTEND(SP, (int)nvals);
1422             const auto& query = THIS->query();
1423             auto pair = query.equal_range(name);
1424             for (auto it = pair.first; it != pair.second; ++it) mPUSHp(it->second.data(), it->second.length());
1425             XSRETURN(nvals);
1426             }
1427             }
1428             #line 1429 "xs/main_xsgen.cc"
1429 17 50         XSprePUSH; PUSHp(RETVAL.data(), RETVAL.length());
    50          
    0          
    100          
1430             }
1431 17           XSRETURN(1);
1432 17 50         }); }
1433              
1434              
1435              
1436 2           XS_EUPXS(XS_URI__XS_nparam) { xs::throw_guard(cv, [=]()
1437             {
1438 1           dVAR; dXSARGS;
1439 1 50         if (items != 1)
1440 0           croak_xs_usage(cv, "THIS");
1441             {
1442             int RETVAL;
1443 1 50         dXSTARG;
    0          
1444 1 50         URI* THIS = xs::in(ST(0)); if (!SvOK(ST(0))) throw "undef not allowed as THIS";
    50          
    0          
    0          
1445             ;
1446             #line 137 "xs/URI.xsi"
1447             RETVAL = THIS->query().size();
1448             #line 1449 "xs/main_xsgen.cc"
1449 1 50         XSprePUSH; PUSHi((IV)RETVAL);
    50          
1450             }
1451 1           XSRETURN(1);
1452 1 50         }); }
1453              
1454              
1455              
1456 0           XS_EUPXS(XS_URI__XS_remove_param) { xs::throw_guard(cv, [=]()
1457             {
1458 0           dVAR; dXSARGS;
1459 0 0         if (items != 2)
1460 0           croak_xs_usage(cv, "THIS, name");
1461             {
1462             size_t RETVAL;
1463 0 0         dXSTARG;
    0          
1464 0 0         URI* THIS = xs::in(ST(0)); if (!SvOK(ST(0))) throw "undef not allowed as THIS";
    0          
    0          
    0          
1465             ;
1466 0           string name;
1467              
1468             { STRLEN __name_len;
1469 0 0         const char* __name_buf = SvPV(ST(1), __name_len);
    0          
1470 0 0         name.assign(__name_buf, __name_len); }
1471             ;
1472             #line 141 "xs/URI.xsi"
1473             RETVAL = THIS->query().erase(name);
1474             #line 1475 "xs/main_xsgen.cc"
1475 0 0         XSprePUSH; PUSHu((UV)RETVAL);
    0          
1476             }
1477 0           XSRETURN(1);
1478 0 0         }); }
1479              
1480              
1481              
1482 244           XS_EUPXS(XS_URI__XS_fragment) { xs::throw_guard(cv, [=]()
1483             {
1484 122           dVAR; dXSARGS;
1485 122           dXSI32;
1486 122 50         if (items < 1 || items > 2)
    50          
1487 0           croak_xs_usage(cv, "THIS, newval= NULL");
1488             {
1489 242           string RETVAL;
1490 122 50         dXSTARG;
    0          
1491 122 50         URI* THIS = xs::in(ST(0)); if (!SvOK(ST(0))) throw "undef not allowed as THIS";
    50          
    0          
    0          
1492             ;
1493             SV* newval;
1494              
1495 122 100         if (items < 2)
1496 120           newval = NULL;
1497             else {
1498 2           newval = ST(1)
1499 2           ;
1500             }
1501             #line 145 "xs/URI.xsi"
1502             if (newval) {
1503             THIS->fragment(SvOK(newval) ? xs::in(newval) : "");
1504             XSRETURN_UNDEF;
1505             }
1506             RETVAL = THIS->fragment();
1507             PERL_UNUSED_VAR(ix);
1508             #line 1509 "xs/main_xsgen.cc"
1509 122 50         XSprePUSH; PUSHp(RETVAL.data(), RETVAL.length());
    50          
    0          
    100          
1510             }
1511 122           XSRETURN(1);
1512 122 50         }); }
1513              
1514              
1515              
1516 16           XS_EUPXS(XS_URI__XS_location) { xs::throw_guard(cv, [=]()
1517             {
1518 8           dVAR; dXSARGS;
1519 8 50         if (items < 1 || items > 2)
    50          
1520 0           croak_xs_usage(cv, "THIS, newval= NULL");
1521             {
1522 14           string RETVAL;
1523 8 50         dXSTARG;
    0          
1524 8 50         URI* THIS = xs::in(ST(0)); if (!SvOK(ST(0))) throw "undef not allowed as THIS";
    50          
    0          
    0          
1525             ;
1526             SV* newval;
1527              
1528 8 100         if (items < 2)
1529 6           newval = NULL;
1530             else {
1531 2           newval = ST(1)
1532 2           ;
1533             }
1534             #line 154 "xs/URI.xsi"
1535             if (newval) {
1536             THIS->location(SvOK(newval) ? xs::in(newval) : "");
1537             XSRETURN_UNDEF;
1538             }
1539             RETVAL = THIS->location();
1540             #line 1541 "xs/main_xsgen.cc"
1541 8 50         XSprePUSH; PUSHp(RETVAL.data(), RETVAL.length());
    50          
    0          
    100          
1542             }
1543 8           XSRETURN(1);
1544 8 50         }); }
1545              
1546              
1547              
1548 126           XS_EUPXS(XS_URI__XS_explicit_port) { xs::throw_guard(cv, [=]()
1549             {
1550 63           dVAR; dXSARGS;
1551 63 50         if (items != 1)
1552 0           croak_xs_usage(cv, "THIS");
1553             {
1554             uint16_t RETVAL;
1555 63 50         dXSTARG;
    0          
1556 63 50         URI* THIS = xs::in(ST(0)); if (!SvOK(ST(0))) throw "undef not allowed as THIS";
    50          
    0          
    0          
1557             ;
1558             #line 161 "xs/URI.xsi"
1559             RETVAL = THIS->explicit_port();
1560             #line 1561 "xs/main_xsgen.cc"
1561 63 50         XSprePUSH; PUSHu((UV)RETVAL);
    50          
1562             }
1563 63           XSRETURN(1);
1564 63 50         }); }
1565              
1566              
1567              
1568 0           XS_EUPXS(XS_URI__XS_default_port) { xs::throw_guard(cv, [=]()
1569             {
1570 0           dVAR; dXSARGS;
1571 0 0         if (items != 1)
1572 0           croak_xs_usage(cv, "THIS");
1573             {
1574             uint16_t RETVAL;
1575 0 0         dXSTARG;
    0          
1576 0 0         URI* THIS = xs::in(ST(0)); if (!SvOK(ST(0))) throw "undef not allowed as THIS";
    0          
    0          
    0          
1577             ;
1578             #line 163 "xs/URI.xsi"
1579             RETVAL = THIS->default_port();
1580             #line 1581 "xs/main_xsgen.cc"
1581 0 0         XSprePUSH; PUSHu((UV)RETVAL);
    0          
1582             }
1583 0           XSRETURN(1);
1584 0 0         }); }
1585              
1586              
1587              
1588 4           XS_EUPXS(XS_URI__XS_explicit_location) { xs::throw_guard(cv, [=]()
1589             {
1590 2           dVAR; dXSARGS;
1591 2 50         if (items != 1)
1592 0           croak_xs_usage(cv, "THIS");
1593             {
1594 4           string RETVAL;
1595 2 50         dXSTARG;
    0          
1596 2 50         URI* THIS = xs::in(ST(0)); if (!SvOK(ST(0))) throw "undef not allowed as THIS";
    50          
    0          
    0          
1597             ;
1598             #line 165 "xs/URI.xsi"
1599             RETVAL = THIS->explicit_location();
1600             #line 1601 "xs/main_xsgen.cc"
1601 2 50         XSprePUSH; PUSHp(RETVAL.data(), RETVAL.length());
    50          
    0          
1602             }
1603 2           XSRETURN(1);
1604 2 50         }); }
1605              
1606              
1607              
1608 4           XS_EUPXS(XS_URI__XS_relative) { xs::throw_guard(cv, [=]()
1609             {
1610 2           dVAR; dXSARGS;
1611 2           dXSI32;
1612 2 50         if (items != 1)
1613 0           croak_xs_usage(cv, "THIS");
1614             {
1615 4           string RETVAL;
1616 2 50         dXSTARG;
    0          
1617 2 50         URI* THIS = xs::in(ST(0)); if (!SvOK(ST(0))) throw "undef not allowed as THIS";
    50          
    0          
    0          
1618             ;
1619             #line 168 "xs/URI.xsi"
1620             RETVAL = THIS->relative();
1621             PERL_UNUSED_VAR(ix);
1622             #line 1623 "xs/main_xsgen.cc"
1623 2 50         XSprePUSH; PUSHp(RETVAL.data(), RETVAL.length());
    50          
    0          
1624             }
1625 2           XSRETURN(1);
1626 2 50         }); }
1627              
1628              
1629              
1630 486           XS_EUPXS(XS_URI__XS_to_string) { xs::throw_guard(cv, [=]()
1631             {
1632 243           dVAR; dXSARGS;
1633 243           dXSI32;
1634 243 50         if (items < 1)
1635 0           croak_xs_usage(cv, "THIS, ...");
1636             {
1637 486           string RETVAL;
1638 243 100         dXSTARG;
    50          
1639 243 50         URI* THIS = xs::in(ST(0)); if (!SvOK(ST(0))) throw "undef not allowed as THIS";
    50          
    0          
    0          
1640             ;
1641             #line 173 "xs/URI.xsi"
1642             RETVAL = THIS->to_string();
1643             PERL_UNUSED_VAR(ix);
1644             #line 1645 "xs/main_xsgen.cc"
1645 243 50         XSprePUSH; PUSHp(RETVAL.data(), RETVAL.length());
    50          
    0          
1646             }
1647 243           XSRETURN(1);
1648 243 50         }); }
1649              
1650              
1651              
1652 26           XS_EUPXS(XS_URI__XS_secure) { xs::throw_guard(cv, [=]()
1653             {
1654 13           dVAR; dXSARGS;
1655 13 50         if (items != 1)
1656 0           croak_xs_usage(cv, "THIS");
1657             {
1658             bool RETVAL;
1659 13 50         URI* THIS = xs::in(ST(0)); if (!SvOK(ST(0))) throw "undef not allowed as THIS";
    50          
    0          
    0          
1660             ;
1661             #line 177 "xs/URI.xsi"
1662             RETVAL = THIS->secure();
1663             #line 1664 "xs/main_xsgen.cc"
1664 13 100         ST(0) = boolSV(RETVAL);
1665             }
1666 13           XSRETURN(1);
1667 13 50         }); }
1668              
1669              
1670              
1671 30           XS_EUPXS(XS_URI__XS_set) { xs::throw_guard(cv, [=]()
1672             {
1673 15           dVAR; dXSARGS;
1674 15           dXSI32;
1675 15 50         if (items < 2 || items > 3)
    50          
1676 0           croak_xs_usage(cv, "THIS, source, flags= 0");
1677             PERL_UNUSED_VAR(ax); /* -Wall */
1678 15           SP -= items;
1679             {
1680 15 50         URI* THIS = xs::in(ST(0)); if (!SvOK(ST(0))) throw "undef not allowed as THIS";
    50          
    0          
    0          
1681             ;
1682 30           Sv source = ST(1)
1683             ;
1684             int flags;
1685              
1686 15 50         if (items < 3)
1687 15           flags = 0;
1688             else {
1689 0 0         flags = (int)SvIV(ST(2))
1690 0 0         ;
1691             }
1692             #line 180 "xs/URI.xsi"
1693             PERL_UNUSED_VAR(ix);
1694             if (source.is_string()) THIS->assign(xs::in(source), flags);
1695             else THIS->assign(*xs::in>(source));
1696             #line 1697 "xs/main_xsgen.cc"
1697 13           PUTBACK;
1698 26           return;
1699             }
1700 15 50         }); }
1701              
1702              
1703              
1704 60           XS_EUPXS(XS_URI__XS_equals) { xs::throw_guard(cv, [=]()
1705             {
1706 30           dVAR; dXSARGS;
1707 30 50         if (items < 2)
1708 0           croak_xs_usage(cv, "THIS, other, ...");
1709             {
1710             bool RETVAL;
1711 30 50         URI* THIS = xs::in(ST(0)); if (!SvOK(ST(0))) throw "undef not allowed as THIS";
    50          
    0          
    0          
1712             ;
1713 60           Sv other = ST(1)
1714             ;
1715             #line 186 "xs/URI.xsi"
1716             if (other.is_string()) RETVAL = THIS->to_string() == xs::in(other);
1717             else {
1718             Object obj = other;
1719             if (obj && obj.stash().isa("URI::XS")) RETVAL = THIS->equals(*xs::in(obj));
1720             else RETVAL = false;
1721             }
1722             #line 1723 "xs/main_xsgen.cc"
1723 30 50         ST(0) = boolSV(RETVAL);
1724             }
1725 30           XSRETURN(1);
1726 30 50         }); }
1727              
1728              
1729              
1730 4           XS_EUPXS(XS_URI__XS_clone) { xs::throw_guard(cv, [=]()
1731             {
1732 2           dVAR; dXSARGS;
1733 2 50         if (items != 1)
1734 0           croak_xs_usage(cv, "THIS");
1735             {
1736 2           URISP RETVAL;
1737 2 50         URI* THIS = xs::in(ST(0)); if (!SvOK(ST(0))) throw "undef not allowed as THIS";
    50          
    0          
    0          
1738             ;
1739             #line 195 "xs/URI.xsi"
1740             xs::Sv PROTO; PERL_UNUSED_VAR(PROTO);
1741             PROTO = Object(ST(0)).stash();
1742             if (dynamic_cast(THIS)) RETVAL = URI::create(*THIS);
1743             else RETVAL = new URI(*THIS);
1744             #line 1745 "xs/main_xsgen.cc"
1745             {
1746             SV * RETVALSV;
1747 2 50         RETVALSV = xs::out(RETVAL, PROTO).detach();
1748 2 50         RETVALSV = sv_2mortal(RETVALSV);
1749 2           ST(0) = RETVALSV;
1750             }
1751             }
1752 2           XSRETURN(1);
1753 2 50         }); }
1754              
1755              
1756              
1757 16           XS_EUPXS(XS_URI__XS_path_segments) { xs::throw_guard(cv, [=]()
1758             {
1759 8           dVAR; dXSARGS;
1760 8 50         if (items < 1)
1761 0           croak_xs_usage(cv, "THIS, ...");
1762             PERL_UNUSED_VAR(ax); /* -Wall */
1763 8           SP -= items;
1764             {
1765 8 50         URI* THIS = xs::in(ST(0)); if (!SvOK(ST(0))) throw "undef not allowed as THIS";
    50          
    0          
    0          
1766             ;
1767             #line 201 "xs/URI.xsi"
1768             if (items > 1) {
1769             std::vector list;
1770             list.reserve(items-1);
1771             for (I32 i = 1; i < items; ++i) list.push_back(xs::in(ST(i)));
1772             THIS->path_segments(list.cbegin(), list.cend());
1773             XSRETURN_EMPTY;
1774             }
1775             const std::vector list = THIS->path_segments();
1776             EXTEND(SP, (int)list.size());
1777             for (auto it = list.begin(); it != list.end(); ++it) mPUSHp(it->data(), it->length());
1778             #line 1779 "xs/main_xsgen.cc"
1779 5           PUTBACK;
1780 5           return;
1781             }
1782 8 50         }); }
1783              
1784              
1785              
1786 14           XS_EUPXS(XS_URI__XS_to_bool) { xs::throw_guard(cv, [=]()
1787             {
1788 7           dVAR; dXSARGS;
1789 7 50         if (items < 1)
1790 0           croak_xs_usage(cv, "THIS, ...");
1791             {
1792             bool RETVAL;
1793 7 50         URI* THIS = xs::in(ST(0)); if (!SvOK(ST(0))) throw "undef not allowed as THIS";
    50          
    0          
    0          
1794             ;
1795             #line 214 "xs/URI.xsi"
1796             RETVAL = THIS->scheme().length() || THIS->host().length() || THIS->path().length() || THIS->query_string().length() ||
1797             THIS->fragment().length();
1798             #line 1799 "xs/main_xsgen.cc"
1799 7 50         ST(0) = boolSV(RETVAL);
1800             }
1801 7           XSRETURN(1);
1802 7 50         }); }
1803              
1804              
1805              
1806 0           XS_EUPXS(XS_URI__XS_user) { xs::throw_guard(cv, [=]()
1807             {
1808 0           dVAR; dXSARGS;
1809 0 0         if (items < 1 || items > 2)
    0          
1810 0           croak_xs_usage(cv, "THIS, newval= NULL");
1811             {
1812 0           string RETVAL;
1813 0 0         dXSTARG;
    0          
1814 0 0         URI* THIS = xs::in(ST(0)); if (!SvOK(ST(0))) throw "undef not allowed as THIS";
    0          
    0          
    0          
1815             ;
1816             SV* newval;
1817              
1818 0 0         if (items < 2)
1819 0           newval = NULL;
1820             else {
1821 0           newval = ST(1)
1822 0           ;
1823             }
1824             #line 219 "xs/URI.xsi"
1825             if (newval) {
1826             THIS->user(xs::in(newval));
1827             XSRETURN_UNDEF;
1828             }
1829             RETVAL = THIS->user();
1830             #line 1831 "xs/main_xsgen.cc"
1831 0 0         XSprePUSH; PUSHp(RETVAL.data(), RETVAL.length());
    0          
    0          
    0          
1832             }
1833 0           XSRETURN(1);
1834 0 0         }); }
1835              
1836              
1837              
1838 0           XS_EUPXS(XS_URI__XS_password) { xs::throw_guard(cv, [=]()
1839             {
1840 0           dVAR; dXSARGS;
1841 0 0         if (items < 1 || items > 2)
    0          
1842 0           croak_xs_usage(cv, "THIS, newval= NULL");
1843             {
1844 0           string RETVAL;
1845 0 0         dXSTARG;
    0          
1846 0 0         URI* THIS = xs::in(ST(0)); if (!SvOK(ST(0))) throw "undef not allowed as THIS";
    0          
    0          
    0          
1847             ;
1848             SV* newval;
1849              
1850 0 0         if (items < 2)
1851 0           newval = NULL;
1852             else {
1853 0           newval = ST(1)
1854 0           ;
1855             }
1856             #line 227 "xs/URI.xsi"
1857             if (newval) {
1858             THIS->password(xs::in(newval));
1859             XSRETURN_UNDEF;
1860             }
1861             RETVAL = THIS->password();
1862             #line 1863 "xs/main_xsgen.cc"
1863 0 0         XSprePUSH; PUSHp(RETVAL.data(), RETVAL.length());
    0          
    0          
    0          
1864             }
1865 0           XSRETURN(1);
1866 0 0         }); }
1867              
1868              
1869             /* INCLUDE: Returning to 'encode.xsi' from 'URI.xsi' */
1870              
1871              
1872              
1873 8           XS_EUPXS(XS_URI__XS_encode_uri_component) { xs::throw_guard(cv, [=]()
1874             {
1875 4           dVAR; dXSARGS;
1876 4           dXSI32;
1877 4 50         if (items < 1 || items > 2)
    50          
1878 0           croak_xs_usage(cv, "input, plus= false");
1879             {
1880             SV * RETVAL;
1881 4           string_view input;
1882             bool plus;
1883              
1884             { STRLEN __input_len;
1885 4 50         const char* __input_buf = SvPV(ST(0), __input_len);
    0          
1886 4           input = decltype(input)(__input_buf, __input_len); }
1887             ;
1888              
1889 4 100         if (items < 2)
1890 3           plus = false;
1891             else {
1892 1 50         plus = (bool)SvTRUE(ST(1))
    50          
    0          
    0          
    50          
    0          
    0          
    50          
    0          
    0          
    0          
    0          
    50          
    50          
    50          
    0          
    0          
    0          
    0          
1893 1           ;
1894             }
1895             #line 5 "xs/encode.xsi"
1896             RETVAL = newSV(input.length()*3 + 1);
1897             SvPOK_on(RETVAL);
1898             size_t rlen = encode_uri_component(input, SvPVX(RETVAL), plus ? URIComponent::query_param_plus : URIComponent::query_param);
1899             SvPVX(RETVAL)[rlen] = 0;
1900             SvCUR_set(RETVAL, rlen);
1901             PERL_UNUSED_VAR(ix);
1902             #line 1903 "xs/main_xsgen.cc"
1903 4 50         RETVAL = sv_2mortal(RETVAL);
1904 4           ST(0) = RETVAL;
1905             }
1906 4           XSRETURN(1);
1907 4 50         }); }
1908              
1909              
1910              
1911 8           XS_EUPXS(XS_URI__XS_decode_uri_component) { xs::throw_guard(cv, [=]()
1912             {
1913 4           dVAR; dXSARGS;
1914 4           dXSI32;
1915 4 50         if (items != 1)
1916 0           croak_xs_usage(cv, "input");
1917             {
1918             SV * RETVAL;
1919 4           string_view input;
1920              
1921             { STRLEN __input_len;
1922 4 50         const char* __input_buf = SvPV(ST(0), __input_len);
    0          
1923 4           input = decltype(input)(__input_buf, __input_len); }
1924             ;
1925             #line 14 "xs/encode.xsi"
1926             RETVAL = newSV(input.length()+1);
1927             SvPOK_on(RETVAL);
1928             size_t rlen = decode_uri_component(input, SvPVX(RETVAL));
1929             SvPVX(RETVAL)[rlen] = 0;
1930             SvCUR_set(RETVAL, rlen);
1931             PERL_UNUSED_VAR(ix);
1932             #line 1933 "xs/main_xsgen.cc"
1933 4 50         RETVAL = sv_2mortal(RETVAL);
1934 4           ST(0) = RETVAL;
1935             }
1936 4           XSRETURN(1);
1937 4 50         }); }
1938              
1939              
1940             /* INCLUDE: Returning to 'main.xs' from 'encode.xsi' */
1941              
1942             #ifdef __cplusplus
1943             extern "C"
1944             #endif
1945              
1946 26           XS_EXTERNAL(boot_URI__XS) { xs::throw_guard(cv, [=]() mutable
1947             {
1948             #if PERL_VERSION_LE(5, 21, 5)
1949             dVAR; dXSARGS;
1950             #else
1951 13 50         dVAR; dXSBOOTARGSXSAPIVERCHK;
    50          
1952             #endif
1953             #if (PERL_REVISION == 5 && PERL_VERSION < 9)
1954             char* file = __FILE__;
1955             #else
1956 13           const char* file = __FILE__;
1957             #endif
1958              
1959             PERL_UNUSED_VAR(file);
1960              
1961             PERL_UNUSED_VAR(cv); /* -W */
1962             PERL_UNUSED_VAR(items); /* -W */
1963             #if PERL_VERSION_LE(5, 21, 5)
1964             XS_VERSION_BOOTCHECK;
1965             # ifdef XS_APIVERSION_BOOTCHECK
1966             XS_APIVERSION_BOOTCHECK;
1967             # endif
1968             #endif
1969              
1970             {
1971             CV * cv;
1972              
1973 13 50         newXS_deffile("URI::XS::uri", XS_URI__XS_uri);
1974 13 50         newXS_deffile("URI::XS::register_scheme", XS_URI__XS_register_scheme);
1975 13 50         newXS_deffile("URI::XS::bench_parse", XS_URI__XS_bench_parse);
1976 13 50         newXS_deffile("URI::XS::test_parse", XS_URI__XS_test_parse);
1977 13 50         newXS_deffile("URI::XS::bench_parse_query", XS_URI__XS_bench_parse_query);
1978 13 50         newXS_deffile("URI::XS::bench_encode_uri_component", XS_URI__XS_bench_encode_uri_component);
1979 13 50         newXS_deffile("URI::XS::bench_decode_uri_component", XS_URI__XS_bench_decode_uri_component);
1980 13 50         newXS_deffile("URI::XS::HOOK_CLONE", XS_URI__XS_HOOK_CLONE);
1981 13 50         newXS_deffile("URI::XS::STORABLE_freeze", XS_URI__XS_STORABLE_freeze);
1982 13 50         newXS_deffile("URI::XS::STORABLE_attach", XS_URI__XS_STORABLE_attach);
1983 13 50         newXS_deffile("URI::XS::TO_JSON", XS_URI__XS_TO_JSON);
1984 13 50         newXS_deffile("URI::XS::http::new", XS_URI__XS__http_new);
1985 13 50         newXS_deffile("URI::XS::https::new", XS_URI__XS__https_new);
1986 13 50         newXS_deffile("URI::XS::ws::new", XS_URI__XS__ws_new);
1987 13 50         newXS_deffile("URI::XS::wss::new", XS_URI__XS__wss_new);
1988 13 50         newXS_deffile("URI::XS::ftp::new", XS_URI__XS__ftp_new);
1989 13 50         newXS_deffile("URI::XS::socks::new", XS_URI__XS__socks_new);
1990 13 50         newXS_deffile("URI::XS::ssh::new", XS_URI__XS__ssh_new);
1991 13 50         newXS_deffile("URI::XS::telnet::new", XS_URI__XS__telnet_new);
1992 13 50         newXS_deffile("URI::XS::sftp::new", XS_URI__XS__sftp_new);
1993 13 50         newXS_deffile("URI::XS::new", XS_URI__XS_new);
1994 13 50         newXS_deffile("URI::XS::url", XS_URI__XS_url);
1995 13 50         cv = newXS_deffile("URI::XS::proto", XS_URI__XS_scheme);
1996 13           XSANY.any_i32 = 1;
1997 13 50         cv = newXS_deffile("URI::XS::protocol", XS_URI__XS_scheme);
1998 13           XSANY.any_i32 = 2;
1999 13 50         cv = newXS_deffile("URI::XS::scheme", XS_URI__XS_scheme);
2000 13           XSANY.any_i32 = 0;
2001 13 50         newXS_deffile("URI::XS::user_info", XS_URI__XS_user_info);
2002 13 50         newXS_deffile("URI::XS::host", XS_URI__XS_host);
2003 13 50         newXS_deffile("URI::XS::port", XS_URI__XS_port);
2004 13 50         newXS_deffile("URI::XS::path", XS_URI__XS_path);
2005 13 50         newXS_deffile("URI::XS::path_info", XS_URI__XS_path_info);
2006 13 50         newXS_deffile("URI::XS::query_string", XS_URI__XS_query_string);
2007 13 50         newXS_deffile("URI::XS::raw_query", XS_URI__XS_raw_query);
2008 13 50         newXS_deffile("URI::XS::query", XS_URI__XS_query);
2009 13 50         newXS_deffile("URI::XS::add_query", XS_URI__XS_add_query);
2010 13 50         cv = newXS_deffile("URI::XS::multiparam", XS_URI__XS_param);
2011 13           XSANY.any_i32 = 1;
2012 13 50         cv = newXS_deffile("URI::XS::param", XS_URI__XS_param);
2013 13           XSANY.any_i32 = 0;
2014 13 50         newXS_deffile("URI::XS::nparam", XS_URI__XS_nparam);
2015 13 50         newXS_deffile("URI::XS::remove_param", XS_URI__XS_remove_param);
2016 13 50         cv = newXS_deffile("URI::XS::fragment", XS_URI__XS_fragment);
2017 13           XSANY.any_i32 = 0;
2018 13 50         cv = newXS_deffile("URI::XS::hash", XS_URI__XS_fragment);
2019 13           XSANY.any_i32 = 1;
2020 13 50         newXS_deffile("URI::XS::location", XS_URI__XS_location);
2021 13 50         newXS_deffile("URI::XS::explicit_port", XS_URI__XS_explicit_port);
2022 13 50         newXS_deffile("URI::XS::default_port", XS_URI__XS_default_port);
2023 13 50         newXS_deffile("URI::XS::explicit_location", XS_URI__XS_explicit_location);
2024 13 50         cv = newXS_deffile("URI::XS::rel", XS_URI__XS_relative);
2025 13           XSANY.any_i32 = 1;
2026 13 50         cv = newXS_deffile("URI::XS::relative", XS_URI__XS_relative);
2027 13           XSANY.any_i32 = 0;
2028 13 50         cv = newXS_deffile("URI::XS::as_string", XS_URI__XS_to_string);
2029 13           XSANY.any_i32 = 1;
2030 13 50         cv = newXS_deffile("URI::XS::to_string", XS_URI__XS_to_string);
2031 13           XSANY.any_i32 = 0;
2032 13 50         newXS_deffile("URI::XS::secure", XS_URI__XS_secure);
2033 13 50         cv = newXS_deffile("URI::XS::assign", XS_URI__XS_set);
2034 13           XSANY.any_i32 = 1;
2035 13 50         cv = newXS_deffile("URI::XS::set", XS_URI__XS_set);
2036 13           XSANY.any_i32 = 0;
2037 13 50         newXS_deffile("URI::XS::equals", XS_URI__XS_equals);
2038 13 50         newXS_deffile("URI::XS::clone", XS_URI__XS_clone);
2039 13 50         newXS_deffile("URI::XS::path_segments", XS_URI__XS_path_segments);
2040 13 50         newXS_deffile("URI::XS::to_bool", XS_URI__XS_to_bool);
2041 13 50         newXS_deffile("URI::XS::user", XS_URI__XS_user);
2042 13 50         newXS_deffile("URI::XS::password", XS_URI__XS_password);
2043 13 50         cv = newXS_deffile("URI::XS::encodeURIComponent", XS_URI__XS_encode_uri_component);
2044 13           XSANY.any_i32 = 1;
2045 13 50         cv = newXS_deffile("URI::XS::encode_uri_component", XS_URI__XS_encode_uri_component);
2046 13           XSANY.any_i32 = 0;
2047 13 50         cv = newXS_deffile("URI::XS::decodeURIComponent", XS_URI__XS_decode_uri_component);
2048 13           XSANY.any_i32 = 1;
2049 13 50         cv = newXS_deffile("URI::XS::decode_uri_component", XS_URI__XS_decode_uri_component);
2050 13           XSANY.any_i32 = 0;
2051             }
2052              
2053             /* Initialisation Section */
2054              
2055             #line 131 "xs/main.xs"
2056             {
2057             data_marker.svt_free = data_free;
2058              
2059             xs::at_perl_destroy([]{
2060             uri_class_map.clear();
2061             });
2062             }
2063              
2064             #line 4 "xs/schemas.xsi"
2065             {
2066             Stash s("URI::XS::http", GV_ADD);
2067             s.inherit("URI::XS");
2068             register_perl_scheme("http", s.name());
2069             }
2070              
2071             #line 20 "xs/schemas.xsi"
2072             {
2073             Stash s("URI::XS::https", GV_ADD);
2074             s.inherit("URI::XS::http");
2075             register_perl_scheme("https", s.name());
2076             }
2077              
2078             #line 36 "xs/schemas.xsi"
2079             {
2080             Stash s("URI::XS::ws", GV_ADD);
2081             s.inherit("URI::XS");
2082             register_perl_scheme("ws", s.name());
2083             }
2084              
2085             #line 52 "xs/schemas.xsi"
2086             {
2087             Stash s("URI::XS::wss", GV_ADD);
2088             s.inherit("URI::XS::ws");
2089             register_perl_scheme("wss", s.name());
2090             }
2091              
2092             #line 68 "xs/schemas.xsi"
2093             {
2094             Stash s("URI::XS::ftp", GV_ADD);
2095             s.inherit("URI::XS");
2096             register_perl_scheme("ftp", s.name());
2097             }
2098              
2099             #line 83 "xs/schemas.xsi"
2100             {
2101             Stash s("URI::XS::socks", GV_ADD);
2102             s.inherit("URI::XS");
2103             register_perl_scheme("socks5", s.name());
2104             }
2105              
2106             #line 98 "xs/schemas.xsi"
2107             {
2108             Stash s("URI::XS::ssh", GV_ADD);
2109             s.inherit("URI::XS");
2110             register_perl_scheme("ssh", s.name());
2111             }
2112              
2113             #line 113 "xs/schemas.xsi"
2114             {
2115             Stash s("URI::XS::telnet", GV_ADD);
2116             s.inherit("URI::XS");
2117             register_perl_scheme("telnet", s.name());
2118             }
2119              
2120             #line 128 "xs/schemas.xsi"
2121             {
2122             Stash s("URI::XS::sftp", GV_ADD);
2123             s.inherit("URI::XS::ssh");
2124             register_perl_scheme("sftp", s.name());
2125             }
2126              
2127             #line 8 "xs/URI.xsi"
2128             {
2129             Stash stash("URI::XS");
2130             PERL_HASH(uxs_hashval, "URI::XS", 7);
2131              
2132             xs::exp::create_constants(stash, {
2133             {"ALLOW_SUFFIX_REFERENCE", URI::Flags::allow_suffix_reference},
2134             {"QUERY_PARAM_SEMICOLON", URI::Flags::query_param_semicolon},
2135             {"ALLOW_EXTENDED_CHARS", URI::Flags::allow_extended_chars},
2136              
2137             // deprecated names
2138             {"ALLOW_LEADING_AUTHORITY", URI::Flags::allow_suffix_reference},
2139             {"PARAM_DELIM_SEMICOLON", URI::Flags::query_param_semicolon},
2140             });
2141             xs::exp::autoexport(stash);
2142             }
2143              
2144             #line 2145 "xs/main_xsgen.cc"
2145              
2146             /* End of Initialisation Section */
2147              
2148             #if PERL_VERSION_LE(5, 21, 5)
2149             # if PERL_VERSION_GE(5, 9, 0)
2150             if (PL_unitcheckav)
2151             call_list(PL_scopestack_ix, PL_unitcheckav);
2152             # endif
2153             XSRETURN_YES;
2154             #else
2155 13           Perl_xs_boot_epilog(aTHX_ ax);
2156             #endif
2157 78 50         }); }
    50          
    50          
2158