1 /*******************************************************************************
2 *
3 * !!!!! Do NOT edit this file directly! -- Edit PPPort_xs.PL instead. !!!!!
4 *
5 ********************************************************************************
6 *
7 * Perl/Pollution/Portability
8 *
9 ********************************************************************************
10 *
11 * $Revision: 8 $
12 * $Author: mhx $
13 * $Date: 2005/01/31 08:10:55 +0100 $
14 *
15 ********************************************************************************
16 *
17 * Version 3.x, Copyright (C) 2004-2005, Marcus Holland-Moritz.
18 * Version 2.x, Copyright (C) 2001, Paul Marquess.
19 * Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
20 *
21 * This program is free software; you can redistribute it and/or
22 * modify it under the same terms as Perl itself.
23 *
24 *******************************************************************************/
25
26 /* ========== BEGIN XSHEAD ================================================== */
27
28
29
30 /* =========== END XSHEAD =================================================== */
31
32 #include "EXTERN.h"
33 #include "perl.h"
34 #include "XSUB.h"
35
36 /* ========== BEGIN XSINIT ================================================== */
37
38 /* ---- from parts/inc/call ---- */
39 #define NEED_eval_pv
40
41 /* ---- from parts/inc/grok ---- */
42 #define NEED_grok_number
43 #define NEED_grok_numeric_radix
44 #define NEED_grok_bin
45 #define NEED_grok_hex
46 #define NEED_grok_oct
47
48 /* ---- from parts/inc/newCONSTSUB ---- */
49 #define NEED_newCONSTSUB
50
51 /* ---- from parts/inc/newRV ---- */
52 #define NEED_newRV_noinc
53
54 /* ---- from parts/inc/sv_xpvf ---- */
55 #define NEED_vnewSVpvf
56 #define NEED_sv_catpvf_mg
57 #define NEED_sv_catpvf_mg_nocontext
58 #define NEED_sv_setpvf_mg
59 #define NEED_sv_setpvf_mg_nocontext
60
61 /* ---- from parts/inc/SvPV ---- */
62 #define NEED_sv_2pv_nolen
63 #define NEED_sv_2pvbyte
64
65 /* =========== END XSINIT =================================================== */
66
67 #include "ppport.h"
68
69 /* ========== BEGIN XSMISC ================================================== */
70
71 /* ---- from parts/inc/exception ---- */
72 /* defined in module3.c */
73 int exception(int throw_e);
74
75 /* ---- from parts/inc/misc ---- */
76 XS(XS_Devel__PPPort_dXSTARG); /* prototype */
XS(XS_Devel__PPPort_dXSTARG)77 XS(XS_Devel__PPPort_dXSTARG)
78 {
79 dXSARGS;
80 dXSTARG;
81 IV iv;
82 SP -= items;
83 iv = SvIV(ST(0)) + 1;
84 PUSHi(iv);
85 XSRETURN(1);
86 }
87
88 /* ---- from parts/inc/MY_CXT ---- */
89 #define MY_CXT_KEY "Devel::PPPort::_guts" XS_VERSION
90
91 typedef struct {
92 /* Put Global Data in here */
93 int dummy;
94 } my_cxt_t;
95
96 START_MY_CXT
97
98 /* ---- from parts/inc/newCONSTSUB ---- */
call_newCONSTSUB_1(void)99 void call_newCONSTSUB_1(void)
100 {
101 #ifdef PERL_NO_GET_CONTEXT
102 dTHX;
103 #endif
104 newCONSTSUB(gv_stashpv("Devel::PPPort", FALSE), "test_value_1", newSViv(1));
105 }
106
107 extern void call_newCONSTSUB_2(void);
108 extern void call_newCONSTSUB_3(void);
109
110 /* ---- from parts/inc/sv_xpvf ---- */
test_vnewSVpvf(pTHX_ const char * pat,...)111 static SV * test_vnewSVpvf(pTHX_ const char *pat, ...)
112 {
113 SV *sv;
114 va_list args;
115 va_start(args, pat);
116 #if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0)))
117 sv = vnewSVpvf(pat, &args);
118 #else
119 sv = newSVpv(pat, 0);
120 #endif
121 va_end(args);
122 return sv;
123 }
124
test_sv_vcatpvf(pTHX_ SV * sv,const char * pat,...)125 static void test_sv_vcatpvf(pTHX_ SV *sv, const char *pat, ...)
126 {
127 va_list args;
128 va_start(args, pat);
129 #if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0)))
130 sv_vcatpvf(sv, pat, &args);
131 #else
132 sv_catpv(sv, pat);
133 #endif
134 va_end(args);
135 }
136
test_sv_vsetpvf(pTHX_ SV * sv,const char * pat,...)137 static void test_sv_vsetpvf(pTHX_ SV *sv, const char *pat, ...)
138 {
139 va_list args;
140 va_start(args, pat);
141 #if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0)))
142 sv_vsetpvf(sv, pat, &args);
143 #else
144 sv_setpv(sv, pat);
145 #endif
146 va_end(args);
147 }
148
149 /* =========== END XSMISC =================================================== */
150
151 MODULE = Devel::PPPort PACKAGE = Devel::PPPort
152
153 BOOT:
154 /* ---- from parts/inc/misc ---- */
155 newXS("Devel::PPPort::dXSTARG", XS_Devel__PPPort_dXSTARG, file);
156
157 /* ---- from parts/inc/MY_CXT ---- */
158 {
159 MY_CXT_INIT;
160 /* If any of the fields in the my_cxt_t struct need
161 * to be initialised, do it here.
162 */
163 MY_CXT.dummy = 42;
164 }
165
166
167 ##----------------------------------------------------------------------
168 ## XSUBs from parts/inc/call
169 ##----------------------------------------------------------------------
170
171 I32
172 G_SCALAR()
173 CODE:
174 RETVAL = G_SCALAR;
175 OUTPUT:
176 RETVAL
177
178 I32
179 G_ARRAY()
180 CODE:
181 RETVAL = G_ARRAY;
182 OUTPUT:
183 RETVAL
184
185 I32
186 G_DISCARD()
187 CODE:
188 RETVAL = G_DISCARD;
189 OUTPUT:
190 RETVAL
191
192 void
193 eval_sv(sv, flags)
194 SV* sv
195 I32 flags
196 PREINIT:
197 I32 i;
198 PPCODE:
199 PUTBACK;
200 i = eval_sv(sv, flags);
201 SPAGAIN;
202 EXTEND(SP, 1);
203 PUSHs(sv_2mortal(newSViv(i)));
204
205 void
206 eval_pv(p, croak_on_error)
207 char* p
208 I32 croak_on_error
209 PPCODE:
210 PUTBACK;
211 EXTEND(SP, 1);
212 PUSHs(eval_pv(p, croak_on_error));
213
214 void
215 call_sv(sv, flags, ...)
216 SV* sv
217 I32 flags
218 PREINIT:
219 I32 i;
220 PPCODE:
221 for (i=0; i<items-2; i++)
222 ST(i) = ST(i+2); /* pop first two args */
223 PUSHMARK(SP);
224 SP += items - 2;
225 PUTBACK;
226 i = call_sv(sv, flags);
227 SPAGAIN;
228 EXTEND(SP, 1);
229 PUSHs(sv_2mortal(newSViv(i)));
230
231 void
232 call_pv(subname, flags, ...)
233 char* subname
234 I32 flags
235 PREINIT:
236 I32 i;
237 PPCODE:
238 for (i=0; i<items-2; i++)
239 ST(i) = ST(i+2); /* pop first two args */
240 PUSHMARK(SP);
241 SP += items - 2;
242 PUTBACK;
243 i = call_pv(subname, flags);
244 SPAGAIN;
245 EXTEND(SP, 1);
246 PUSHs(sv_2mortal(newSViv(i)));
247
248 void
249 call_argv(subname, flags, ...)
250 char* subname
251 I32 flags
252 PREINIT:
253 I32 i;
254 char *args[8];
255 PPCODE:
256 if (items > 8) /* play safe */
257 XSRETURN_UNDEF;
258 for (i=2; i<items; i++)
259 args[i-2] = SvPV_nolen(ST(i));
260 args[items-2] = NULL;
261 PUTBACK;
262 i = call_argv(subname, flags, args);
263 SPAGAIN;
264 EXTEND(SP, 1);
265 PUSHs(sv_2mortal(newSViv(i)));
266
267 void
268 call_method(methname, flags, ...)
269 char* methname
270 I32 flags
271 PREINIT:
272 I32 i;
273 PPCODE:
274 for (i=0; i<items-2; i++)
275 ST(i) = ST(i+2); /* pop first two args */
276 PUSHMARK(SP);
277 SP += items - 2;
278 PUTBACK;
279 i = call_method(methname, flags);
280 SPAGAIN;
281 EXTEND(SP, 1);
282 PUSHs(sv_2mortal(newSViv(i)));
283
284 ##----------------------------------------------------------------------
285 ## XSUBs from parts/inc/cop
286 ##----------------------------------------------------------------------
287
288 char *
289 CopSTASHPV()
290 CODE:
291 RETVAL = CopSTASHPV(PL_curcop);
292 OUTPUT:
293 RETVAL
294
295 char *
296 CopFILE()
297 CODE:
298 RETVAL = CopFILE(PL_curcop);
299 OUTPUT:
300 RETVAL
301
302 ##----------------------------------------------------------------------
303 ## XSUBs from parts/inc/exception
304 ##----------------------------------------------------------------------
305
306 int
307 exception(throw_e)
308 int throw_e
309 OUTPUT:
310 RETVAL
311
312 ##----------------------------------------------------------------------
313 ## XSUBs from parts/inc/grok
314 ##----------------------------------------------------------------------
315
316 UV
317 grok_number(string)
318 SV *string
319 PREINIT:
320 const char *pv;
321 STRLEN len;
322 CODE:
323 pv = SvPV(string, len);
324 if (!grok_number(pv, len, &RETVAL))
325 XSRETURN_UNDEF;
326 OUTPUT:
327 RETVAL
328
329 UV
330 grok_bin(string)
331 SV *string
332 PREINIT:
333 char *pv;
334 I32 flags;
335 STRLEN len;
336 CODE:
337 pv = SvPV(string, len);
338 RETVAL = grok_bin(pv, &len, &flags, NULL);
339 OUTPUT:
340 RETVAL
341
342 UV
343 grok_hex(string)
344 SV *string
345 PREINIT:
346 char *pv;
347 I32 flags;
348 STRLEN len;
349 CODE:
350 pv = SvPV(string, len);
351 RETVAL = grok_hex(pv, &len, &flags, NULL);
352 OUTPUT:
353 RETVAL
354
355 UV
356 grok_oct(string)
357 SV *string
358 PREINIT:
359 char *pv;
360 I32 flags;
361 STRLEN len;
362 CODE:
363 pv = SvPV(string, len);
364 RETVAL = grok_oct(pv, &len, &flags, NULL);
365 OUTPUT:
366 RETVAL
367
368 UV
369 Perl_grok_number(string)
370 SV *string
371 PREINIT:
372 const char *pv;
373 STRLEN len;
374 CODE:
375 pv = SvPV(string, len);
376 if (!Perl_grok_number(aTHX_ pv, len, &RETVAL))
377 XSRETURN_UNDEF;
378 OUTPUT:
379 RETVAL
380
381 UV
382 Perl_grok_bin(string)
383 SV *string
384 PREINIT:
385 char *pv;
386 I32 flags;
387 STRLEN len;
388 CODE:
389 pv = SvPV(string, len);
390 RETVAL = Perl_grok_bin(aTHX_ pv, &len, &flags, NULL);
391 OUTPUT:
392 RETVAL
393
394 UV
395 Perl_grok_hex(string)
396 SV *string
397 PREINIT:
398 char *pv;
399 I32 flags;
400 STRLEN len;
401 CODE:
402 pv = SvPV(string, len);
403 RETVAL = Perl_grok_hex(aTHX_ pv, &len, &flags, NULL);
404 OUTPUT:
405 RETVAL
406
407 UV
408 Perl_grok_oct(string)
409 SV *string
410 PREINIT:
411 char *pv;
412 I32 flags;
413 STRLEN len;
414 CODE:
415 pv = SvPV(string, len);
416 RETVAL = Perl_grok_oct(aTHX_ pv, &len, &flags, NULL);
417 OUTPUT:
418 RETVAL
419
420 ##----------------------------------------------------------------------
421 ## XSUBs from parts/inc/limits
422 ##----------------------------------------------------------------------
423
424 IV
425 iv_size()
426 CODE:
427 RETVAL = IVSIZE == sizeof(IV);
428 OUTPUT:
429 RETVAL
430
431 IV
432 uv_size()
433 CODE:
434 RETVAL = UVSIZE == sizeof(UV);
435 OUTPUT:
436 RETVAL
437
438 IV
439 iv_type()
440 CODE:
441 RETVAL = sizeof(IVTYPE) == sizeof(IV);
442 OUTPUT:
443 RETVAL
444
445 IV
446 uv_type()
447 CODE:
448 RETVAL = sizeof(UVTYPE) == sizeof(UV);
449 OUTPUT:
450 RETVAL
451
452 ##----------------------------------------------------------------------
453 ## XSUBs from parts/inc/magic
454 ##----------------------------------------------------------------------
455
456 void
457 sv_catpv_mg(sv, string)
458 SV *sv;
459 char *string;
460 CODE:
461 sv_catpv_mg(sv, string);
462
463 void
464 sv_catpvn_mg(sv, sv2)
465 SV *sv;
466 SV *sv2;
467 PREINIT:
468 char *str;
469 STRLEN len;
470 CODE:
471 str = SvPV(sv2, len);
472 sv_catpvn_mg(sv, str, len);
473
474 void
475 sv_catsv_mg(sv, sv2)
476 SV *sv;
477 SV *sv2;
478 CODE:
479 sv_catsv_mg(sv, sv2);
480
481 void
482 sv_setiv_mg(sv, iv)
483 SV *sv;
484 IV iv;
485 CODE:
486 sv_setiv_mg(sv, iv);
487
488 void
489 sv_setnv_mg(sv, nv)
490 SV *sv;
491 NV nv;
492 CODE:
493 sv_setnv_mg(sv, nv);
494
495 void
496 sv_setpv_mg(sv, pv)
497 SV *sv;
498 char *pv;
499 CODE:
500 sv_setpv_mg(sv, pv);
501
502 void
503 sv_setpvn_mg(sv, sv2)
504 SV *sv;
505 SV *sv2;
506 PREINIT:
507 char *str;
508 STRLEN len;
509 CODE:
510 str = SvPV(sv2, len);
511 sv_setpvn_mg(sv, str, len);
512
513 void
514 sv_setsv_mg(sv, sv2)
515 SV *sv;
516 SV *sv2;
517 CODE:
518 sv_setsv_mg(sv, sv2);
519
520 void
521 sv_setuv_mg(sv, uv)
522 SV *sv;
523 UV uv;
524 CODE:
525 sv_setuv_mg(sv, uv);
526
527 void
528 sv_usepvn_mg(sv, sv2)
529 SV *sv;
530 SV *sv2;
531 PREINIT:
532 char *str, *copy;
533 STRLEN len;
534 CODE:
535 str = SvPV(sv2, len);
536 New(42, copy, len+1, char);
537 Copy(str, copy, len+1, char);
538 sv_usepvn_mg(sv, copy, len);
539
540 ##----------------------------------------------------------------------
541 ## XSUBs from parts/inc/misc
542 ##----------------------------------------------------------------------
543
544 int
545 gv_stashpvn(name, create)
546 char *name
547 I32 create
548 CODE:
549 RETVAL = gv_stashpvn(name, strlen(name), create) != NULL;
550 OUTPUT:
551 RETVAL
552
553 int
554 get_sv(name, create)
555 char *name
556 I32 create
557 CODE:
558 RETVAL = get_sv(name, create) != NULL;
559 OUTPUT:
560 RETVAL
561
562 int
563 get_av(name, create)
564 char *name
565 I32 create
566 CODE:
567 RETVAL = get_av(name, create) != NULL;
568 OUTPUT:
569 RETVAL
570
571 int
572 get_hv(name, create)
573 char *name
574 I32 create
575 CODE:
576 RETVAL = get_hv(name, create) != NULL;
577 OUTPUT:
578 RETVAL
579
580 int
581 get_cv(name, create)
582 char *name
583 I32 create
584 CODE:
585 RETVAL = get_cv(name, create) != NULL;
586 OUTPUT:
587 RETVAL
588
589 void
590 newSVpvn()
591 PPCODE:
592 XPUSHs(newSVpvn("test", 4));
593 XPUSHs(newSVpvn("test", 2));
594 XPUSHs(newSVpvn("test", 0));
595 XPUSHs(newSVpvn(NULL, 2));
596 XPUSHs(newSVpvn(NULL, 0));
597 XSRETURN(5);
598
599 SV *
600 PL_sv_undef()
601 CODE:
602 RETVAL = newSVsv(&PL_sv_undef);
603 OUTPUT:
604 RETVAL
605
606 SV *
607 PL_sv_yes()
608 CODE:
609 RETVAL = newSVsv(&PL_sv_yes);
610 OUTPUT:
611 RETVAL
612
613 SV *
614 PL_sv_no()
615 CODE:
616 RETVAL = newSVsv(&PL_sv_no);
617 OUTPUT:
618 RETVAL
619
620 int
621 PL_na(string)
622 char *string
623 CODE:
624 PL_na = strlen(string);
625 RETVAL = PL_na;
626 OUTPUT:
627 RETVAL
628
629 SV*
630 boolSV(value)
631 int value
632 CODE:
633 RETVAL = newSVsv(boolSV(value));
634 OUTPUT:
635 RETVAL
636
637 SV*
638 DEFSV()
639 CODE:
640 RETVAL = newSVsv(DEFSV);
641 OUTPUT:
642 RETVAL
643
644 int
645 ERRSV()
646 CODE:
647 RETVAL = SvTRUE(ERRSV);
648 OUTPUT:
649 RETVAL
650
651 SV*
UNDERBAR()652 UNDERBAR()
653 CODE:
654 {
655 dUNDERBAR;
656 RETVAL = newSVsv(UNDERBAR);
657 }
658 OUTPUT:
659 RETVAL
660
661 ##----------------------------------------------------------------------
662 ## XSUBs from parts/inc/mPUSH
663 ##----------------------------------------------------------------------
664
665 void
666 mPUSHp()
667 PPCODE:
668 EXTEND(SP, 3);
669 mPUSHp("one", 3);
670 mPUSHp("two", 3);
671 mPUSHp("three", 5);
672 XSRETURN(3);
673
674 void
675 mPUSHn()
676 PPCODE:
677 EXTEND(SP, 3);
678 mPUSHn(0.5);
679 mPUSHn(-0.25);
680 mPUSHn(0.125);
681 XSRETURN(3);
682
683 void
684 mPUSHi()
685 PPCODE:
686 EXTEND(SP, 3);
687 mPUSHi(-1);
688 mPUSHi(2);
689 mPUSHi(-3);
690 XSRETURN(3);
691
692 void
693 mPUSHu()
694 PPCODE:
695 EXTEND(SP, 3);
696 mPUSHu(1);
697 mPUSHu(2);
698 mPUSHu(3);
699 XSRETURN(3);
700
701 void
702 mXPUSHp()
703 PPCODE:
704 mXPUSHp("one", 3);
705 mXPUSHp("two", 3);
706 mXPUSHp("three", 5);
707 XSRETURN(3);
708
709 void
710 mXPUSHn()
711 PPCODE:
712 mXPUSHn(0.5);
713 mXPUSHn(-0.25);
714 mXPUSHn(0.125);
715 XSRETURN(3);
716
717 void
718 mXPUSHi()
719 PPCODE:
720 mXPUSHi(-1);
721 mXPUSHi(2);
722 mXPUSHi(-3);
723 XSRETURN(3);
724
725 void
726 mXPUSHu()
727 PPCODE:
728 mXPUSHu(1);
729 mXPUSHu(2);
730 mXPUSHu(3);
731 XSRETURN(3);
732
733 ##----------------------------------------------------------------------
734 ## XSUBs from parts/inc/MY_CXT
735 ##----------------------------------------------------------------------
736
737 int
738 MY_CXT_1()
739 CODE:
740 dMY_CXT;
741 RETVAL = MY_CXT.dummy == 42;
742 ++MY_CXT.dummy;
743 OUTPUT:
744 RETVAL
745
746 int
747 MY_CXT_2()
748 CODE:
749 dMY_CXT;
750 RETVAL = MY_CXT.dummy == 43;
751 OUTPUT:
752 RETVAL
753
754 int
755 MY_CXT_CLONE()
756 CODE:
757 MY_CXT_CLONE;
758 RETVAL = 42;
759 OUTPUT:
760 RETVAL
761
762 ##----------------------------------------------------------------------
763 ## XSUBs from parts/inc/newCONSTSUB
764 ##----------------------------------------------------------------------
765
766 void
767 call_newCONSTSUB_1()
768
769 void
770 call_newCONSTSUB_2()
771
772 void
773 call_newCONSTSUB_3()
774
775 ##----------------------------------------------------------------------
776 ## XSUBs from parts/inc/newRV
777 ##----------------------------------------------------------------------
778
779 U32
780 newRV_inc_REFCNT()
781 PREINIT:
782 SV *sv, *rv;
783 CODE:
784 sv = newSViv(42);
785 rv = newRV_inc(sv);
786 SvREFCNT_dec(sv);
787 RETVAL = SvREFCNT(sv);
788 sv_2mortal(rv);
789 OUTPUT:
790 RETVAL
791
792 U32
793 newRV_noinc_REFCNT()
794 PREINIT:
795 SV *sv, *rv;
796 CODE:
797 sv = newSViv(42);
798 rv = newRV_noinc(sv);
799 RETVAL = SvREFCNT(sv);
800 sv_2mortal(rv);
801 OUTPUT:
802 RETVAL
803
804 ##----------------------------------------------------------------------
805 ## XSUBs from parts/inc/sv_xpvf
806 ##----------------------------------------------------------------------
807
808 SV *
809 vnewSVpvf()
810 CODE:
811 RETVAL = test_vnewSVpvf(aTHX_ "%s-%d", "Perl", 42);
812 OUTPUT:
813 RETVAL
814
815 SV *
816 sv_vcatpvf(sv)
817 SV *sv
818 CODE:
819 RETVAL = newSVsv(sv);
820 test_sv_vcatpvf(aTHX_ RETVAL, "%s-%d", "Perl", 42);
821 OUTPUT:
822 RETVAL
823
824 SV *
825 sv_vsetpvf(sv)
826 SV *sv
827 CODE:
828 RETVAL = newSVsv(sv);
829 test_sv_vsetpvf(aTHX_ RETVAL, "%s-%d", "Perl", 42);
830 OUTPUT:
831 RETVAL
832
833 void
834 sv_catpvf_mg(sv)
835 SV *sv
836 CODE:
837 #if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0)))
838 sv_catpvf_mg(sv, "%s-%d", "Perl", 42);
839 #endif
840
841 void
842 Perl_sv_catpvf_mg(sv)
843 SV *sv
844 CODE:
845 #if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0)))
846 Perl_sv_catpvf_mg(aTHX_ sv, "%s-%d", "-Perl", 43);
847 #endif
848
849 void
850 sv_catpvf_mg_nocontext(sv)
851 SV *sv
852 CODE:
853 #if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0)))
854 #ifdef PERL_IMPLICIT_CONTEXT
855 sv_catpvf_mg_nocontext(sv, "%s-%d", "-Perl", 44);
856 #else
857 sv_catpvf_mg(sv, "%s-%d", "-Perl", 44);
858 #endif
859 #endif
860
861 void
862 sv_setpvf_mg(sv)
863 SV *sv
864 CODE:
865 #if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0)))
866 sv_setpvf_mg(sv, "%s-%d", "mhx", 42);
867 #endif
868
869 void
870 Perl_sv_setpvf_mg(sv)
871 SV *sv
872 CODE:
873 #if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0)))
874 Perl_sv_setpvf_mg(aTHX_ sv, "%s-%d", "foo", 43);
875 #endif
876
877 void
878 sv_setpvf_mg_nocontext(sv)
879 SV *sv
880 CODE:
881 #if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0)))
882 #ifdef PERL_IMPLICIT_CONTEXT
883 sv_setpvf_mg_nocontext(sv, "%s-%d", "bar", 44);
884 #else
885 sv_setpvf_mg(sv, "%s-%d", "bar", 44);
886 #endif
887 #endif
888
889 ##----------------------------------------------------------------------
890 ## XSUBs from parts/inc/SvPV
891 ##----------------------------------------------------------------------
892
893 IV
894 SvPVbyte(sv)
895 SV *sv
896 PREINIT:
897 STRLEN len;
898 const char *str;
899 CODE:
900 str = SvPVbyte(sv, len);
901 RETVAL = strEQ(str, "mhx") ? len : -1;
902 OUTPUT:
903 RETVAL
904
905 IV
906 SvPV_nolen(sv)
907 SV *sv
908 PREINIT:
909 const char *str;
910 CODE:
911 str = SvPV_nolen(sv);
912 RETVAL = strEQ(str, "mhx") ? 42 : 0;
913 OUTPUT:
914 RETVAL
915
916 ##----------------------------------------------------------------------
917 ## XSUBs from parts/inc/threads
918 ##----------------------------------------------------------------------
919
920 IV
921 no_THX_arg(sv)
922 SV *sv
923 CODE:
924 RETVAL = 1 + sv_2iv(sv);
925 OUTPUT:
926 RETVAL
927
928 void
929 with_THX_arg(error)
930 char *error
931 PPCODE:
932 Perl_croak(aTHX_ "%s", error);
933
934 ##----------------------------------------------------------------------
935 ## XSUBs from parts/inc/uv
936 ##----------------------------------------------------------------------
937
938 SV *
939 sv_setuv(uv)
940 UV uv
941 CODE:
942 RETVAL = newSViv(1);
943 sv_setuv(RETVAL, uv);
944 OUTPUT:
945 RETVAL
946
947 SV *
948 newSVuv(uv)
949 UV uv
950 CODE:
951 RETVAL = newSVuv(uv);
952 OUTPUT:
953 RETVAL
954
955 UV
956 sv_2uv(sv)
957 SV *sv
958 CODE:
959 RETVAL = sv_2uv(sv);
960 OUTPUT:
961 RETVAL
962
963 UV
964 SvUVx(sv)
965 SV *sv
966 CODE:
967 sv--;
968 RETVAL = SvUVx(++sv);
969 OUTPUT:
970 RETVAL
971
972 void
973 XSRETURN_UV()
974 PPCODE:
975 XSRETURN_UV(42);
976
977 void
978 PUSHu()
979 PREINIT:
980 dTARG;
981 PPCODE:
982 TARG = sv_newmortal();
983 EXTEND(SP, 1);
984 PUSHu(42);
985 XSRETURN(1);
986
987 void
988 XPUSHu()
989 PREINIT:
990 dTARG;
991 PPCODE:
992 TARG = sv_newmortal();
993 XPUSHu(43);
994 XSRETURN(1);
995