[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
1 ################################################################################ 2 # 3 # !!!!! Do NOT edit this file directly! -- Edit PPPort_pm.PL instead. !!!!! 4 # 5 # This file was automatically generated from the definition files in the 6 # parts/inc/ subdirectory by PPPort_pm.PL. To learn more about how all this 7 # works, please read the F<HACKERS> file that came with this distribution. 8 # 9 ################################################################################ 10 # 11 # Perl/Pollution/Portability 12 # 13 ################################################################################ 14 # 15 # $Revision: 57 $ 16 # $Author: mhx $ 17 # $Date: 2007/09/11 23:28:24 +0200 $ 18 # 19 ################################################################################ 20 # 21 # Version 3.x, Copyright (C) 2004-2007, Marcus Holland-Moritz. 22 # Version 2.x, Copyright (C) 2001, Paul Marquess. 23 # Version 1.x, Copyright (C) 1999, Kenneth Albanowski. 24 # 25 # This program is free software; you can redistribute it and/or 26 # modify it under the same terms as Perl itself. 27 # 28 ################################################################################ 29 30 =head1 NAME 31 32 Devel::PPPort - Perl/Pollution/Portability 33 34 =head1 SYNOPSIS 35 36 Devel::PPPort::WriteFile(); # defaults to ./ppport.h 37 Devel::PPPort::WriteFile('someheader.h'); 38 39 =head1 DESCRIPTION 40 41 Perl's API has changed over time, gaining new features, new functions, 42 increasing its flexibility, and reducing the impact on the C namespace 43 environment (reduced pollution). The header file written by this module, 44 typically F<ppport.h>, attempts to bring some of the newer Perl API 45 features to older versions of Perl, so that you can worry less about 46 keeping track of old releases, but users can still reap the benefit. 47 48 C<Devel::PPPort> contains a single function, called C<WriteFile>. Its 49 only purpose is to write the F<ppport.h> C header file. This file 50 contains a series of macros and, if explicitly requested, functions that 51 allow XS modules to be built using older versions of Perl. Currently, 52 Perl versions from 5.003 to 5.10.0 are supported. 53 54 This module is used by C<h2xs> to write the file F<ppport.h>. 55 56 =head2 Why use ppport.h? 57 58 You should use F<ppport.h> in modern code so that your code will work 59 with the widest range of Perl interpreters possible, without significant 60 additional work. 61 62 You should attempt older code to fully use F<ppport.h>, because the 63 reduced pollution of newer Perl versions is an important thing. It's so 64 important that the old polluting ways of original Perl modules will not be 65 supported very far into the future, and your module will almost certainly 66 break! By adapting to it now, you'll gain compatibility and a sense of 67 having done the electronic ecology some good. 68 69 =head2 How to use ppport.h 70 71 Don't direct the users of your module to download C<Devel::PPPort>. 72 They are most probably no XS writers. Also, don't make F<ppport.h> 73 optional. Rather, just take the most recent copy of F<ppport.h> that 74 you can find (e.g. by generating it with the latest C<Devel::PPPort> 75 release from CPAN), copy it into your project, adjust your project to 76 use it, and distribute the header along with your module. 77 78 =head2 Running ppport.h 79 80 But F<ppport.h> is more than just a C header. It's also a Perl script 81 that can check your source code. It will suggest hints and portability 82 notes, and can even make suggestions on how to change your code. You 83 can run it like any other Perl program: 84 85 perl ppport.h [options] [files] 86 87 It also has embedded documentation, so you can use 88 89 perldoc ppport.h 90 91 to find out more about how to use it. 92 93 =head1 FUNCTIONS 94 95 =head2 WriteFile 96 97 C<WriteFile> takes one optional argument. When called with one 98 argument, it expects to be passed a filename. When called with 99 no arguments, it defaults to the filename F<ppport.h>. 100 101 The function returns a true value if the file was written successfully. 102 Otherwise it returns a false value. 103 104 =head1 COMPATIBILITY 105 106 F<ppport.h> supports Perl versions from 5.003 to 5.10.0 107 in threaded and non-threaded configurations. 108 109 =head2 Provided Perl compatibility API 110 111 The header file written by this module, typically F<ppport.h>, provides 112 access to the following elements of the Perl API that is not available 113 in older Perl releases: 114 115 _aMY_CXT 116 _pMY_CXT 117 aMY_CXT 118 aMY_CXT_ 119 aTHX 120 aTHX_ 121 aTHXR 122 aTHXR_ 123 AvFILLp 124 boolSV 125 call_argv 126 call_method 127 call_pv 128 call_sv 129 ckWARN 130 CopFILE 131 CopFILE_set 132 CopFILEAV 133 CopFILEGV 134 CopFILEGV_set 135 CopFILESV 136 CopSTASH 137 CopSTASH_eq 138 CopSTASH_set 139 CopSTASHPV 140 CopSTASHPV_set 141 CopyD 142 dAX 143 dAXMARK 144 DEFSV 145 dITEMS 146 dMY_CXT 147 dMY_CXT_SV 148 dNOOP 149 dTHR 150 dTHX 151 dTHXa 152 dTHXoa 153 dTHXR 154 dUNDERBAR 155 dVAR 156 dXCPT 157 dXSTARG 158 END_EXTERN_C 159 ERRSV 160 eval_pv 161 eval_sv 162 EXTERN_C 163 get_av 164 get_cv 165 get_hv 166 get_sv 167 grok_bin 168 grok_hex 169 grok_number 170 GROK_NUMERIC_RADIX 171 grok_numeric_radix 172 grok_oct 173 gv_stashpvn 174 hv_fetchs 175 hv_stores 176 IN_LOCALE 177 IN_LOCALE_COMPILETIME 178 IN_LOCALE_RUNTIME 179 IN_PERL_COMPILETIME 180 INT2PTR 181 IS_NUMBER_GREATER_THAN_UV_MAX 182 IS_NUMBER_IN_UV 183 IS_NUMBER_INFINITY 184 IS_NUMBER_NAN 185 IS_NUMBER_NEG 186 IS_NUMBER_NOT_INT 187 IVdf 188 IVSIZE 189 IVTYPE 190 load_module 191 memEQ 192 memNE 193 MoveD 194 mPUSHi 195 mPUSHn 196 mPUSHp 197 mPUSHu 198 mXPUSHi 199 mXPUSHn 200 mXPUSHp 201 mXPUSHu 202 MY_CXT 203 MY_CXT_CLONE 204 MY_CXT_INIT 205 my_snprintf 206 my_strlcat 207 my_strlcpy 208 newCONSTSUB 209 newRV_inc 210 newRV_noinc 211 newSVpvn 212 newSVpvn_share 213 newSVpvs 214 newSVuv 215 Newx 216 Newxc 217 Newxz 218 NOOP 219 NUM2PTR 220 NVef 221 NVff 222 NVgf 223 NVTYPE 224 packWARN 225 PERL_ABS 226 PERL_BCDVERSION 227 PERL_GCC_BRACE_GROUPS_FORBIDDEN 228 PERL_HASH 229 PERL_INT_MAX 230 PERL_INT_MIN 231 PERL_LONG_MAX 232 PERL_LONG_MIN 233 PERL_MAGIC_arylen 234 PERL_MAGIC_backref 235 PERL_MAGIC_bm 236 PERL_MAGIC_collxfrm 237 PERL_MAGIC_dbfile 238 PERL_MAGIC_dbline 239 PERL_MAGIC_defelem 240 PERL_MAGIC_env 241 PERL_MAGIC_envelem 242 PERL_MAGIC_ext 243 PERL_MAGIC_fm 244 PERL_MAGIC_glob 245 PERL_MAGIC_isa 246 PERL_MAGIC_isaelem 247 PERL_MAGIC_mutex 248 PERL_MAGIC_nkeys 249 PERL_MAGIC_overload 250 PERL_MAGIC_overload_elem 251 PERL_MAGIC_overload_table 252 PERL_MAGIC_pos 253 PERL_MAGIC_qr 254 PERL_MAGIC_regdata 255 PERL_MAGIC_regdatum 256 PERL_MAGIC_regex_global 257 PERL_MAGIC_shared 258 PERL_MAGIC_shared_scalar 259 PERL_MAGIC_sig 260 PERL_MAGIC_sigelem 261 PERL_MAGIC_substr 262 PERL_MAGIC_sv 263 PERL_MAGIC_taint 264 PERL_MAGIC_tied 265 PERL_MAGIC_tiedelem 266 PERL_MAGIC_tiedscalar 267 PERL_MAGIC_utf8 268 PERL_MAGIC_uvar 269 PERL_MAGIC_uvar_elem 270 PERL_MAGIC_vec 271 PERL_MAGIC_vstring 272 PERL_QUAD_MAX 273 PERL_QUAD_MIN 274 PERL_REVISION 275 PERL_SCAN_ALLOW_UNDERSCORES 276 PERL_SCAN_DISALLOW_PREFIX 277 PERL_SCAN_GREATER_THAN_UV_MAX 278 PERL_SCAN_SILENT_ILLDIGIT 279 PERL_SHORT_MAX 280 PERL_SHORT_MIN 281 PERL_SIGNALS_UNSAFE_FLAG 282 PERL_SUBVERSION 283 PERL_UCHAR_MAX 284 PERL_UCHAR_MIN 285 PERL_UINT_MAX 286 PERL_UINT_MIN 287 PERL_ULONG_MAX 288 PERL_ULONG_MIN 289 PERL_UNUSED_ARG 290 PERL_UNUSED_CONTEXT 291 PERL_UNUSED_DECL 292 PERL_UNUSED_VAR 293 PERL_UQUAD_MAX 294 PERL_UQUAD_MIN 295 PERL_USE_GCC_BRACE_GROUPS 296 PERL_USHORT_MAX 297 PERL_USHORT_MIN 298 PERL_VERSION 299 Perl_warner 300 Perl_warner_nocontext 301 PL_compiling 302 PL_copline 303 PL_curcop 304 PL_curstash 305 PL_DBsignal 306 PL_DBsingle 307 PL_DBsub 308 PL_DBtrace 309 PL_debstash 310 PL_defgv 311 PL_diehook 312 PL_dirty 313 PL_dowarn 314 PL_errgv 315 PL_expect 316 PL_hexdigit 317 PL_hints 318 PL_laststatval 319 PL_na 320 PL_no_modify 321 PL_perl_destruct_level 322 PL_perldb 323 PL_ppaddr 324 PL_rsfp 325 PL_rsfp_filters 326 PL_signals 327 PL_stack_base 328 PL_stack_sp 329 PL_statcache 330 PL_stdingv 331 PL_Sv 332 PL_sv_arenaroot 333 PL_sv_no 334 PL_sv_undef 335 PL_sv_yes 336 PL_tainted 337 PL_tainting 338 pMY_CXT 339 pMY_CXT_ 340 Poison 341 PoisonFree 342 PoisonNew 343 PoisonWith 344 pTHX 345 pTHX_ 346 PTR2IV 347 PTR2NV 348 PTR2ul 349 PTR2UV 350 PTRV 351 PUSHmortal 352 PUSHu 353 SAVE_DEFSV 354 START_EXTERN_C 355 START_MY_CXT 356 STMT_END 357 STMT_START 358 STR_WITH_LEN 359 sv_2pv_flags 360 sv_2pv_nolen 361 sv_2pvbyte 362 sv_2pvbyte_nolen 363 sv_2uv 364 sv_catpv_mg 365 sv_catpvf_mg 366 sv_catpvf_mg_nocontext 367 sv_catpvn_mg 368 sv_catpvn_nomg 369 sv_catpvs 370 sv_catsv_mg 371 sv_catsv_nomg 372 SV_CONST_RETURN 373 SV_COW_DROP_PV 374 SV_COW_SHARED_HASH_KEYS 375 SV_GMAGIC 376 SV_HAS_TRAILING_NUL 377 SV_IMMEDIATE_UNREF 378 sv_magic_portable 379 SV_MUTABLE_RETURN 380 SV_NOSTEAL 381 sv_pvn_force_flags 382 sv_pvn_nomg 383 sv_setiv_mg 384 sv_setnv_mg 385 sv_setpv_mg 386 sv_setpvf_mg 387 sv_setpvf_mg_nocontext 388 sv_setpvn_mg 389 sv_setpvs 390 sv_setsv_mg 391 sv_setsv_nomg 392 sv_setuv 393 sv_setuv_mg 394 SV_SMAGIC 395 sv_usepvn_mg 396 SV_UTF8_NO_ENCODING 397 sv_uv 398 sv_vcatpvf 399 sv_vcatpvf_mg 400 sv_vsetpvf 401 sv_vsetpvf_mg 402 SVf 403 SvGETMAGIC 404 SvIV_nomg 405 SvMAGIC_set 406 SvPV_const 407 SvPV_flags 408 SvPV_flags_const 409 SvPV_flags_const_nolen 410 SvPV_flags_mutable 411 SvPV_force 412 SvPV_force_flags 413 SvPV_force_flags_mutable 414 SvPV_force_flags_nolen 415 SvPV_force_mutable 416 SvPV_force_nolen 417 SvPV_force_nomg 418 SvPV_force_nomg_nolen 419 SvPV_mutable 420 SvPV_nolen 421 SvPV_nolen_const 422 SvPV_nomg 423 SvPV_nomg_const 424 SvPV_nomg_const_nolen 425 SvPVbyte 426 SvPVX_const 427 SvPVX_mutable 428 SvREFCNT_inc 429 SvREFCNT_inc_NN 430 SvREFCNT_inc_simple 431 SvREFCNT_inc_simple_NN 432 SvREFCNT_inc_simple_void 433 SvREFCNT_inc_simple_void_NN 434 SvREFCNT_inc_void 435 SvREFCNT_inc_void_NN 436 SvRV_set 437 SvSHARED_HASH 438 SvSTASH_set 439 SvUOK 440 SvUV 441 SvUV_nomg 442 SvUV_set 443 SvUVX 444 SvUVx 445 SvUVXx 446 SvVSTRING_mg 447 UNDERBAR 448 UTF8_MAXBYTES 449 UVof 450 UVSIZE 451 UVTYPE 452 UVuf 453 UVXf 454 UVxf 455 vload_module 456 vnewSVpvf 457 WARN_ALL 458 WARN_AMBIGUOUS 459 WARN_ASSERTIONS 460 WARN_BAREWORD 461 WARN_CLOSED 462 WARN_CLOSURE 463 WARN_DEBUGGING 464 WARN_DEPRECATED 465 WARN_DIGIT 466 WARN_EXEC 467 WARN_EXITING 468 WARN_GLOB 469 WARN_INPLACE 470 WARN_INTERNAL 471 WARN_IO 472 WARN_LAYER 473 WARN_MALLOC 474 WARN_MISC 475 WARN_NEWLINE 476 WARN_NUMERIC 477 WARN_ONCE 478 WARN_OVERFLOW 479 WARN_PACK 480 WARN_PARENTHESIS 481 WARN_PIPE 482 WARN_PORTABLE 483 WARN_PRECEDENCE 484 WARN_PRINTF 485 WARN_PROTOTYPE 486 WARN_QW 487 WARN_RECURSION 488 WARN_REDEFINE 489 WARN_REGEXP 490 WARN_RESERVED 491 WARN_SEMICOLON 492 WARN_SEVERE 493 WARN_SIGNAL 494 WARN_SUBSTR 495 WARN_SYNTAX 496 WARN_TAINT 497 WARN_THREADS 498 WARN_UNINITIALIZED 499 WARN_UNOPENED 500 WARN_UNPACK 501 WARN_UNTIE 502 WARN_UTF8 503 WARN_VOID 504 warner 505 XCPT_CATCH 506 XCPT_RETHROW 507 XCPT_TRY_END 508 XCPT_TRY_START 509 XPUSHmortal 510 XPUSHu 511 XSprePUSH 512 XSRETURN 513 XSRETURN_UV 514 XST_mUV 515 ZeroD 516 517 =head2 Perl API not supported by ppport.h 518 519 There is still a big part of the API not supported by F<ppport.h>. 520 Either because it doesn't make sense to back-port that part of the API, 521 or simply because it hasn't been implemented yet. Patches welcome! 522 523 Here's a list of the currently unsupported API, and also the version of 524 Perl below which it is unsupported: 525 526 =over 4 527 528 =item perl 5.9.5 529 530 MULTICALL 531 POP_MULTICALL 532 PUSH_MULTICALL 533 Perl_signbit 534 SvRX 535 SvRXOK 536 av_create_and_push 537 av_create_and_unshift_one 538 get_cvn_flags 539 gv_fetchfile_flags 540 hv_assert 541 mro_get_linear_isa 542 mro_get_linear_isa_c3 543 mro_get_linear_isa_dfs 544 mro_method_changed_in 545 my_dirfd 546 newSV_type 547 pad_sv 548 pregcomp 549 ptr_table_clear 550 ptr_table_fetch 551 ptr_table_free 552 ptr_table_new 553 ptr_table_split 554 ptr_table_store 555 re_compile 556 re_intuit_start 557 reg_named_buff_all 558 reg_named_buff_exists 559 reg_named_buff_fetch 560 reg_named_buff_firstkey 561 reg_named_buff_nextkey 562 reg_named_buff_scalar 563 reg_stringify 564 regfree_internal 565 savesharedpvn 566 scan_vstring 567 stashpv_hvname_match 568 upg_version 569 570 =item perl 5.9.4 571 572 PerlIO_context_layers 573 gv_name_set 574 my_vsnprintf 575 newXS_flags 576 pv_escape 577 pv_pretty 578 regclass_swash 579 sv_does 580 sv_usepvn_flags 581 582 =item perl 5.9.3 583 584 av_arylen_p 585 ckwarn 586 ckwarn_d 587 csighandler 588 dMULTICALL 589 doref 590 gv_const_sv 591 gv_stashpvs 592 hv_eiter_p 593 hv_eiter_set 594 hv_name_set 595 hv_placeholders_get 596 hv_placeholders_p 597 hv_placeholders_set 598 hv_riter_p 599 hv_riter_set 600 is_utf8_string_loclen 601 my_sprintf 602 newGIVENOP 603 newSVhek 604 newSVpvs_share 605 newWHENOP 606 newWHILEOP 607 ref 608 savepvs 609 sortsv_flags 610 vverify 611 612 =item perl 5.9.2 613 614 SvPVbyte_force 615 find_rundefsvoffset 616 gv_fetchpvn_flags 617 gv_fetchsv 618 op_refcnt_lock 619 op_refcnt_unlock 620 savesvpv 621 vnormal 622 623 =item perl 5.9.1 624 625 hv_clear_placeholders 626 hv_scalar 627 scan_version 628 sv_2iv_flags 629 sv_2uv_flags 630 631 =item perl 5.9.0 632 633 new_version 634 save_set_svflags 635 vcmp 636 vnumify 637 vstringify 638 639 =item perl 5.8.3 640 641 SvIsCOW 642 SvIsCOW_shared_hash 643 644 =item perl 5.8.1 645 646 SvVOK 647 doing_taint 648 find_runcv 649 is_utf8_string_loc 650 packlist 651 save_bool 652 savestack_grow_cnt 653 seed 654 sv_cat_decode 655 sv_compile_2op 656 sv_setpviv 657 sv_setpviv_mg 658 unpackstring 659 660 =item perl 5.8.0 661 662 hv_iternext_flags 663 hv_store_flags 664 is_utf8_idcont 665 nothreadhook 666 667 =item perl 5.7.3 668 669 PerlIO_clearerr 670 PerlIO_close 671 PerlIO_eof 672 PerlIO_error 673 PerlIO_fileno 674 PerlIO_fill 675 PerlIO_flush 676 PerlIO_get_base 677 PerlIO_get_bufsiz 678 PerlIO_get_cnt 679 PerlIO_get_ptr 680 PerlIO_read 681 PerlIO_seek 682 PerlIO_set_cnt 683 PerlIO_set_ptrcnt 684 PerlIO_setlinebuf 685 PerlIO_stderr 686 PerlIO_stdin 687 PerlIO_stdout 688 PerlIO_tell 689 PerlIO_unread 690 PerlIO_write 691 SvLOCK 692 SvSHARE 693 SvUNLOCK 694 atfork_lock 695 atfork_unlock 696 custom_op_desc 697 custom_op_name 698 deb 699 debstack 700 debstackptrs 701 gv_fetchmeth_autoload 702 ibcmp_utf8 703 my_fork 704 my_socketpair 705 pack_cat 706 perl_destruct 707 pv_uni_display 708 save_shared_pvref 709 savesharedpv 710 sortsv 711 sv_copypv 712 sv_magicext 713 sv_nolocking 714 sv_nosharing 715 sv_recode_to_utf8 716 sv_uni_display 717 to_uni_fold 718 to_uni_lower 719 to_uni_title 720 to_uni_upper 721 to_utf8_case 722 to_utf8_fold 723 to_utf8_lower 724 to_utf8_title 725 to_utf8_upper 726 unpack_str 727 uvchr_to_utf8_flags 728 uvuni_to_utf8_flags 729 vdeb 730 731 =item perl 5.7.2 732 733 calloc 734 getcwd_sv 735 init_tm 736 malloc 737 mfree 738 mini_mktime 739 my_atof2 740 my_strftime 741 op_null 742 realloc 743 sv_catpvn_flags 744 sv_catsv_flags 745 sv_setsv_flags 746 sv_utf8_upgrade_flags 747 swash_fetch 748 749 =item perl 5.7.1 750 751 POPpbytex 752 bytes_from_utf8 753 despatch_signals 754 do_openn 755 gv_handler 756 is_lvalue_sub 757 my_popen_list 758 save_mortalizesv 759 save_padsv 760 scan_num 761 sv_force_normal_flags 762 sv_setref_uv 763 sv_unref_flags 764 sv_utf8_upgrade 765 utf8_length 766 utf8_to_uvchr 767 utf8_to_uvuni 768 utf8n_to_uvuni 769 uvuni_to_utf8 770 771 =item perl 5.6.1 772 773 SvGAMAGIC 774 apply_attrs_string 775 bytes_to_utf8 776 gv_efullname4 777 gv_fullname4 778 is_utf8_string 779 save_generic_pvref 780 utf16_to_utf8 781 utf16_to_utf8_reversed 782 utf8_to_bytes 783 784 =item perl 5.6.0 785 786 SvIOK_UV 787 SvIOK_notUV 788 SvIOK_only_UV 789 SvPOK_only_UTF8 790 SvPVbyte_nolen 791 SvPVbytex 792 SvPVbytex_force 793 SvPVutf8 794 SvPVutf8_force 795 SvPVutf8_nolen 796 SvPVutf8x 797 SvPVutf8x_force 798 SvUOK 799 SvUTF8 800 SvUTF8_off 801 SvUTF8_on 802 av_delete 803 av_exists 804 call_atexit 805 cast_i32 806 cast_iv 807 cast_ulong 808 cast_uv 809 do_gv_dump 810 do_gvgv_dump 811 do_hv_dump 812 do_magic_dump 813 do_op_dump 814 do_open9 815 do_pmop_dump 816 do_sv_dump 817 dump_all 818 dump_eval 819 dump_form 820 dump_indent 821 dump_packsubs 822 dump_sub 823 dump_vindent 824 get_context 825 get_ppaddr 826 gv_dump 827 init_i18nl10n 828 init_i18nl14n 829 is_uni_alnum 830 is_uni_alnum_lc 831 is_uni_alnumc 832 is_uni_alnumc_lc 833 is_uni_alpha 834 is_uni_alpha_lc 835 is_uni_ascii 836 is_uni_ascii_lc 837 is_uni_cntrl 838 is_uni_cntrl_lc 839 is_uni_digit 840 is_uni_digit_lc 841 is_uni_graph 842 is_uni_graph_lc 843 is_uni_idfirst 844 is_uni_idfirst_lc 845 is_uni_lower 846 is_uni_lower_lc 847 is_uni_print 848 is_uni_print_lc 849 is_uni_punct 850 is_uni_punct_lc 851 is_uni_space 852 is_uni_space_lc 853 is_uni_upper 854 is_uni_upper_lc 855 is_uni_xdigit 856 is_uni_xdigit_lc 857 is_utf8_alnum 858 is_utf8_alnumc 859 is_utf8_alpha 860 is_utf8_ascii 861 is_utf8_char 862 is_utf8_cntrl 863 is_utf8_digit 864 is_utf8_graph 865 is_utf8_idfirst 866 is_utf8_lower 867 is_utf8_mark 868 is_utf8_print 869 is_utf8_punct 870 is_utf8_space 871 is_utf8_upper 872 is_utf8_xdigit 873 magic_dump 874 mess 875 my_atof 876 my_fflush_all 877 newANONATTRSUB 878 newATTRSUB 879 newXS 880 newXSproto 881 new_collate 882 new_ctype 883 new_numeric 884 op_dump 885 perl_parse 886 pmop_dump 887 pv_display 888 re_intuit_string 889 reginitcolors 890 require_pv 891 safesyscalloc 892 safesysfree 893 safesysmalloc 894 safesysrealloc 895 save_I8 896 save_alloc 897 save_destructor 898 save_destructor_x 899 save_re_context 900 save_vptr 901 scan_bin 902 set_context 903 set_numeric_local 904 set_numeric_radix 905 set_numeric_standard 906 str_to_version 907 sv_2pvutf8 908 sv_2pvutf8_nolen 909 sv_force_normal 910 sv_len_utf8 911 sv_pos_b2u 912 sv_pos_u2b 913 sv_pv 914 sv_pvbyte 915 sv_pvbyten 916 sv_pvbyten_force 917 sv_pvutf8 918 sv_pvutf8n 919 sv_pvutf8n_force 920 sv_rvweaken 921 sv_utf8_decode 922 sv_utf8_downgrade 923 sv_utf8_encode 924 swash_init 925 tmps_grow 926 to_uni_lower_lc 927 to_uni_title_lc 928 to_uni_upper_lc 929 utf8_distance 930 utf8_hop 931 vcroak 932 vform 933 vmess 934 vwarn 935 vwarner 936 937 =item perl 5.005_03 938 939 POPpx 940 get_vtbl 941 save_generic_svref 942 943 =item perl 5.005 944 945 PL_modglobal 946 cx_dump 947 debop 948 debprofdump 949 fbm_compile 950 fbm_instr 951 get_op_descs 952 get_op_names 953 init_stacks 954 mg_length 955 mg_size 956 newHVhv 957 new_stackinfo 958 regdump 959 regexec_flags 960 regnext 961 runops_debug 962 runops_standard 963 save_hints 964 save_iv 965 screaminstr 966 sv_iv 967 sv_nv 968 sv_peek 969 sv_true 970 971 =item perl 5.004_05 972 973 do_binmode 974 save_aelem 975 save_helem 976 977 =item perl 5.004 978 979 GIMME_V 980 G_VOID 981 HEf_SVKEY 982 HeHASH 983 HeKEY 984 HeKLEN 985 HePV 986 HeSVKEY 987 HeSVKEY_force 988 HeSVKEY_set 989 HeVAL 990 SvSetMagicSV 991 SvSetMagicSV_nosteal 992 SvSetSV_nosteal 993 SvTAINTED 994 SvTAINTED_off 995 SvTAINTED_on 996 block_gimme 997 call_list 998 cv_const_sv 999 delimcpy 1000 do_open 1001 form 1002 gv_autoload4 1003 gv_efullname3 1004 gv_fetchmethod_autoload 1005 gv_fullname3 1006 hv_delayfree_ent 1007 hv_delete_ent 1008 hv_exists_ent 1009 hv_fetch_ent 1010 hv_free_ent 1011 hv_iterkeysv 1012 hv_ksplit 1013 hv_store_ent 1014 ibcmp_locale 1015 my_failure_exit 1016 my_memcmp 1017 my_pclose 1018 my_popen 1019 newSVpvf 1020 rsignal 1021 rsignal_state 1022 save_I16 1023 save_gp 1024 share_hek 1025 start_subparse 1026 sv_catpvf 1027 sv_catpvf_mg 1028 sv_cmp_locale 1029 sv_derived_from 1030 sv_gets 1031 sv_magic_portable 1032 sv_setpvf 1033 sv_setpvf_mg 1034 sv_taint 1035 sv_tainted 1036 sv_untaint 1037 sv_vcatpvf 1038 sv_vcatpvf_mg 1039 sv_vcatpvfn 1040 sv_vsetpvf 1041 sv_vsetpvf_mg 1042 sv_vsetpvfn 1043 unsharepvn 1044 vnewSVpvf 1045 warner 1046 1047 =back 1048 1049 =head1 BUGS 1050 1051 If you find any bugs, C<Devel::PPPort> doesn't seem to build on your 1052 system or any of its tests fail, please use the CPAN Request Tracker 1053 at L<http://rt.cpan.org/> to create a ticket for the module. 1054 1055 =head1 AUTHORS 1056 1057 =over 2 1058 1059 =item * 1060 1061 Version 1.x of Devel::PPPort was written by Kenneth Albanowski. 1062 1063 =item * 1064 1065 Version 2.x was ported to the Perl core by Paul Marquess. 1066 1067 =item * 1068 1069 Version 3.x was ported back to CPAN by Marcus Holland-Moritz. 1070 1071 =back 1072 1073 =head1 COPYRIGHT 1074 1075 Version 3.x, Copyright (C) 2004-2007, Marcus Holland-Moritz. 1076 1077 Version 2.x, Copyright (C) 2001, Paul Marquess. 1078 1079 Version 1.x, Copyright (C) 1999, Kenneth Albanowski. 1080 1081 This program is free software; you can redistribute it and/or 1082 modify it under the same terms as Perl itself. 1083 1084 =head1 SEE ALSO 1085 1086 See L<h2xs>, L<ppport.h>. 1087 1088 =cut 1089 1090 package Devel::PPPort; 1091 1092 use strict; 1093 use vars qw($VERSION $data); 1094 1095 $VERSION = do { my @r = '$Snapshot: /Devel-PPPort/3.13 $' =~ /(\d+\.\d+(?:_\d+)?)/; @r ? $r[0] : '9.99' }; 1096 1097 sub _init_data 1098 { 1099 $data = do { local $/; <DATA> }; 1100 my $pkg = 'Devel::PPPort'; 1101 $data =~ s/__PERL_VERSION__/$]/g; 1102 $data =~ s/__VERSION__/$VERSION/g; 1103 $data =~ s/__PKG__/$pkg/g; 1104 $data =~ s/^\|>//gm; 1105 } 1106 1107 sub WriteFile 1108 { 1109 my $file = shift || 'ppport.h'; 1110 defined $data or _init_data(); 1111 my $copy = $data; 1112 $copy =~ s/\bppport\.h\b/$file/g; 1113 1114 open F, ">$file" or return undef; 1115 print F $copy; 1116 close F; 1117 1118 return 1; 1119 } 1120 1121 1; 1122 1123 __DATA__ 1124 #if 0 1125 <<'SKIP'; 1126 #endif 1127 /* 1128 ---------------------------------------------------------------------- 1129 1130 ppport.h -- Perl/Pollution/Portability Version __VERSION__ 1131 1132 Automatically created by __PKG__ running under perl __PERL_VERSION__. 1133 1134 Do NOT edit this file directly! -- Edit PPPort_pm.PL and the 1135 includes in parts/inc/ instead. 1136 1137 Use 'perldoc ppport.h' to view the documentation below. 1138 1139 ---------------------------------------------------------------------- 1140 1141 SKIP 1142 1143 |>=pod 1144 |> 1145 |>=head1 NAME 1146 |> 1147 |>ppport.h - Perl/Pollution/Portability version __VERSION__ 1148 |> 1149 |>=head1 SYNOPSIS 1150 |> 1151 |> perl ppport.h [options] [source files] 1152 |> 1153 |> Searches current directory for files if no [source files] are given 1154 |> 1155 |> --help show short help 1156 |> 1157 |> --version show version 1158 |> 1159 |> --patch=file write one patch file with changes 1160 |> --copy=suffix write changed copies with suffix 1161 |> --diff=program use diff program and options 1162 |> 1163 |> --compat-version=version provide compatibility with Perl version 1164 |> --cplusplus accept C++ comments 1165 |> 1166 |> --quiet don't output anything except fatal errors 1167 |> --nodiag don't show diagnostics 1168 |> --nohints don't show hints 1169 |> --nochanges don't suggest changes 1170 |> --nofilter don't filter input files 1171 |> 1172 |> --strip strip all script and doc functionality from 1173 |> ppport.h 1174 |> 1175 |> --list-provided list provided API 1176 |> --list-unsupported list unsupported API 1177 |> --api-info=name show Perl API portability information 1178 |> 1179 |>=head1 COMPATIBILITY 1180 |> 1181 |>This version of F<ppport.h> is designed to support operation with Perl 1182 |>installations back to 5.003, and has been tested up to 5.10.0. 1183 |> 1184 |>=head1 OPTIONS 1185 |> 1186 |>=head2 --help 1187 |> 1188 |>Display a brief usage summary. 1189 |> 1190 |>=head2 --version 1191 |> 1192 |>Display the version of F<ppport.h>. 1193 |> 1194 |>=head2 --patch=I<file> 1195 |> 1196 |>If this option is given, a single patch file will be created if 1197 |>any changes are suggested. This requires a working diff program 1198 |>to be installed on your system. 1199 |> 1200 |>=head2 --copy=I<suffix> 1201 |> 1202 |>If this option is given, a copy of each file will be saved with 1203 |>the given suffix that contains the suggested changes. This does 1204 |>not require any external programs. Note that this does not 1205 |>automagially add a dot between the original filename and the 1206 |>suffix. If you want the dot, you have to include it in the option 1207 |>argument. 1208 |> 1209 |>If neither C<--patch> or C<--copy> are given, the default is to 1210 |>simply print the diffs for each file. This requires either 1211 |>C<Text::Diff> or a C<diff> program to be installed. 1212 |> 1213 |>=head2 --diff=I<program> 1214 |> 1215 |>Manually set the diff program and options to use. The default 1216 |>is to use C<Text::Diff>, when installed, and output unified 1217 |>context diffs. 1218 |> 1219 |>=head2 --compat-version=I<version> 1220 |> 1221 |>Tell F<ppport.h> to check for compatibility with the given 1222 |>Perl version. The default is to check for compatibility with Perl 1223 |>version 5.003. You can use this option to reduce the output 1224 |>of F<ppport.h> if you intend to be backward compatible only 1225 |>down to a certain Perl version. 1226 |> 1227 |>=head2 --cplusplus 1228 |> 1229 |>Usually, F<ppport.h> will detect C++ style comments and 1230 |>replace them with C style comments for portability reasons. 1231 |>Using this option instructs F<ppport.h> to leave C++ 1232 |>comments untouched. 1233 |> 1234 |>=head2 --quiet 1235 |> 1236 |>Be quiet. Don't print anything except fatal errors. 1237 |> 1238 |>=head2 --nodiag 1239 |> 1240 |>Don't output any diagnostic messages. Only portability 1241 |>alerts will be printed. 1242 |> 1243 |>=head2 --nohints 1244 |> 1245 |>Don't output any hints. Hints often contain useful portability 1246 |>notes. Warnings will still be displayed. 1247 |> 1248 |>=head2 --nochanges 1249 |> 1250 |>Don't suggest any changes. Only give diagnostic output and hints 1251 |>unless these are also deactivated. 1252 |> 1253 |>=head2 --nofilter 1254 |> 1255 |>Don't filter the list of input files. By default, files not looking 1256 |>like source code (i.e. not *.xs, *.c, *.cc, *.cpp or *.h) are skipped. 1257 |> 1258 |>=head2 --strip 1259 |> 1260 |>Strip all script and documentation functionality from F<ppport.h>. 1261 |>This reduces the size of F<ppport.h> dramatically and may be useful 1262 |>if you want to include F<ppport.h> in smaller modules without 1263 |>increasing their distribution size too much. 1264 |> 1265 |>The stripped F<ppport.h> will have a C<--unstrip> option that allows 1266 |>you to undo the stripping, but only if an appropriate C<Devel::PPPort> 1267 |>module is installed. 1268 |> 1269 |>=head2 --list-provided 1270 |> 1271 |>Lists the API elements for which compatibility is provided by 1272 |>F<ppport.h>. Also lists if it must be explicitly requested, 1273 |>if it has dependencies, and if there are hints or warnings for it. 1274 |> 1275 |>=head2 --list-unsupported 1276 |> 1277 |>Lists the API elements that are known not to be supported by 1278 |>F<ppport.h> and below which version of Perl they probably 1279 |>won't be available or work. 1280 |> 1281 |>=head2 --api-info=I<name> 1282 |> 1283 |>Show portability information for API elements matching I<name>. 1284 |>If I<name> is surrounded by slashes, it is interpreted as a regular 1285 |>expression. 1286 |> 1287 |>=head1 DESCRIPTION 1288 |> 1289 |>In order for a Perl extension (XS) module to be as portable as possible 1290 |>across differing versions of Perl itself, certain steps need to be taken. 1291 |> 1292 |>=over 4 1293 |> 1294 |>=item * 1295 |> 1296 |>Including this header is the first major one. This alone will give you 1297 |>access to a large part of the Perl API that hasn't been available in 1298 |>earlier Perl releases. Use 1299 |> 1300 |> perl ppport.h --list-provided 1301 |> 1302 |>to see which API elements are provided by ppport.h. 1303 |> 1304 |>=item * 1305 |> 1306 |>You should avoid using deprecated parts of the API. For example, using 1307 |>global Perl variables without the C<PL_> prefix is deprecated. Also, 1308 |>some API functions used to have a C<perl_> prefix. Using this form is 1309 |>also deprecated. You can safely use the supported API, as F<ppport.h> 1310 |>will provide wrappers for older Perl versions. 1311 |> 1312 |>=item * 1313 |> 1314 |>If you use one of a few functions or variables that were not present in 1315 |>earlier versions of Perl, and that can't be provided using a macro, you 1316 |>have to explicitly request support for these functions by adding one or 1317 |>more C<#define>s in your source code before the inclusion of F<ppport.h>. 1318 |> 1319 |>These functions or variables will be marked C<explicit> in the list shown 1320 |>by C<--list-provided>. 1321 |> 1322 |>Depending on whether you module has a single or multiple files that 1323 |>use such functions or variables, you want either C<static> or global 1324 |>variants. 1325 |> 1326 |>For a C<static> function or variable (used only in a single source 1327 |>file), use: 1328 |> 1329 |> #define NEED_function 1330 |> #define NEED_variable 1331 |> 1332 |>For a global function or variable (used in multiple source files), 1333 |>use: 1334 |> 1335 |> #define NEED_function_GLOBAL 1336 |> #define NEED_variable_GLOBAL 1337 |> 1338 |>Note that you mustn't have more than one global request for the 1339 |>same function or variable in your project. 1340 |> 1341 |> Function / Variable Static Request Global Request 1342 |> ----------------------------------------------------------------------------------------- 1343 |> PL_signals NEED_PL_signals NEED_PL_signals_GLOBAL 1344 |> eval_pv() NEED_eval_pv NEED_eval_pv_GLOBAL 1345 |> grok_bin() NEED_grok_bin NEED_grok_bin_GLOBAL 1346 |> grok_hex() NEED_grok_hex NEED_grok_hex_GLOBAL 1347 |> grok_number() NEED_grok_number NEED_grok_number_GLOBAL 1348 |> grok_numeric_radix() NEED_grok_numeric_radix NEED_grok_numeric_radix_GLOBAL 1349 |> grok_oct() NEED_grok_oct NEED_grok_oct_GLOBAL 1350 |> load_module() NEED_load_module NEED_load_module_GLOBAL 1351 |> my_snprintf() NEED_my_snprintf NEED_my_snprintf_GLOBAL 1352 |> my_strlcat() NEED_my_strlcat NEED_my_strlcat_GLOBAL 1353 |> my_strlcpy() NEED_my_strlcpy NEED_my_strlcpy_GLOBAL 1354 |> newCONSTSUB() NEED_newCONSTSUB NEED_newCONSTSUB_GLOBAL 1355 |> newRV_noinc() NEED_newRV_noinc NEED_newRV_noinc_GLOBAL 1356 |> newSVpvn_share() NEED_newSVpvn_share NEED_newSVpvn_share_GLOBAL 1357 |> sv_2pv_flags() NEED_sv_2pv_flags NEED_sv_2pv_flags_GLOBAL 1358 |> sv_2pvbyte() NEED_sv_2pvbyte NEED_sv_2pvbyte_GLOBAL 1359 |> sv_catpvf_mg() NEED_sv_catpvf_mg NEED_sv_catpvf_mg_GLOBAL 1360 |> sv_catpvf_mg_nocontext() NEED_sv_catpvf_mg_nocontext NEED_sv_catpvf_mg_nocontext_GLOBAL 1361 |> sv_pvn_force_flags() NEED_sv_pvn_force_flags NEED_sv_pvn_force_flags_GLOBAL 1362 |> sv_setpvf_mg() NEED_sv_setpvf_mg NEED_sv_setpvf_mg_GLOBAL 1363 |> sv_setpvf_mg_nocontext() NEED_sv_setpvf_mg_nocontext NEED_sv_setpvf_mg_nocontext_GLOBAL 1364 |> vload_module() NEED_vload_module NEED_vload_module_GLOBAL 1365 |> vnewSVpvf() NEED_vnewSVpvf NEED_vnewSVpvf_GLOBAL 1366 |> warner() NEED_warner NEED_warner_GLOBAL 1367 |> 1368 |>To avoid namespace conflicts, you can change the namespace of the 1369 |>explicitly exported functions / variables using the C<DPPP_NAMESPACE> 1370 |>macro. Just C<#define> the macro before including C<ppport.h>: 1371 |> 1372 |> #define DPPP_NAMESPACE MyOwnNamespace_ 1373 |> #include "ppport.h" 1374 |> 1375 |>The default namespace is C<DPPP_>. 1376 |> 1377 |>=back 1378 |> 1379 |>The good thing is that most of the above can be checked by running 1380 |>F<ppport.h> on your source code. See the next section for 1381 |>details. 1382 |> 1383 |>=head1 EXAMPLES 1384 |> 1385 |>To verify whether F<ppport.h> is needed for your module, whether you 1386 |>should make any changes to your code, and whether any special defines 1387 |>should be used, F<ppport.h> can be run as a Perl script to check your 1388 |>source code. Simply say: 1389 |> 1390 |> perl ppport.h 1391 |> 1392 |>The result will usually be a list of patches suggesting changes 1393 |>that should at least be acceptable, if not necessarily the most 1394 |>efficient solution, or a fix for all possible problems. 1395 |> 1396 |>If you know that your XS module uses features only available in 1397 |>newer Perl releases, if you're aware that it uses C++ comments, 1398 |>and if you want all suggestions as a single patch file, you could 1399 |>use something like this: 1400 |> 1401 |> perl ppport.h --compat-version=5.6.0 --cplusplus --patch=test.diff 1402 |> 1403 |>If you only want your code to be scanned without any suggestions 1404 |>for changes, use: 1405 |> 1406 |> perl ppport.h --nochanges 1407 |> 1408 |>You can specify a different C<diff> program or options, using 1409 |>the C<--diff> option: 1410 |> 1411 |> perl ppport.h --diff='diff -C 10' 1412 |> 1413 |>This would output context diffs with 10 lines of context. 1414 |> 1415 |>If you want to create patched copies of your files instead, use: 1416 |> 1417 |> perl ppport.h --copy=.new 1418 |> 1419 |>To display portability information for the C<newSVpvn> function, 1420 |>use: 1421 |> 1422 |> perl ppport.h --api-info=newSVpvn 1423 |> 1424 |>Since the argument to C<--api-info> can be a regular expression, 1425 |>you can use 1426 |> 1427 |> perl ppport.h --api-info=/_nomg$/ 1428 |> 1429 |>to display portability information for all C<_nomg> functions or 1430 |> 1431 |> perl ppport.h --api-info=/./ 1432 |> 1433 |>to display information for all known API elements. 1434 |> 1435 |>=head1 BUGS 1436 |> 1437 |>If this version of F<ppport.h> is causing failure during 1438 |>the compilation of this module, please check if newer versions 1439 |>of either this module or C<Devel::PPPort> are available on CPAN 1440 |>before sending a bug report. 1441 |> 1442 |>If F<ppport.h> was generated using the latest version of 1443 |>C<Devel::PPPort> and is causing failure of this module, please 1444 |>file a bug report using the CPAN Request Tracker at L<http://rt.cpan.org/>. 1445 |> 1446 |>Please include the following information: 1447 |> 1448 |>=over 4 1449 |> 1450 |>=item 1. 1451 |> 1452 |>The complete output from running "perl -V" 1453 |> 1454 |>=item 2. 1455 |> 1456 |>This file. 1457 |> 1458 |>=item 3. 1459 |> 1460 |>The name and version of the module you were trying to build. 1461 |> 1462 |>=item 4. 1463 |> 1464 |>A full log of the build that failed. 1465 |> 1466 |>=item 5. 1467 |> 1468 |>Any other information that you think could be relevant. 1469 |> 1470 |>=back 1471 |> 1472 |>For the latest version of this code, please get the C<Devel::PPPort> 1473 |>module from CPAN. 1474 |> 1475 |>=head1 COPYRIGHT 1476 |> 1477 |>Version 3.x, Copyright (c) 2004-2007, Marcus Holland-Moritz. 1478 |> 1479 |>Version 2.x, Copyright (C) 2001, Paul Marquess. 1480 |> 1481 |>Version 1.x, Copyright (C) 1999, Kenneth Albanowski. 1482 |> 1483 |>This program is free software; you can redistribute it and/or 1484 |>modify it under the same terms as Perl itself. 1485 |> 1486 |>=head1 SEE ALSO 1487 |> 1488 |>See L<Devel::PPPort>. 1489 |> 1490 |>=cut 1491 1492 use strict; 1493 1494 # Disable broken TRIE-optimization 1495 BEGIN { eval '${^RE_TRIE_MAXBUF} = -1' if $] >= 5.009004 && $] <= 5.009005 } 1496 1497 my $VERSION = __VERSION__; 1498 1499 my %opt = ( 1500 quiet => 0, 1501 diag => 1, 1502 hints => 1, 1503 changes => 1, 1504 cplusplus => 0, 1505 filter => 1, 1506 strip => 0, 1507 version => 0, 1508 ); 1509 1510 my($ppport) = $0 =~ /([\w.]+)$/; 1511 my $LF = '(?:\r\n|[\r\n])'; # line feed 1512 my $HS = "[ \t]"; # horizontal whitespace 1513 1514 # Never use C comments in this file! 1515 my $ccs = '/'.'*'; 1516 my $cce = '*'.'/'; 1517 my $rccs = quotemeta $ccs; 1518 my $rcce = quotemeta $cce; 1519 1520 eval { 1521 require Getopt::Long; 1522 Getopt::Long::GetOptions(\%opt, qw( 1523 help quiet diag! filter! hints! changes! cplusplus strip version 1524 patch=s copy=s diff=s compat-version=s 1525 list-provided list-unsupported api-info=s 1526 )) or usage(); 1527 }; 1528 1529 if ($@ and grep /^-/, @ARGV) { 1530 usage() if "@ARGV" =~ /^--?h(?:elp)?$/; 1531 die "Getopt::Long not found. Please don't use any options.\n"; 1532 } 1533 1534 if ($opt{version}) { 1535 print "This is $0 $VERSION.\n"; 1536 exit 0; 1537 } 1538 1539 usage() if $opt{help}; 1540 strip() if $opt{strip}; 1541 1542 if (exists $opt{'compat-version'}) { 1543 my($r,$v,$s) = eval { parse_version($opt{'compat-version'}) }; 1544 if ($@) { 1545 die "Invalid version number format: '$opt{'compat-version'}'\n"; 1546 } 1547 die "Only Perl 5 is supported\n" if $r != 5; 1548 die "Invalid version number: $opt{'compat-version'}\n" if $v >= 1000 || $s >= 1000; 1549 $opt{'compat-version'} = sprintf "%d.%03d%03d", $r, $v, $s; 1550 } 1551 else { 1552 $opt{'compat-version'} = 5; 1553 } 1554 1555 my %API = map { /^(\w+)\|([^|]*)\|([^|]*)\|(\w*)$/ 1556 ? ( $1 => { 1557 ($2 ? ( base => $2 ) : ()), 1558 ($3 ? ( todo => $3 ) : ()), 1559 (index($4, 'v') >= 0 ? ( varargs => 1 ) : ()), 1560 (index($4, 'p') >= 0 ? ( provided => 1 ) : ()), 1561 (index($4, 'n') >= 0 ? ( nothxarg => 1 ) : ()), 1562 } ) 1563 : die "invalid spec: $_" } qw( 1564 AvFILLp|5.004050||p 1565 AvFILL||| 1566 CLASS|||n 1567 CX_CURPAD_SAVE||| 1568 CX_CURPAD_SV||| 1569 CopFILEAV|5.006000||p 1570 CopFILEGV_set|5.006000||p 1571 CopFILEGV|5.006000||p 1572 CopFILESV|5.006000||p 1573 CopFILE_set|5.006000||p 1574 CopFILE|5.006000||p 1575 CopSTASHPV_set|5.006000||p 1576 CopSTASHPV|5.006000||p 1577 CopSTASH_eq|5.006000||p 1578 CopSTASH_set|5.006000||p 1579 CopSTASH|5.006000||p 1580 CopyD|5.009002||p 1581 Copy||| 1582 CvPADLIST||| 1583 CvSTASH||| 1584 CvWEAKOUTSIDE||| 1585 DEFSV|5.004050||p 1586 END_EXTERN_C|5.005000||p 1587 ENTER||| 1588 ERRSV|5.004050||p 1589 EXTEND||| 1590 EXTERN_C|5.005000||p 1591 F0convert|||n 1592 FREETMPS||| 1593 GIMME_V||5.004000|n 1594 GIMME|||n 1595 GROK_NUMERIC_RADIX|5.007002||p 1596 G_ARRAY||| 1597 G_DISCARD||| 1598 G_EVAL||| 1599 G_NOARGS||| 1600 G_SCALAR||| 1601 G_VOID||5.004000| 1602 GetVars||| 1603 GvSV||| 1604 Gv_AMupdate||| 1605 HEf_SVKEY||5.004000| 1606 HeHASH||5.004000| 1607 HeKEY||5.004000| 1608 HeKLEN||5.004000| 1609 HePV||5.004000| 1610 HeSVKEY_force||5.004000| 1611 HeSVKEY_set||5.004000| 1612 HeSVKEY||5.004000| 1613 HeVAL||5.004000| 1614 HvNAME||| 1615 INT2PTR|5.006000||p 1616 IN_LOCALE_COMPILETIME|5.007002||p 1617 IN_LOCALE_RUNTIME|5.007002||p 1618 IN_LOCALE|5.007002||p 1619 IN_PERL_COMPILETIME|5.008001||p 1620 IS_NUMBER_GREATER_THAN_UV_MAX|5.007002||p 1621 IS_NUMBER_INFINITY|5.007002||p 1622 IS_NUMBER_IN_UV|5.007002||p 1623 IS_NUMBER_NAN|5.007003||p 1624 IS_NUMBER_NEG|5.007002||p 1625 IS_NUMBER_NOT_INT|5.007002||p 1626 IVSIZE|5.006000||p 1627 IVTYPE|5.006000||p 1628 IVdf|5.006000||p 1629 LEAVE||| 1630 LVRET||| 1631 MARK||| 1632 MULTICALL||5.009005| 1633 MY_CXT_CLONE|5.009002||p 1634 MY_CXT_INIT|5.007003||p 1635 MY_CXT|5.007003||p 1636 MoveD|5.009002||p 1637 Move||| 1638 NOOP|5.005000||p 1639 NUM2PTR|5.006000||p 1640 NVTYPE|5.006000||p 1641 NVef|5.006001||p 1642 NVff|5.006001||p 1643 NVgf|5.006001||p 1644 Newxc|5.009003||p 1645 Newxz|5.009003||p 1646 Newx|5.009003||p 1647 Nullav||| 1648 Nullch||| 1649 Nullcv||| 1650 Nullhv||| 1651 Nullsv||| 1652 ORIGMARK||| 1653 PAD_BASE_SV||| 1654 PAD_CLONE_VARS||| 1655 PAD_COMPNAME_FLAGS||| 1656 PAD_COMPNAME_GEN_set||| 1657 PAD_COMPNAME_GEN||| 1658 PAD_COMPNAME_OURSTASH||| 1659 PAD_COMPNAME_PV||| 1660 PAD_COMPNAME_TYPE||| 1661 PAD_RESTORE_LOCAL||| 1662 PAD_SAVE_LOCAL||| 1663 PAD_SAVE_SETNULLPAD||| 1664 PAD_SETSV||| 1665 PAD_SET_CUR_NOSAVE||| 1666 PAD_SET_CUR||| 1667 PAD_SVl||| 1668 PAD_SV||| 1669 PERL_ABS|5.008001||p 1670 PERL_BCDVERSION|5.009005||p 1671 PERL_GCC_BRACE_GROUPS_FORBIDDEN|5.008001||p 1672 PERL_HASH|5.004000||p 1673 PERL_INT_MAX|5.004000||p 1674 PERL_INT_MIN|5.004000||p 1675 PERL_LONG_MAX|5.004000||p 1676 PERL_LONG_MIN|5.004000||p 1677 PERL_MAGIC_arylen|5.007002||p 1678 PERL_MAGIC_backref|5.007002||p 1679 PERL_MAGIC_bm|5.007002||p 1680 PERL_MAGIC_collxfrm|5.007002||p 1681 PERL_MAGIC_dbfile|5.007002||p 1682 PERL_MAGIC_dbline|5.007002||p 1683 PERL_MAGIC_defelem|5.007002||p 1684 PERL_MAGIC_envelem|5.007002||p 1685 PERL_MAGIC_env|5.007002||p 1686 PERL_MAGIC_ext|5.007002||p 1687 PERL_MAGIC_fm|5.007002||p 1688 PERL_MAGIC_glob|5.009005||p 1689 PERL_MAGIC_isaelem|5.007002||p 1690 PERL_MAGIC_isa|5.007002||p 1691 PERL_MAGIC_mutex|5.009005||p 1692 PERL_MAGIC_nkeys|5.007002||p 1693 PERL_MAGIC_overload_elem|5.007002||p 1694 PERL_MAGIC_overload_table|5.007002||p 1695 PERL_MAGIC_overload|5.007002||p 1696 PERL_MAGIC_pos|5.007002||p 1697 PERL_MAGIC_qr|5.007002||p 1698 PERL_MAGIC_regdata|5.007002||p 1699 PERL_MAGIC_regdatum|5.007002||p 1700 PERL_MAGIC_regex_global|5.007002||p 1701 PERL_MAGIC_shared_scalar|5.007003||p 1702 PERL_MAGIC_shared|5.007003||p 1703 PERL_MAGIC_sigelem|5.007002||p 1704 PERL_MAGIC_sig|5.007002||p 1705 PERL_MAGIC_substr|5.007002||p 1706 PERL_MAGIC_sv|5.007002||p 1707 PERL_MAGIC_taint|5.007002||p 1708 PERL_MAGIC_tiedelem|5.007002||p 1709 PERL_MAGIC_tiedscalar|5.007002||p 1710 PERL_MAGIC_tied|5.007002||p 1711 PERL_MAGIC_utf8|5.008001||p 1712 PERL_MAGIC_uvar_elem|5.007003||p 1713 PERL_MAGIC_uvar|5.007002||p 1714 PERL_MAGIC_vec|5.007002||p 1715 PERL_MAGIC_vstring|5.008001||p 1716 PERL_QUAD_MAX|5.004000||p 1717 PERL_QUAD_MIN|5.004000||p 1718 PERL_REVISION|5.006000||p 1719 PERL_SCAN_ALLOW_UNDERSCORES|5.007003||p 1720 PERL_SCAN_DISALLOW_PREFIX|5.007003||p 1721 PERL_SCAN_GREATER_THAN_UV_MAX|5.007003||p 1722 PERL_SCAN_SILENT_ILLDIGIT|5.008001||p 1723 PERL_SHORT_MAX|5.004000||p 1724 PERL_SHORT_MIN|5.004000||p 1725 PERL_SIGNALS_UNSAFE_FLAG|5.008001||p 1726 PERL_SUBVERSION|5.006000||p 1727 PERL_UCHAR_MAX|5.004000||p 1728 PERL_UCHAR_MIN|5.004000||p 1729 PERL_UINT_MAX|5.004000||p 1730 PERL_UINT_MIN|5.004000||p 1731 PERL_ULONG_MAX|5.004000||p 1732 PERL_ULONG_MIN|5.004000||p 1733 PERL_UNUSED_ARG|5.009003||p 1734 PERL_UNUSED_CONTEXT|5.009004||p 1735 PERL_UNUSED_DECL|5.007002||p 1736 PERL_UNUSED_VAR|5.007002||p 1737 PERL_UQUAD_MAX|5.004000||p 1738 PERL_UQUAD_MIN|5.004000||p 1739 PERL_USE_GCC_BRACE_GROUPS|5.009004||p 1740 PERL_USHORT_MAX|5.004000||p 1741 PERL_USHORT_MIN|5.004000||p 1742 PERL_VERSION|5.006000||p 1743 PL_DBsignal|5.005000||p 1744 PL_DBsingle|||pn 1745 PL_DBsub|||pn 1746 PL_DBtrace|||pn 1747 PL_Sv|5.005000||p 1748 PL_compiling|5.004050||p 1749 PL_copline|5.009005||p 1750 PL_curcop|5.004050||p 1751 PL_curstash|5.004050||p 1752 PL_debstash|5.004050||p 1753 PL_defgv|5.004050||p 1754 PL_diehook|5.004050||p 1755 PL_dirty|5.004050||p 1756 PL_dowarn|||pn 1757 PL_errgv|5.004050||p 1758 PL_expect|5.009005||p 1759 PL_hexdigit|5.005000||p 1760 PL_hints|5.005000||p 1761 PL_last_in_gv|||n 1762 PL_laststatval|5.005000||p 1763 PL_modglobal||5.005000|n 1764 PL_na|5.004050||pn 1765 PL_no_modify|5.006000||p 1766 PL_ofs_sv|||n 1767 PL_perl_destruct_level|5.004050||p 1768 PL_perldb|5.004050||p 1769 PL_ppaddr|5.006000||p 1770 PL_rsfp_filters|5.004050||p 1771 PL_rsfp|5.004050||p 1772 PL_rs|||n 1773 PL_signals|5.008001||p 1774 PL_stack_base|5.004050||p 1775 PL_stack_sp|5.004050||p 1776 PL_statcache|5.005000||p 1777 PL_stdingv|5.004050||p 1778 PL_sv_arenaroot|5.004050||p 1779 PL_sv_no|5.004050||pn 1780 PL_sv_undef|5.004050||pn 1781 PL_sv_yes|5.004050||pn 1782 PL_tainted|5.004050||p 1783 PL_tainting|5.004050||p 1784 POP_MULTICALL||5.009005| 1785 POPi|||n 1786 POPl|||n 1787 POPn|||n 1788 POPpbytex||5.007001|n 1789 POPpx||5.005030|n 1790 POPp|||n 1791 POPs|||n 1792 PTR2IV|5.006000||p 1793 PTR2NV|5.006000||p 1794 PTR2UV|5.006000||p 1795 PTR2ul|5.007001||p 1796 PTRV|5.006000||p 1797 PUSHMARK||| 1798 PUSH_MULTICALL||5.009005| 1799 PUSHi||| 1800 PUSHmortal|5.009002||p 1801 PUSHn||| 1802 PUSHp||| 1803 PUSHs||| 1804 PUSHu|5.004000||p 1805 PUTBACK||| 1806 PerlIO_clearerr||5.007003| 1807 PerlIO_close||5.007003| 1808 PerlIO_context_layers||5.009004| 1809 PerlIO_eof||5.007003| 1810 PerlIO_error||5.007003| 1811 PerlIO_fileno||5.007003| 1812 PerlIO_fill||5.007003| 1813 PerlIO_flush||5.007003| 1814 PerlIO_get_base||5.007003| 1815 PerlIO_get_bufsiz||5.007003| 1816 PerlIO_get_cnt||5.007003| 1817 PerlIO_get_ptr||5.007003| 1818 PerlIO_read||5.007003| 1819 PerlIO_seek||5.007003| 1820 PerlIO_set_cnt||5.007003| 1821 PerlIO_set_ptrcnt||5.007003| 1822 PerlIO_setlinebuf||5.007003| 1823 PerlIO_stderr||5.007003| 1824 PerlIO_stdin||5.007003| 1825 PerlIO_stdout||5.007003| 1826 PerlIO_tell||5.007003| 1827 PerlIO_unread||5.007003| 1828 PerlIO_write||5.007003| 1829 Perl_signbit||5.009005|n 1830 PoisonFree|5.009004||p 1831 PoisonNew|5.009004||p 1832 PoisonWith|5.009004||p 1833 Poison|5.008000||p 1834 RETVAL|||n 1835 Renewc||| 1836 Renew||| 1837 SAVECLEARSV||| 1838 SAVECOMPPAD||| 1839 SAVEPADSV||| 1840 SAVETMPS||| 1841 SAVE_DEFSV|5.004050||p 1842 SPAGAIN||| 1843 SP||| 1844 START_EXTERN_C|5.005000||p 1845 START_MY_CXT|5.007003||p 1846 STMT_END|||p 1847 STMT_START|||p 1848 STR_WITH_LEN|5.009003||p 1849 ST||| 1850 SV_CONST_RETURN|5.009003||p 1851 SV_COW_DROP_PV|5.008001||p 1852 SV_COW_SHARED_HASH_KEYS|5.009005||p 1853 SV_GMAGIC|5.007002||p 1854 SV_HAS_TRAILING_NUL|5.009004||p 1855 SV_IMMEDIATE_UNREF|5.007001||p 1856 SV_MUTABLE_RETURN|5.009003||p 1857 SV_NOSTEAL|5.009002||p 1858 SV_SMAGIC|5.009003||p 1859 SV_UTF8_NO_ENCODING|5.008001||p 1860 SVf|5.006000||p 1861 SVt_IV||| 1862 SVt_NV||| 1863 SVt_PVAV||| 1864 SVt_PVCV||| 1865 SVt_PVHV||| 1866 SVt_PVMG||| 1867 SVt_PV||| 1868 Safefree||| 1869 Slab_Alloc||| 1870 Slab_Free||| 1871 Slab_to_rw||| 1872 StructCopy||| 1873 SvCUR_set||| 1874 SvCUR||| 1875 SvEND||| 1876 SvGAMAGIC||5.006001| 1877 SvGETMAGIC|5.004050||p 1878 SvGROW||| 1879 SvIOK_UV||5.006000| 1880 SvIOK_notUV||5.006000| 1881 SvIOK_off||| 1882 SvIOK_only_UV||5.006000| 1883 SvIOK_only||| 1884 SvIOK_on||| 1885 SvIOKp||| 1886 SvIOK||| 1887 SvIVX||| 1888 SvIV_nomg|5.009001||p 1889 SvIV_set||| 1890 SvIVx||| 1891 SvIV||| 1892 SvIsCOW_shared_hash||5.008003| 1893 SvIsCOW||5.008003| 1894 SvLEN_set||| 1895 SvLEN||| 1896 SvLOCK||5.007003| 1897 SvMAGIC_set|5.009003||p 1898 SvNIOK_off||| 1899 SvNIOKp||| 1900 SvNIOK||| 1901 SvNOK_off||| 1902 SvNOK_only||| 1903 SvNOK_on||| 1904 SvNOKp||| 1905 SvNOK||| 1906 SvNVX||| 1907 SvNV_set||| 1908 SvNVx||| 1909 SvNV||| 1910 SvOK||| 1911 SvOOK||| 1912 SvPOK_off||| 1913 SvPOK_only_UTF8||5.006000| 1914 SvPOK_only||| 1915 SvPOK_on||| 1916 SvPOKp||| 1917 SvPOK||| 1918 SvPVX_const|5.009003||p 1919 SvPVX_mutable|5.009003||p 1920 SvPVX||| 1921 SvPV_const|5.009003||p 1922 SvPV_flags_const_nolen|5.009003||p 1923 SvPV_flags_const|5.009003||p 1924 SvPV_flags_mutable|5.009003||p 1925 SvPV_flags|5.007002||p 1926 SvPV_force_flags_mutable|5.009003||p 1927 SvPV_force_flags_nolen|5.009003||p 1928 SvPV_force_flags|5.007002||p 1929 SvPV_force_mutable|5.009003||p 1930 SvPV_force_nolen|5.009003||p 1931 SvPV_force_nomg_nolen|5.009003||p 1932 SvPV_force_nomg|5.007002||p 1933 SvPV_force|||p 1934 SvPV_mutable|5.009003||p 1935 SvPV_nolen_const|5.009003||p 1936 SvPV_nolen|5.006000||p 1937 SvPV_nomg_const_nolen|5.009003||p 1938 SvPV_nomg_const|5.009003||p 1939 SvPV_nomg|5.007002||p 1940 SvPV_set||| 1941 SvPVbyte_force||5.009002| 1942 SvPVbyte_nolen||5.006000| 1943 SvPVbytex_force||5.006000| 1944 SvPVbytex||5.006000| 1945 SvPVbyte|5.006000||p 1946 SvPVutf8_force||5.006000| 1947 SvPVutf8_nolen||5.006000| 1948 SvPVutf8x_force||5.006000| 1949 SvPVutf8x||5.006000| 1950 SvPVutf8||5.006000| 1951 SvPVx||| 1952 SvPV||| 1953 SvREFCNT_dec||| 1954 SvREFCNT_inc_NN|5.009004||p 1955 SvREFCNT_inc_simple_NN|5.009004||p 1956 SvREFCNT_inc_simple_void_NN|5.009004||p 1957 SvREFCNT_inc_simple_void|5.009004||p 1958 SvREFCNT_inc_simple|5.009004||p 1959 SvREFCNT_inc_void_NN|5.009004||p 1960 SvREFCNT_inc_void|5.009004||p 1961 SvREFCNT_inc|||p 1962 SvREFCNT||| 1963 SvROK_off||| 1964 SvROK_on||| 1965 SvROK||| 1966 SvRV_set|5.009003||p 1967 SvRV||| 1968 SvRXOK||5.009005| 1969 SvRX||5.009005| 1970 SvSETMAGIC||| 1971 SvSHARED_HASH|5.009003||p 1972 SvSHARE||5.007003| 1973 SvSTASH_set|5.009003||p 1974 SvSTASH||| 1975 SvSetMagicSV_nosteal||5.004000| 1976 SvSetMagicSV||5.004000| 1977 SvSetSV_nosteal||5.004000| 1978 SvSetSV||| 1979 SvTAINTED_off||5.004000| 1980 SvTAINTED_on||5.004000| 1981 SvTAINTED||5.004000| 1982 SvTAINT||| 1983 SvTRUE||| 1984 SvTYPE||| 1985 SvUNLOCK||5.007003| 1986 SvUOK|5.007001|5.006000|p 1987 SvUPGRADE||| 1988 SvUTF8_off||5.006000| 1989 SvUTF8_on||5.006000| 1990 SvUTF8||5.006000| 1991 SvUVXx|5.004000||p 1992 SvUVX|5.004000||p 1993 SvUV_nomg|5.009001||p 1994 SvUV_set|5.009003||p 1995 SvUVx|5.004000||p 1996 SvUV|5.004000||p 1997 SvVOK||5.008001| 1998 SvVSTRING_mg|5.009004||p 1999 THIS|||n 2000 UNDERBAR|5.009002||p 2001 UTF8_MAXBYTES|5.009002||p 2002 UVSIZE|5.006000||p 2003 UVTYPE|5.006000||p 2004 UVXf|5.007001||p 2005 UVof|5.006000||p 2006 UVuf|5.006000||p 2007 UVxf|5.006000||p 2008 WARN_ALL|5.006000||p 2009 WARN_AMBIGUOUS|5.006000||p 2010 WARN_ASSERTIONS|5.009005||p 2011 WARN_BAREWORD|5.006000||p 2012 WARN_CLOSED|5.006000||p 2013 WARN_CLOSURE|5.006000||p 2014 WARN_DEBUGGING|5.006000||p 2015 WARN_DEPRECATED|5.006000||p 2016 WARN_DIGIT|5.006000||p 2017 WARN_EXEC|5.006000||p 2018 WARN_EXITING|5.006000||p 2019 WARN_GLOB|5.006000||p 2020 WARN_INPLACE|5.006000||p 2021 WARN_INTERNAL|5.006000||p 2022 WARN_IO|5.006000||p 2023 WARN_LAYER|5.008000||p 2024 WARN_MALLOC|5.006000||p 2025 WARN_MISC|5.006000||p 2026 WARN_NEWLINE|5.006000||p 2027 WARN_NUMERIC|5.006000||p 2028 WARN_ONCE|5.006000||p 2029 WARN_OVERFLOW|5.006000||p 2030 WARN_PACK|5.006000||p 2031 WARN_PARENTHESIS|5.006000||p 2032 WARN_PIPE|5.006000||p 2033 WARN_PORTABLE|5.006000||p 2034 WARN_PRECEDENCE|5.006000||p 2035 WARN_PRINTF|5.006000||p 2036 WARN_PROTOTYPE|5.006000||p 2037 WARN_QW|5.006000||p 2038 WARN_RECURSION|5.006000||p 2039 WARN_REDEFINE|5.006000||p 2040 WARN_REGEXP|5.006000||p 2041 WARN_RESERVED|5.006000||p 2042 WARN_SEMICOLON|5.006000||p 2043 WARN_SEVERE|5.006000||p 2044 WARN_SIGNAL|5.006000||p 2045 WARN_SUBSTR|5.006000||p 2046 WARN_SYNTAX|5.006000||p 2047 WARN_TAINT|5.006000||p 2048 WARN_THREADS|5.008000||p 2049 WARN_UNINITIALIZED|5.006000||p 2050 WARN_UNOPENED|5.006000||p 2051 WARN_UNPACK|5.006000||p 2052 WARN_UNTIE|5.006000||p 2053 WARN_UTF8|5.006000||p 2054 WARN_VOID|5.006000||p 2055 XCPT_CATCH|5.009002||p 2056 XCPT_RETHROW|5.009002||p 2057 XCPT_TRY_END|5.009002||p 2058 XCPT_TRY_START|5.009002||p 2059 XPUSHi||| 2060 XPUSHmortal|5.009002||p 2061 XPUSHn||| 2062 XPUSHp||| 2063 XPUSHs||| 2064 XPUSHu|5.004000||p 2065 XSRETURN_EMPTY||| 2066 XSRETURN_IV||| 2067 XSRETURN_NO||| 2068 XSRETURN_NV||| 2069 XSRETURN_PV||| 2070 XSRETURN_UNDEF||| 2071 XSRETURN_UV|5.008001||p 2072 XSRETURN_YES||| 2073 XSRETURN|||p 2074 XST_mIV||| 2075 XST_mNO||| 2076 XST_mNV||| 2077 XST_mPV||| 2078 XST_mUNDEF||| 2079 XST_mUV|5.008001||p 2080 XST_mYES||| 2081 XS_VERSION_BOOTCHECK||| 2082 XS_VERSION||| 2083 XSprePUSH|5.006000||p 2084 XS||| 2085 ZeroD|5.009002||p 2086 Zero||| 2087 _aMY_CXT|5.007003||p 2088 _pMY_CXT|5.007003||p 2089 aMY_CXT_|5.007003||p 2090 aMY_CXT|5.007003||p 2091 aTHXR_|5.009005||p 2092 aTHXR|5.009005||p 2093 aTHX_|5.006000||p 2094 aTHX|5.006000||p 2095 add_data|||n 2096 addmad||| 2097 allocmy||| 2098 amagic_call||| 2099 amagic_cmp_locale||| 2100 amagic_cmp||| 2101 amagic_i_ncmp||| 2102 amagic_ncmp||| 2103 any_dup||| 2104 ao||| 2105 append_elem||| 2106 append_list||| 2107 append_madprops||| 2108 apply_attrs_my||| 2109 apply_attrs_string||5.006001| 2110 apply_attrs||| 2111 apply||| 2112 atfork_lock||5.007003|n 2113 atfork_unlock||5.007003|n 2114 av_arylen_p||5.009003| 2115 av_clear||| 2116 av_create_and_push||5.009005| 2117 av_create_and_unshift_one||5.009005| 2118 av_delete||5.006000| 2119 av_exists||5.006000| 2120 av_extend||| 2121 av_fake||| 2122 av_fetch||| 2123 av_fill||| 2124 av_len||| 2125 av_make||| 2126 av_pop||| 2127 av_push||| 2128 av_reify||| 2129 av_shift||| 2130 av_store||| 2131 av_undef||| 2132 av_unshift||| 2133 ax|||n 2134 bad_type||| 2135 bind_match||| 2136 block_end||| 2137 block_gimme||5.004000| 2138 block_start||| 2139 boolSV|5.004000||p 2140 boot_core_PerlIO||| 2141 boot_core_UNIVERSAL||| 2142 boot_core_mro||| 2143 boot_core_xsutils||| 2144 bytes_from_utf8||5.007001| 2145 bytes_to_uni|||n 2146 bytes_to_utf8||5.006001| 2147 call_argv|5.006000||p 2148 call_atexit||5.006000| 2149 call_list||5.004000| 2150 call_method|5.006000||p 2151 call_pv|5.006000||p 2152 call_sv|5.006000||p 2153 calloc||5.007002|n 2154 cando||| 2155 cast_i32||5.006000| 2156 cast_iv||5.006000| 2157 cast_ulong||5.006000| 2158 cast_uv||5.006000| 2159 check_type_and_open||| 2160 check_uni||| 2161 checkcomma||| 2162 checkposixcc||| 2163 ckWARN|5.006000||p 2164 ck_anoncode||| 2165 ck_bitop||| 2166 ck_concat||| 2167 ck_defined||| 2168 ck_delete||| 2169 ck_die||| 2170 ck_eof||| 2171 ck_eval||| 2172 ck_exec||| 2173 ck_exists||| 2174 ck_exit||| 2175 ck_ftst||| 2176 ck_fun||| 2177 ck_glob||| 2178 ck_grep||| 2179 ck_index||| 2180 ck_join||| 2181 ck_lengthconst||| 2182 ck_lfun||| 2183 ck_listiob||| 2184 ck_match||| 2185 ck_method||| 2186 ck_null||| 2187 ck_open||| 2188 ck_readline||| 2189 ck_repeat||| 2190 ck_require||| 2191 ck_retarget||| 2192 ck_return||| 2193 ck_rfun||| 2194 ck_rvconst||| 2195 ck_sassign||| 2196 ck_select||| 2197 ck_shift||| 2198 ck_sort||| 2199 ck_spair||| 2200 ck_split||| 2201 ck_subr||| 2202 ck_substr||| 2203 ck_svconst||| 2204 ck_trunc||| 2205 ck_unpack||| 2206 ckwarn_d||5.009003| 2207 ckwarn||5.009003| 2208 cl_and|||n 2209 cl_anything|||n 2210 cl_init_zero|||n 2211 cl_init|||n 2212 cl_is_anything|||n 2213 cl_or|||n 2214 clear_placeholders||| 2215 closest_cop||| 2216 convert||| 2217 cop_free||| 2218 cr_textfilter||| 2219 create_eval_scope||| 2220 croak_nocontext|||vn 2221 croak|||v 2222 csighandler||5.009003|n 2223 curmad||| 2224 custom_op_desc||5.007003| 2225 custom_op_name||5.007003| 2226 cv_ckproto_len||| 2227 cv_ckproto||| 2228 cv_clone||| 2229 cv_const_sv||5.004000| 2230 cv_dump||| 2231 cv_undef||| 2232 cx_dump||5.005000| 2233 cx_dup||| 2234 cxinc||| 2235 dAXMARK|5.009003||p 2236 dAX|5.007002||p 2237 dITEMS|5.007002||p 2238 dMARK||| 2239 dMULTICALL||5.009003| 2240 dMY_CXT_SV|5.007003||p 2241 dMY_CXT|5.007003||p 2242 dNOOP|5.006000||p 2243 dORIGMARK||| 2244 dSP||| 2245 dTHR|5.004050||p 2246 dTHXR|5.009005||p 2247 dTHXa|5.006000||p 2248 dTHXoa|5.006000||p 2249 dTHX|5.006000||p 2250 dUNDERBAR|5.009002||p 2251 dVAR|5.009003||p 2252 dXCPT|5.009002||p 2253 dXSARGS||| 2254 dXSI32||| 2255 dXSTARG|5.006000||p 2256 deb_curcv||| 2257 deb_nocontext|||vn 2258 deb_stack_all||| 2259 deb_stack_n||| 2260 debop||5.005000| 2261 debprofdump||5.005000| 2262 debprof||| 2263 debstackptrs||5.007003| 2264 debstack||5.007003| 2265 debug_start_match||| 2266 deb||5.007003|v 2267 del_sv||| 2268 delete_eval_scope||| 2269 delimcpy||5.004000| 2270 deprecate_old||| 2271 deprecate||| 2272 despatch_signals||5.007001| 2273 destroy_matcher||| 2274 die_nocontext|||vn 2275 die_where||| 2276 die|||v 2277 dirp_dup||| 2278 div128||| 2279 djSP||| 2280 do_aexec5||| 2281 do_aexec||| 2282 do_aspawn||| 2283 do_binmode||5.004050| 2284 do_chomp||| 2285 do_chop||| 2286 do_close||| 2287 do_dump_pad||| 2288 do_eof||| 2289 do_exec3||| 2290 do_execfree||| 2291 do_exec||| 2292 do_gv_dump||5.006000| 2293 do_gvgv_dump||5.006000| 2294 do_hv_dump||5.006000| 2295 do_ipcctl||| 2296 do_ipcget||| 2297 do_join||| 2298 do_kv||| 2299 do_magic_dump||5.006000| 2300 do_msgrcv||| 2301 do_msgsnd||| 2302 do_oddball||| 2303 do_op_dump||5.006000| 2304 do_op_xmldump||| 2305 do_open9||5.006000| 2306 do_openn||5.007001| 2307 do_open||5.004000| 2308 do_pipe||| 2309 do_pmop_dump||5.006000| 2310 do_pmop_xmldump||| 2311 do_print||| 2312 do_readline||| 2313 do_seek||| 2314 do_semop||| 2315 do_shmio||| 2316 do_smartmatch||| 2317 do_spawn_nowait||| 2318 do_spawn||| 2319 do_sprintf||| 2320 do_sv_dump||5.006000| 2321 do_sysseek||| 2322 do_tell||| 2323 do_trans_complex_utf8||| 2324 do_trans_complex||| 2325 do_trans_count_utf8||| 2326 do_trans_count||| 2327 do_trans_simple_utf8||| 2328 do_trans_simple||| 2329 do_trans||| 2330 do_vecget||| 2331 do_vecset||| 2332 do_vop||| 2333 docatch_body||| 2334 docatch||| 2335 doeval||| 2336 dofile||| 2337 dofindlabel||| 2338 doform||| 2339 doing_taint||5.008001|n 2340 dooneliner||| 2341 doopen_pm||| 2342 doparseform||| 2343 dopoptoeval||| 2344 dopoptogiven||| 2345 dopoptolabel||| 2346 dopoptoloop||| 2347 dopoptosub_at||| 2348 dopoptosub||| 2349 dopoptowhen||| 2350 doref||5.009003| 2351 dounwind||| 2352 dowantarray||| 2353 dump_all||5.006000| 2354 dump_eval||5.006000| 2355 dump_exec_pos||| 2356 dump_fds||| 2357 dump_form||5.006000| 2358 dump_indent||5.006000|v 2359 dump_mstats||| 2360 dump_packsubs||5.006000| 2361 dump_sub||5.006000| 2362 dump_sv_child||| 2363 dump_trie_interim_list||| 2364 dump_trie_interim_table||| 2365 dump_trie||| 2366 dump_vindent||5.006000| 2367 dumpuntil||| 2368 dup_attrlist||| 2369 emulate_cop_io||| 2370 emulate_eaccess||| 2371 eval_pv|5.006000||p 2372 eval_sv|5.006000||p 2373 exec_failed||| 2374 expect_number||| 2375 fbm_compile||5.005000| 2376 fbm_instr||5.005000| 2377 fd_on_nosuid_fs||| 2378 feature_is_enabled||| 2379 filter_add||| 2380 filter_del||| 2381 filter_gets||| 2382 filter_read||| 2383 find_and_forget_pmops||| 2384 find_array_subscript||| 2385 find_beginning||| 2386 find_byclass||| 2387 find_hash_subscript||| 2388 find_in_my_stash||| 2389 find_runcv||5.008001| 2390 find_rundefsvoffset||5.009002| 2391 find_script||| 2392 find_uninit_var||| 2393 first_symbol|||n 2394 fold_constants||| 2395 forbid_setid||| 2396 force_ident||| 2397 force_list||| 2398 force_next||| 2399 force_version||| 2400 force_word||| 2401 forget_pmop||| 2402 form_nocontext|||vn 2403 form||5.004000|v 2404 fp_dup||| 2405 fprintf_nocontext|||vn 2406 free_global_struct||| 2407 free_tied_hv_pool||| 2408 free_tmps||| 2409 gen_constant_list||| 2410 get_arena||| 2411 get_av|5.006000||p 2412 get_context||5.006000|n 2413 get_cvn_flags||5.009005| 2414 get_cv|5.006000||p 2415 get_db_sub||| 2416 get_debug_opts||| 2417 get_hash_seed||| 2418 get_hv|5.006000||p 2419 get_mstats||| 2420 get_no_modify||| 2421 get_num||| 2422 get_op_descs||5.005000| 2423 get_op_names||5.005000| 2424 get_opargs||| 2425 get_ppaddr||5.006000| 2426 get_re_arg||| 2427 get_sv|5.006000||p 2428 get_vtbl||5.005030| 2429 getcwd_sv||5.007002| 2430 getenv_len||| 2431 glob_2number||| 2432 glob_2pv||| 2433 glob_assign_glob||| 2434 glob_assign_ref||| 2435 gp_dup||| 2436 gp_free||| 2437 gp_ref||| 2438 grok_bin|5.007003||p 2439 grok_hex|5.007003||p 2440 grok_number|5.007002||p 2441 grok_numeric_radix|5.007002||p 2442 grok_oct|5.007003||p 2443 group_end||| 2444 gv_AVadd||| 2445 gv_HVadd||| 2446 gv_IOadd||| 2447 gv_SVadd||| 2448 gv_autoload4||5.004000| 2449 gv_check||| 2450 gv_const_sv||5.009003| 2451 gv_dump||5.006000| 2452 gv_efullname3||5.004000| 2453 gv_efullname4||5.006001| 2454 gv_efullname||| 2455 gv_ename||| 2456 gv_fetchfile_flags||5.009005| 2457 gv_fetchfile||| 2458 gv_fetchmeth_autoload||5.007003| 2459 gv_fetchmethod_autoload||5.004000| 2460 gv_fetchmethod||| 2461 gv_fetchmeth||| 2462 gv_fetchpvn_flags||5.009002| 2463 gv_fetchpv||| 2464 gv_fetchsv||5.009002| 2465 gv_fullname3||5.004000| 2466 gv_fullname4||5.006001| 2467 gv_fullname||| 2468 gv_handler||5.007001| 2469 gv_init_sv||| 2470 gv_init||| 2471 gv_name_set||5.009004| 2472 gv_stashpvn|5.004000||p 2473 gv_stashpvs||5.009003| 2474 gv_stashpv||| 2475 gv_stashsv||| 2476 he_dup||| 2477 hek_dup||| 2478 hfreeentries||| 2479 hsplit||| 2480 hv_assert||5.009005| 2481 hv_auxinit|||n 2482 hv_backreferences_p||| 2483 hv_clear_placeholders||5.009001| 2484 hv_clear||| 2485 hv_copy_hints_hv||| 2486 hv_delayfree_ent||5.004000| 2487 hv_delete_common||| 2488 hv_delete_ent||5.004000| 2489 hv_delete||| 2490 hv_eiter_p||5.009003| 2491 hv_eiter_set||5.009003| 2492 hv_exists_ent||5.004000| 2493 hv_exists||| 2494 hv_fetch_common||| 2495 hv_fetch_ent||5.004000| 2496 hv_fetchs|5.009003||p 2497 hv_fetch||| 2498 hv_free_ent||5.004000| 2499 hv_iterinit||| 2500 hv_iterkeysv||5.004000| 2501 hv_iterkey||| 2502 hv_iternext_flags||5.008000| 2503 hv_iternextsv||| 2504 hv_iternext||| 2505 hv_iterval||| 2506 hv_kill_backrefs||| 2507 hv_ksplit||5.004000| 2508 hv_magic_check|||n 2509 hv_magic_uvar_xkey||| 2510 hv_magic||| 2511 hv_name_set||5.009003| 2512 hv_notallowed||| 2513 hv_placeholders_get||5.009003| 2514 hv_placeholders_p||5.009003| 2515 hv_placeholders_set||5.009003| 2516 hv_riter_p||5.009003| 2517 hv_riter_set||5.009003| 2518 hv_scalar||5.009001| 2519 hv_store_ent||5.004000| 2520 hv_store_flags||5.008000| 2521 hv_stores|5.009004||p 2522 hv_store||| 2523 hv_undef||| 2524 ibcmp_locale||5.004000| 2525 ibcmp_utf8||5.007003| 2526 ibcmp||| 2527 incl_perldb||| 2528 incline||| 2529 incpush_if_exists||| 2530 incpush||| 2531 ingroup||| 2532 init_argv_symbols||| 2533 init_debugger||| 2534 init_global_struct||| 2535 init_i18nl10n||5.006000| 2536 init_i18nl14n||5.006000| 2537 init_ids||| 2538 init_interp||| 2539 init_main_stash||| 2540 init_perllib||| 2541 init_postdump_symbols||| 2542 init_predump_symbols||| 2543 init_stacks||5.005000| 2544 init_tm||5.007002| 2545 instr||| 2546 intro_my||| 2547 intuit_method||| 2548 intuit_more||| 2549 invert||| 2550 io_close||| 2551 isALNUM||| 2552 isALPHA||| 2553 isDIGIT||| 2554 isLOWER||| 2555 isSPACE||| 2556 isUPPER||| 2557 is_an_int||| 2558 is_gv_magical_sv||| 2559 is_gv_magical||| 2560 is_handle_constructor|||n 2561 is_list_assignment||| 2562 is_lvalue_sub||5.007001| 2563 is_uni_alnum_lc||5.006000| 2564 is_uni_alnumc_lc||5.006000| 2565 is_uni_alnumc||5.006000| 2566 is_uni_alnum||5.006000| 2567 is_uni_alpha_lc||5.006000| 2568 is_uni_alpha||5.006000| 2569 is_uni_ascii_lc||5.006000| 2570 is_uni_ascii||5.006000| 2571 is_uni_cntrl_lc||5.006000| 2572 is_uni_cntrl||5.006000| 2573 is_uni_digit_lc||5.006000| 2574 is_uni_digit||5.006000| 2575 is_uni_graph_lc||5.006000| 2576 is_uni_graph||5.006000| 2577 is_uni_idfirst_lc||5.006000| 2578 is_uni_idfirst||5.006000| 2579 is_uni_lower_lc||5.006000| 2580 is_uni_lower||5.006000| 2581 is_uni_print_lc||5.006000| 2582 is_uni_print||5.006000| 2583 is_uni_punct_lc||5.006000| 2584 is_uni_punct||5.006000| 2585 is_uni_space_lc||5.006000| 2586 is_uni_space||5.006000| 2587 is_uni_upper_lc||5.006000| 2588 is_uni_upper||5.006000| 2589 is_uni_xdigit_lc||5.006000| 2590 is_uni_xdigit||5.006000| 2591 is_utf8_alnumc||5.006000| 2592 is_utf8_alnum||5.006000| 2593 is_utf8_alpha||5.006000| 2594 is_utf8_ascii||5.006000| 2595 is_utf8_char_slow|||n 2596 is_utf8_char||5.006000| 2597 is_utf8_cntrl||5.006000| 2598 is_utf8_common||| 2599 is_utf8_digit||5.006000| 2600 is_utf8_graph||5.006000| 2601 is_utf8_idcont||5.008000| 2602 is_utf8_idfirst||5.006000| 2603 is_utf8_lower||5.006000| 2604 is_utf8_mark||5.006000| 2605 is_utf8_print||5.006000| 2606 is_utf8_punct||5.006000| 2607 is_utf8_space||5.006000| 2608 is_utf8_string_loclen||5.009003| 2609 is_utf8_string_loc||5.008001| 2610 is_utf8_string||5.006001| 2611 is_utf8_upper||5.006000| 2612 is_utf8_xdigit||5.006000| 2613 isa_lookup||| 2614 items|||n 2615 ix|||n 2616 jmaybe||| 2617 join_exact||| 2618 keyword||| 2619 leave_scope||| 2620 lex_end||| 2621 lex_start||| 2622 linklist||| 2623 listkids||| 2624 list||| 2625 load_module_nocontext|||vn 2626 load_module|5.006000||pv 2627 localize||| 2628 looks_like_bool||| 2629 looks_like_number||| 2630 lop||| 2631 mPUSHi|5.009002||p 2632 mPUSHn|5.009002||p 2633 mPUSHp|5.009002||p 2634 mPUSHu|5.009002||p 2635 mXPUSHi|5.009002||p 2636 mXPUSHn|5.009002||p 2637 mXPUSHp|5.009002||p 2638 mXPUSHu|5.009002||p 2639 mad_free||| 2640 madlex||| 2641 madparse||| 2642 magic_clear_all_env||| 2643 magic_clearenv||| 2644 magic_clearhint||| 2645 magic_clearpack||| 2646 magic_clearsig||| 2647 magic_dump||5.006000| 2648 magic_existspack||| 2649 magic_freearylen_p||| 2650 magic_freeovrld||| 2651 magic_freeregexp||| 2652 magic_getarylen||| 2653 magic_getdefelem||| 2654 magic_getnkeys||| 2655 magic_getpack||| 2656 magic_getpos||| 2657 magic_getsig||| 2658 magic_getsubstr||| 2659 magic_gettaint||| 2660 magic_getuvar||| 2661 magic_getvec||| 2662 magic_get||| 2663 magic_killbackrefs||| 2664 magic_len||| 2665 magic_methcall||| 2666 magic_methpack||| 2667 magic_nextpack||| 2668 magic_regdata_cnt||| 2669 magic_regdatum_get||| 2670 magic_regdatum_set||| 2671 magic_scalarpack||| 2672 magic_set_all_env||| 2673 magic_setamagic||| 2674 magic_setarylen||| 2675 magic_setbm||| 2676 magic_setcollxfrm||| 2677 magic_setdbline||| 2678 magic_setdefelem||| 2679 magic_setenv||| 2680 magic_setfm||| 2681 magic_setglob||| 2682 magic_sethint||| 2683 magic_setisa||| 2684 magic_setmglob||| 2685 magic_setnkeys||| 2686 magic_setpack||| 2687 magic_setpos||| 2688 magic_setregexp||| 2689 magic_setsig||| 2690 magic_setsubstr||| 2691 magic_settaint||| 2692 magic_setutf8||| 2693 magic_setuvar||| 2694 magic_setvec||| 2695 magic_set||| 2696 magic_sizepack||| 2697 magic_wipepack||| 2698 magicname||| 2699 make_matcher||| 2700 make_trie_failtable||| 2701 make_trie||| 2702 malloced_size|||n 2703 malloc||5.007002|n 2704 markstack_grow||| 2705 matcher_matches_sv||| 2706 measure_struct||| 2707 memEQ|5.004000||p 2708 memNE|5.004000||p 2709 mem_collxfrm||| 2710 mess_alloc||| 2711 mess_nocontext|||vn 2712 mess||5.006000|v 2713 method_common||| 2714 mfree||5.007002|n 2715 mg_clear||| 2716 mg_copy||| 2717 mg_dup||| 2718 mg_find||| 2719 mg_free||| 2720 mg_get||| 2721 mg_length||5.005000| 2722 mg_localize||| 2723 mg_magical||| 2724 mg_set||| 2725 mg_size||5.005000| 2726 mini_mktime||5.007002| 2727 missingterm||| 2728 mode_from_discipline||| 2729 modkids||| 2730 mod||| 2731 more_bodies||| 2732 more_sv||| 2733 moreswitches||| 2734 mro_get_linear_isa_c3||5.009005| 2735 mro_get_linear_isa_dfs||5.009005| 2736 mro_get_linear_isa||5.009005| 2737 mro_isa_changed_in||| 2738 mro_meta_dup||| 2739 mro_meta_init||| 2740 mro_method_changed_in||5.009005| 2741 mul128||| 2742 mulexp10|||n 2743 my_atof2||5.007002| 2744 my_atof||5.006000| 2745 my_attrs||| 2746 my_bcopy|||n 2747 my_betoh16|||n 2748 my_betoh32|||n 2749 my_betoh64|||n 2750 my_betohi|||n 2751 my_betohl|||n 2752 my_betohs|||n 2753 my_bzero|||n 2754 my_chsize||| 2755 my_clearenv||| 2756 my_cxt_index||| 2757 my_cxt_init||| 2758 my_dirfd||5.009005| 2759 my_exit_jump||| 2760 my_exit||| 2761 my_failure_exit||5.004000| 2762 my_fflush_all||5.006000| 2763 my_fork||5.007003|n 2764 my_htobe16|||n 2765 my_htobe32|||n 2766 my_htobe64|||n 2767 my_htobei|||n 2768 my_htobel|||n 2769 my_htobes|||n 2770 my_htole16|||n 2771 my_htole32|||n 2772 my_htole64|||n 2773 my_htolei|||n 2774 my_htolel|||n 2775 my_htoles|||n 2776 my_htonl||| 2777 my_kid||| 2778 my_letoh16|||n 2779 my_letoh32|||n 2780 my_letoh64|||n 2781 my_letohi|||n 2782 my_letohl|||n 2783 my_letohs|||n 2784 my_lstat||| 2785 my_memcmp||5.004000|n 2786 my_memset|||n 2787 my_ntohl||| 2788 my_pclose||5.004000| 2789 my_popen_list||5.007001| 2790 my_popen||5.004000| 2791 my_setenv||| 2792 my_snprintf|5.009004||pvn 2793 my_socketpair||5.007003|n 2794 my_sprintf||5.009003|vn 2795 my_stat||| 2796 my_strftime||5.007002| 2797 my_strlcat|5.009004||pn 2798 my_strlcpy|5.009004||pn 2799 my_swabn|||n 2800 my_swap||| 2801 my_unexec||| 2802 my_vsnprintf||5.009004|n 2803 my||| 2804 need_utf8|||n 2805 newANONATTRSUB||5.006000| 2806 newANONHASH||| 2807 newANONLIST||| 2808 newANONSUB||| 2809 newASSIGNOP||| 2810 newATTRSUB||5.006000| 2811 newAVREF||| 2812 newAV||| 2813 newBINOP||| 2814 newCONDOP||| 2815 newCONSTSUB|5.004050||p 2816 newCVREF||| 2817 newDEFSVOP||| 2818 newFORM||| 2819 newFOROP||| 2820 newGIVENOP||5.009003| 2821 newGIVWHENOP||| 2822 newGP||| 2823 newGVOP||| 2824 newGVREF||| 2825 newGVgen||| 2826 newHVREF||| 2827 newHVhv||5.005000| 2828 newHV||| 2829 newIO||| 2830 newLISTOP||| 2831 newLOGOP||| 2832 newLOOPEX||| 2833 newLOOPOP||| 2834 newMADPROP||| 2835 newMADsv||| 2836 newMYSUB||| 2837 newNULLLIST||| 2838 newOP||| 2839 newPADOP||| 2840 newPMOP||| 2841 newPROG||| 2842 newPVOP||| 2843 newRANGE||| 2844 newRV_inc|5.004000||p 2845 newRV_noinc|5.004000||p 2846 newRV||| 2847 newSLICEOP||| 2848 newSTATEOP||| 2849 newSUB||| 2850 newSVOP||| 2851 newSVREF||| 2852 newSV_type||5.009005| 2853 newSVhek||5.009003| 2854 newSViv||| 2855 newSVnv||| 2856 newSVpvf_nocontext|||vn 2857 newSVpvf||5.004000|v 2858 newSVpvn_share|5.007001||p 2859 newSVpvn|5.004050||p 2860 newSVpvs_share||5.009003| 2861 newSVpvs|5.009003||p 2862 newSVpv||| 2863 newSVrv||| 2864 newSVsv||| 2865 newSVuv|5.006000||p 2866 newSV||| 2867 newTOKEN||| 2868 newUNOP||| 2869 newWHENOP||5.009003| 2870 newWHILEOP||5.009003| 2871 newXS_flags||5.009004| 2872 newXSproto||5.006000| 2873 newXS||5.006000| 2874 new_collate||5.006000| 2875 new_constant||| 2876 new_ctype||5.006000| 2877 new_he||| 2878 new_logop||| 2879 new_numeric||5.006000| 2880 new_stackinfo||5.005000| 2881 new_version||5.009000| 2882 new_warnings_bitfield||| 2883 next_symbol||| 2884 nextargv||| 2885 nextchar||| 2886 ninstr||| 2887 no_bareword_allowed||| 2888 no_fh_allowed||| 2889 no_op||| 2890 not_a_number||| 2891 nothreadhook||5.008000| 2892 nuke_stacks||| 2893 num_overflow|||n 2894 offer_nice_chunk||| 2895 oopsAV||| 2896 oopsCV||| 2897 oopsHV||| 2898 op_clear||| 2899 op_const_sv||| 2900 op_dump||5.006000| 2901 op_free||| 2902 op_getmad_weak||| 2903 op_getmad||| 2904 op_null||5.007002| 2905 op_refcnt_dec||| 2906 op_refcnt_inc||| 2907 op_refcnt_lock||5.009002| 2908 op_refcnt_unlock||5.009002| 2909 op_xmldump||| 2910 open_script||| 2911 pMY_CXT_|5.007003||p 2912 pMY_CXT|5.007003||p 2913 pTHX_|5.006000||p 2914 pTHX|5.006000||p 2915 packWARN|5.007003||p 2916 pack_cat||5.007003| 2917 pack_rec||| 2918 package||| 2919 packlist||5.008001| 2920 pad_add_anon||| 2921 pad_add_name||| 2922 pad_alloc||| 2923 pad_block_start||| 2924 pad_check_dup||| 2925 pad_compname_type||| 2926 pad_findlex||| 2927 pad_findmy||| 2928 pad_fixup_inner_anons||| 2929 pad_free||| 2930 pad_leavemy||| 2931 pad_new||| 2932 pad_peg|||n 2933 pad_push||| 2934 pad_reset||| 2935 pad_setsv||| 2936 pad_sv||5.009005| 2937 pad_swipe||| 2938 pad_tidy||| 2939 pad_undef||| 2940 parse_body||| 2941 parse_unicode_opts||| 2942 parser_dup||| 2943 parser_free||| 2944 path_is_absolute|||n 2945 peep||| 2946 pending_Slabs_to_ro||| 2947 perl_alloc_using|||n 2948 perl_alloc|||n 2949 perl_clone_using|||n 2950 perl_clone|||n 2951 perl_construct|||n 2952 perl_destruct||5.007003|n 2953 perl_free|||n 2954 perl_parse||5.006000|n 2955 perl_run|||n 2956 pidgone||| 2957 pm_description||| 2958 pmflag||| 2959 pmop_dump||5.006000| 2960 pmop_xmldump||| 2961 pmruntime||| 2962 pmtrans||| 2963 pop_scope||| 2964 pregcomp||5.009005| 2965 pregexec||| 2966 pregfree||| 2967 prepend_elem||| 2968 prepend_madprops||| 2969 printbuf||| 2970 printf_nocontext|||vn 2971 process_special_blocks||| 2972 ptr_table_clear||5.009005| 2973 ptr_table_fetch||5.009005| 2974 ptr_table_find|||n 2975 ptr_table_free||5.009005| 2976 ptr_table_new||5.009005| 2977 ptr_table_split||5.009005| 2978 ptr_table_store||5.009005| 2979 push_scope||| 2980 put_byte||| 2981 pv_display||5.006000| 2982 pv_escape||5.009004| 2983 pv_pretty||5.009004| 2984 pv_uni_display||5.007003| 2985 qerror||| 2986 qsortsvu||| 2987 re_compile||5.009005| 2988 re_croak2||| 2989 re_dup||| 2990 re_intuit_start||5.009005| 2991 re_intuit_string||5.006000| 2992 readpipe_override||| 2993 realloc||5.007002|n 2994 reentrant_free||| 2995 reentrant_init||| 2996 reentrant_retry|||vn 2997 reentrant_size||| 2998 ref_array_or_hash||| 2999 refcounted_he_chain_2hv||| 3000 refcounted_he_fetch||| 3001 refcounted_he_free||| 3002 refcounted_he_new||| 3003 refcounted_he_value||| 3004 refkids||| 3005 refto||| 3006 ref||5.009003| 3007 reg_check_named_buff_matched||| 3008 reg_named_buff_all||5.009005| 3009 reg_named_buff_exists||5.009005| 3010 reg_named_buff_fetch||5.009005| 3011 reg_named_buff_firstkey||5.009005| 3012 reg_named_buff_iter||| 3013 reg_named_buff_nextkey||5.009005| 3014 reg_named_buff_scalar||5.009005| 3015 reg_named_buff||| 3016 reg_namedseq||| 3017 reg_node||| 3018 reg_numbered_buff_fetch||| 3019 reg_numbered_buff_length||| 3020 reg_numbered_buff_store||| 3021 reg_qr_package||| 3022 reg_recode||| 3023 reg_scan_name||| 3024 reg_skipcomment||| 3025 reg_stringify||5.009005| 3026 reg_temp_copy||| 3027 reganode||| 3028 regatom||| 3029 regbranch||| 3030 regclass_swash||5.009004| 3031 regclass||| 3032 regcppop||| 3033 regcppush||| 3034 regcurly|||n 3035 regdump_extflags||| 3036 regdump||5.005000| 3037 regdupe_internal||| 3038 regexec_flags||5.005000| 3039 regfree_internal||5.009005| 3040 reghop3|||n 3041 reghop4|||n 3042 reghopmaybe3|||n 3043 reginclass||| 3044 reginitcolors||5.006000| 3045 reginsert||| 3046 regmatch||| 3047 regnext||5.005000| 3048 regpiece||| 3049 regpposixcc||| 3050 regprop||| 3051 regrepeat||| 3052 regtail_study||| 3053 regtail||| 3054 regtry||| 3055 reguni||| 3056 regwhite|||n 3057 reg||| 3058 repeatcpy||| 3059 report_evil_fh||| 3060 report_uninit||| 3061 require_pv||5.006000| 3062 require_tie_mod||| 3063 restore_magic||| 3064 rninstr||| 3065 rsignal_restore||| 3066 rsignal_save||| 3067 rsignal_state||5.004000| 3068 rsignal||5.004000| 3069 run_body||| 3070 run_user_filter||| 3071 runops_debug||5.005000| 3072 runops_standard||5.005000| 3073 rvpv_dup||| 3074 rxres_free||| 3075 rxres_restore||| 3076 rxres_save||| 3077 safesyscalloc||5.006000|n 3078 safesysfree||5.006000|n 3079 safesysmalloc||5.006000|n 3080 safesysrealloc||5.006000|n 3081 same_dirent||| 3082 save_I16||5.004000| 3083 save_I32||| 3084 save_I8||5.006000| 3085 save_aelem||5.004050| 3086 save_alloc||5.006000| 3087 save_aptr||| 3088 save_ary||| 3089 save_bool||5.008001| 3090 save_clearsv||| 3091 save_delete||| 3092 save_destructor_x||5.006000| 3093 save_destructor||5.006000| 3094 save_freeop||| 3095 save_freepv||| 3096 save_freesv||| 3097 save_generic_pvref||5.006001| 3098 save_generic_svref||5.005030| 3099 save_gp||5.004000| 3100 save_hash||| 3101 save_hek_flags|||n 3102 save_helem||5.004050| 3103 save_hints||5.005000| 3104 save_hptr||| 3105 save_int||| 3106 save_item||| 3107 save_iv||5.005000| 3108 save_lines||| 3109 save_list||| 3110 save_long||| 3111 save_magic||| 3112 save_mortalizesv||5.007001| 3113 save_nogv||| 3114 save_op||| 3115 save_padsv||5.007001| 3116 save_pptr||| 3117 save_re_context||5.006000| 3118 save_scalar_at||| 3119 save_scalar||| 3120 save_set_svflags||5.009000| 3121 save_shared_pvref||5.007003| 3122 save_sptr||| 3123 save_svref||| 3124 save_vptr||5.006000| 3125 savepvn||| 3126 savepvs||5.009003| 3127 savepv||| 3128 savesharedpvn||5.009005| 3129 savesharedpv||5.007003| 3130 savestack_grow_cnt||5.008001| 3131 savestack_grow||| 3132 savesvpv||5.009002| 3133 sawparens||| 3134 scalar_mod_type|||n 3135 scalarboolean||| 3136 scalarkids||| 3137 scalarseq||| 3138 scalarvoid||| 3139 scalar||| 3140 scan_bin||5.006000| 3141 scan_commit||| 3142 scan_const||| 3143 scan_formline||| 3144 scan_heredoc||| 3145 scan_hex||| 3146 scan_ident||| 3147 scan_inputsymbol||| 3148 scan_num||5.007001| 3149 scan_oct||| 3150 scan_pat||| 3151 scan_str||| 3152 scan_subst||| 3153 scan_trans||| 3154 scan_version||5.009001| 3155 scan_vstring||5.009005| 3156 scan_word||| 3157 scope||| 3158 screaminstr||5.005000| 3159 seed||5.008001| 3160 sequence_num||| 3161 sequence_tail||| 3162 sequence||| 3163 set_context||5.006000|n 3164 set_csh||| 3165 set_numeric_local||5.006000| 3166 set_numeric_radix||5.006000| 3167 set_numeric_standard||5.006000| 3168 setdefout||| 3169 setenv_getix||| 3170 share_hek_flags||| 3171 share_hek||5.004000| 3172 si_dup||| 3173 sighandler|||n 3174 simplify_sort||| 3175 skipspace0||| 3176 skipspace1||| 3177 skipspace2||| 3178 skipspace||| 3179 softref2xv||| 3180 sortcv_stacked||| 3181 sortcv_xsub||| 3182 sortcv||| 3183 sortsv_flags||5.009003| 3184 sortsv||5.007003| 3185 space_join_names_mortal||| 3186 ss_dup||| 3187 stack_grow||| 3188 start_force||| 3189 start_glob||| 3190 start_subparse||5.004000| 3191 stashpv_hvname_match||5.009005| 3192 stdize_locale||| 3193 strEQ||| 3194 strGE||| 3195 strGT||| 3196 strLE||| 3197 strLT||| 3198 strNE||| 3199 str_to_version||5.006000| 3200 strip_return||| 3201 strnEQ||| 3202 strnNE||| 3203 study_chunk||| 3204 sub_crush_depth||| 3205 sublex_done||| 3206 sublex_push||| 3207 sublex_start||| 3208 sv_2bool||| 3209 sv_2cv||| 3210 sv_2io||| 3211 sv_2iuv_common||| 3212 sv_2iuv_non_preserve||| 3213 sv_2iv_flags||5.009001| 3214 sv_2iv||| 3215 sv_2mortal||| 3216 sv_2nv||| 3217 sv_2pv_flags|5.007002||p 3218 sv_2pv_nolen|5.006000||p 3219 sv_2pvbyte_nolen|5.006000||p 3220 sv_2pvbyte|5.006000||p 3221 sv_2pvutf8_nolen||5.006000| 3222 sv_2pvutf8||5.006000| 3223 sv_2pv||| 3224 sv_2uv_flags||5.009001| 3225 sv_2uv|5.004000||p 3226 sv_add_arena||| 3227 sv_add_backref||| 3228 sv_backoff||| 3229 sv_bless||| 3230 sv_cat_decode||5.008001| 3231 sv_catpv_mg|5.004050||p 3232 sv_catpvf_mg_nocontext|||pvn 3233 sv_catpvf_mg|5.006000|5.004000|pv 3234 sv_catpvf_nocontext|||vn 3235 sv_catpvf||5.004000|v 3236 sv_catpvn_flags||5.007002| 3237 sv_catpvn_mg|5.004050||p 3238 sv_catpvn_nomg|5.007002||p 3239 sv_catpvn||| 3240 sv_catpvs|5.009003||p 3241 sv_catpv||| 3242 sv_catsv_flags||5.007002| 3243 sv_catsv_mg|5.004050||p 3244 sv_catsv_nomg|5.007002||p 3245 sv_catsv||| 3246 sv_catxmlpvn||| 3247 sv_catxmlsv||| 3248 sv_chop||| 3249 sv_clean_all||| 3250 sv_clean_objs||| 3251 sv_clear||| 3252 sv_cmp_locale||5.004000| 3253 sv_cmp||| 3254 sv_collxfrm||| 3255 sv_compile_2op||5.008001| 3256 sv_copypv||5.007003| 3257 sv_dec||| 3258 sv_del_backref||| 3259 sv_derived_from||5.004000| 3260 sv_does||5.009004| 3261 sv_dump||| 3262 sv_dup||| 3263 sv_eq||| 3264 sv_exp_grow||| 3265 sv_force_normal_flags||5.007001| 3266 sv_force_normal||5.006000| 3267 sv_free2||| 3268 sv_free_arenas||| 3269 sv_free||| 3270 sv_gets||5.004000| 3271 sv_grow||| 3272 sv_i_ncmp||| 3273 sv_inc||| 3274 sv_insert||| 3275 sv_isa||| 3276 sv_isobject||| 3277 sv_iv||5.005000| 3278 sv_kill_backrefs||| 3279 sv_len_utf8||5.006000| 3280 sv_len||| 3281 sv_magic_portable|5.009005|5.004000|p 3282 sv_magicext||5.007003| 3283 sv_magic||| 3284 sv_mortalcopy||| 3285 sv_ncmp||| 3286 sv_newmortal||| 3287 sv_newref||| 3288 sv_nolocking||5.007003| 3289 sv_nosharing||5.007003| 3290 sv_nounlocking||| 3291 sv_nv||5.005000| 3292 sv_peek||5.005000| 3293 sv_pos_b2u_midway||| 3294 sv_pos_b2u||5.006000| 3295 sv_pos_u2b_cached||| 3296 sv_pos_u2b_forwards|||n 3297 sv_pos_u2b_midway|||n 3298 sv_pos_u2b||5.006000| 3299 sv_pvbyten_force||5.006000| 3300 sv_pvbyten||5.006000| 3301 sv_pvbyte||5.006000| 3302 sv_pvn_force_flags|5.007002||p 3303 sv_pvn_force||| 3304 sv_pvn_nomg|5.007003||p 3305 sv_pvn||| 3306 sv_pvutf8n_force||5.006000| 3307 sv_pvutf8n||5.006000| 3308 sv_pvutf8||5.006000| 3309 sv_pv||5.006000| 3310 sv_recode_to_utf8||5.007003| 3311 sv_reftype||| 3312 sv_release_COW||| 3313 sv_replace||| 3314 sv_report_used||| 3315 sv_reset||| 3316 sv_rvweaken||5.006000| 3317 sv_setiv_mg|5.004050||p 3318 sv_setiv||| 3319 sv_setnv_mg|5.006000||p 3320 sv_setnv||| 3321 sv_setpv_mg|5.004050||p 3322 sv_setpvf_mg_nocontext|||pvn 3323 sv_setpvf_mg|5.006000|5.004000|pv 3324 sv_setpvf_nocontext|||vn 3325 sv_setpvf||5.004000|v 3326 sv_setpviv_mg||5.008001| 3327 sv_setpviv||5.008001| 3328 sv_setpvn_mg|5.004050||p 3329 sv_setpvn||| 3330 sv_setpvs|5.009004||p 3331 sv_setpv||| 3332 sv_setref_iv||| 3333 sv_setref_nv||| 3334 sv_setref_pvn||| 3335 sv_setref_pv||| 3336 sv_setref_uv||5.007001| 3337 sv_setsv_cow||| 3338 sv_setsv_flags||5.007002| 3339 sv_setsv_mg|5.004050||p 3340 sv_setsv_nomg|5.007002||p 3341 sv_setsv||| 3342 sv_setuv_mg|5.004050||p 3343 sv_setuv|5.004000||p 3344 sv_tainted||5.004000| 3345 sv_taint||5.004000| 3346 sv_true||5.005000| 3347 sv_unglob||| 3348 sv_uni_display||5.007003| 3349 sv_unmagic||| 3350 sv_unref_flags||5.007001| 3351 sv_unref||| 3352 sv_untaint||5.004000| 3353 sv_upgrade||| 3354 sv_usepvn_flags||5.009004| 3355 sv_usepvn_mg|5.004050||p 3356 sv_usepvn||| 3357 sv_utf8_decode||5.006000| 3358 sv_utf8_downgrade||5.006000| 3359 sv_utf8_encode||5.006000| 3360 sv_utf8_upgrade_flags||5.007002| 3361 sv_utf8_upgrade||5.007001| 3362 sv_uv|5.005000||p 3363 sv_vcatpvf_mg|5.006000|5.004000|p 3364 sv_vcatpvfn||5.004000| 3365 sv_vcatpvf|5.006000|5.004000|p 3366 sv_vsetpvf_mg|5.006000|5.004000|p 3367 sv_vsetpvfn||5.004000| 3368 sv_vsetpvf|5.006000|5.004000|p 3369 sv_xmlpeek||| 3370 svtype||| 3371 swallow_bom||| 3372 swap_match_buff||| 3373 swash_fetch||5.007002| 3374 swash_get||| 3375 swash_init||5.006000| 3376 sys_intern_clear||| 3377 sys_intern_dup||| 3378 sys_intern_init||| 3379 taint_env||| 3380 taint_proper||| 3381 tmps_grow||5.006000| 3382 toLOWER||| 3383 toUPPER||| 3384 to_byte_substr||| 3385 to_uni_fold||5.007003| 3386 to_uni_lower_lc||5.006000| 3387 to_uni_lower||5.007003| 3388 to_uni_title_lc||5.006000| 3389 to_uni_title||5.007003| 3390 to_uni_upper_lc||5.006000| 3391 to_uni_upper||5.007003| 3392 to_utf8_case||5.007003| 3393 to_utf8_fold||5.007003| 3394 to_utf8_lower||5.007003| 3395 to_utf8_substr||| 3396 to_utf8_title||5.007003| 3397 to_utf8_upper||5.007003| 3398 token_free||| 3399 token_getmad||| 3400 tokenize_use||| 3401 tokeq||| 3402 tokereport||| 3403 too_few_arguments||| 3404 too_many_arguments||| 3405 uiv_2buf|||n 3406 unlnk||| 3407 unpack_rec||| 3408 unpack_str||5.007003| 3409 unpackstring||5.008001| 3410 unshare_hek_or_pvn||| 3411 unshare_hek||| 3412 unsharepvn||5.004000| 3413 unwind_handler_stack||| 3414 update_debugger_info||| 3415 upg_version||5.009005| 3416 usage||| 3417 utf16_to_utf8_reversed||5.006001| 3418 utf16_to_utf8||5.006001| 3419 utf8_distance||5.006000| 3420 utf8_hop||5.006000| 3421 utf8_length||5.007001| 3422 utf8_mg_pos_cache_update||| 3423 utf8_to_bytes||5.006001| 3424 utf8_to_uvchr||5.007001| 3425 utf8_to_uvuni||5.007001| 3426 utf8n_to_uvchr||| 3427 utf8n_to_uvuni||5.007001| 3428 utilize||| 3429 uvchr_to_utf8_flags||5.007003| 3430 uvchr_to_utf8||| 3431 uvuni_to_utf8_flags||5.007003| 3432 uvuni_to_utf8||5.007001| 3433 validate_suid||| 3434 varname||| 3435 vcmp||5.009000| 3436 vcroak||5.006000| 3437 vdeb||5.007003| 3438 vdie_common||| 3439 vdie_croak_common||| 3440 vdie||| 3441 vform||5.006000| 3442 visit||| 3443 vivify_defelem||| 3444 vivify_ref||| 3445 vload_module|5.006000||p 3446 vmess||5.006000| 3447 vnewSVpvf|5.006000|5.004000|p 3448 vnormal||5.009002| 3449 vnumify||5.009000| 3450 vstringify||5.009000| 3451 vverify||5.009003| 3452 vwarner||5.006000| 3453 vwarn||5.006000| 3454 wait4pid||| 3455 warn_nocontext|||vn 3456 warner_nocontext|||vn 3457 warner|5.006000|5.004000|pv 3458 warn|||v 3459 watch||| 3460 whichsig||| 3461 write_no_mem||| 3462 write_to_stderr||| 3463 xmldump_all||| 3464 xmldump_attr||| 3465 xmldump_eval||| 3466 xmldump_form||| 3467 xmldump_indent|||v 3468 xmldump_packsubs||| 3469 xmldump_sub||| 3470 xmldump_vindent||| 3471 yyerror||| 3472 yylex||| 3473 yyparse||| 3474 yywarn||| 3475 ); 3476 3477 if (exists $opt{'list-unsupported'}) { 3478 my $f; 3479 for $f (sort { lc $a cmp lc $b } keys %API) { 3480 next unless $API{$f}{todo}; 3481 print "$f ", '.'x(40-length($f)), " ", format_version($API{$f}{todo}), "\n"; 3482 } 3483 exit 0; 3484 } 3485 3486 # Scan for possible replacement candidates 3487 3488 my(%replace, %need, %hints, %warnings, %depends); 3489 my $replace = 0; 3490 my($hint, $define, $function); 3491 3492 sub find_api 3493 { 3494 my $code = shift; 3495 $code =~ s{ 3496 / (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]*) 3497 | "[^"\\]*(?:\\.[^"\\]*)*" 3498 | '[^'\\]*(?:\\.[^'\\]*)*' }{}egsx; 3499 grep { exists $API{$_} } $code =~ /(\w+)/mg; 3500 } 3501 3502 while (<DATA>) { 3503 if ($hint) { 3504 my $h = $hint->[0] eq 'Hint' ? \%hints : \%warnings; 3505 if (m{^\s*\*\s(.*?)\s*$}) { 3506 for (@{$hint->[1]}) { 3507 $h->{$_} ||= ''; # suppress warning with older perls 3508 $h->{$_} .= "$1\n"; 3509 } 3510 } 3511 else { undef $hint } 3512 } 3513 3514 $hint = [$1, [split /,?\s+/, $2]] 3515 if m{^\s*$rccs\s+(Hint|Warning):\s+(\w+(?:,?\s+\w+)*)\s*$}; 3516 3517 if ($define) { 3518 if ($define->[1] =~ /\\$/) { 3519 $define->[1] .= $_; 3520 } 3521 else { 3522 if (exists $API{$define->[0]} && $define->[1] !~ /^DPPP_\(/) { 3523 my @n = find_api($define->[1]); 3524 push @{$depends{$define->[0]}}, @n if @n 3525 } 3526 undef $define; 3527 } 3528 } 3529 3530 $define = [$1, $2] if m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(.*)}; 3531 3532 if ($function) { 3533 if (/^}/) { 3534 if (exists $API{$function->[0]}) { 3535 my @n = find_api($function->[1]); 3536 push @{$depends{$function->[0]}}, @n if @n 3537 } 3538 undef $define; 3539 } 3540 else { 3541 $function->[1] .= $_; 3542 } 3543 } 3544 3545 $function = [$1, ''] if m{^DPPP_\(my_(\w+)\)}; 3546 3547 $replace = $1 if m{^\s*$rccs\s+Replace:\s+(\d+)\s+$rcce\s*$}; 3548 $replace{$2} = $1 if $replace and m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(\w+)}; 3549 $replace{$2} = $1 if m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(\w+).*$rccs\s+Replace\s+$rcce}; 3550 $replace{$1} = $2 if m{^\s*$rccs\s+Replace (\w+) with (\w+)\s+$rcce\s*$}; 3551 3552 if (m{^\s*$rccs\s+(\w+)\s+depends\s+on\s+(\w+(\s*,\s*\w+)*)\s+$rcce\s*$}) { 3553 push @{$depends{$1}}, map { s/\s+//g; $_ } split /,/, $2; 3554 } 3555 3556 $need{$1} = 1 if m{^#if\s+defined\(NEED_(\w+)(?:_GLOBAL)?\)}; 3557 } 3558 3559 for (values %depends) { 3560 my %s; 3561 $_ = [sort grep !$s{$_}++, @$_]; 3562 } 3563 3564 if (exists $opt{'api-info'}) { 3565 my $f; 3566 my $count = 0; 3567 my $match = $opt{'api-info'} =~ m!^/(.*)/$! ? $1 : "^\Q$opt{'api-info'}\E\$"; 3568 for $f (sort { lc $a cmp lc $b } keys %API) { 3569 next unless $f =~ /$match/; 3570 print "\n=== $f ===\n\n"; 3571 my $info = 0; 3572 if ($API{$f}{base} || $API{$f}{todo}) { 3573 my $base = format_version($API{$f}{base} || $API{$f}{todo}); 3574 print "Supported at least starting from perl-$base.\n"; 3575 $info++; 3576 } 3577 if ($API{$f}{provided}) { 3578 my $todo = $API{$f}{todo} ? format_version($API{$f}{todo}) : "5.003"; 3579 print "Support by $ppport provided back to perl-$todo.\n"; 3580 print "Support needs to be explicitly requested by NEED_$f.\n" if exists $need{$f}; 3581 print "Depends on: ", join(', ', @{$depends{$f}}), ".\n" if exists $depends{$f}; 3582 print "\n$hints{$f}" if exists $hints{$f}; 3583 print "\nWARNING:\n$warnings{$f}" if exists $warnings{$f}; 3584 $info++; 3585 } 3586 print "No portability information available.\n" unless $info; 3587 $count++; 3588 } 3589 $count or print "Found no API matching '$opt{'api-info'}'."; 3590 print "\n"; 3591 exit 0; 3592 } 3593 3594 if (exists $opt{'list-provided'}) { 3595 my $f; 3596 for $f (sort { lc $a cmp lc $b } keys %API) { 3597 next unless $API{$f}{provided}; 3598 my @flags; 3599 push @flags, 'explicit' if exists $need{$f}; 3600 push @flags, 'depend' if exists $depends{$f}; 3601 push @flags, 'hint' if exists $hints{$f}; 3602 push @flags, 'warning' if exists $warnings{$f}; 3603 my $flags = @flags ? ' ['.join(', ', @flags).']' : ''; 3604 print "$f$flags\n"; 3605 } 3606 exit 0; 3607 } 3608 3609 my @files; 3610 my @srcext = qw( .xs .c .h .cc .cpp -c.inc -xs.inc ); 3611 my $srcext = join '|', map { quotemeta $_ } @srcext; 3612 3613 if (@ARGV) { 3614 my %seen; 3615 for (@ARGV) { 3616 if (-e) { 3617 if (-f) { 3618 push @files, $_ unless $seen{$_}++; 3619 } 3620 else { warn "'$_' is not a file.\n" } 3621 } 3622 else { 3623 my @new = grep { -f } glob $_ 3624 or warn "'$_' does not exist.\n"; 3625 push @files, grep { !$seen{$_}++ } @new; 3626 } 3627 } 3628 } 3629 else { 3630 eval { 3631 require File::Find; 3632 File::Find::find(sub { 3633 $File::Find::name =~ /($srcext)$/i 3634 and push @files, $File::Find::name; 3635 }, '.'); 3636 }; 3637 if ($@) { 3638 @files = map { glob "*$_" } @srcext; 3639 } 3640 } 3641 3642 if (!@ARGV || $opt{filter}) { 3643 my(@in, @out); 3644 my %xsc = map { /(.*)\.xs$/ ? ("$1.c" => 1, "$1.cc" => 1) : () } @files; 3645 for (@files) { 3646 my $out = exists $xsc{$_} || /\b\Q$ppport\E$/i || !/($srcext)$/i; 3647 push @{ $out ? \@out : \@in }, $_; 3648 } 3649 if (@ARGV && @out) { 3650 warning("Skipping the following files (use --nofilter to avoid this):\n| ", join "\n| ", @out); 3651 } 3652 @files = @in; 3653 } 3654 3655 die "No input files given!\n" unless @files; 3656 3657 my(%files, %global, %revreplace); 3658 %revreplace = reverse %replace; 3659 my $filename; 3660 my $patch_opened = 0; 3661 3662 for $filename (@files) { 3663 unless (open IN, "<$filename") { 3664 warn "Unable to read from $filename: $!\n"; 3665 next; 3666 } 3667 3668 info("Scanning $filename ..."); 3669 3670 my $c = do { local $/; <IN> }; 3671 close IN; 3672 3673 my %file = (orig => $c, changes => 0); 3674 3675 # Temporarily remove C/XS comments and strings from the code 3676 my @ccom; 3677 3678 $c =~ s{ 3679 ( ^$HS*\#$HS*include\b[^\r\n]+\b(?:\Q$ppport\E|XSUB\.h)\b[^\r\n]* 3680 | ^$HS*\#$HS*(?:define|elif|if(?:def)?)\b[^\r\n]* ) 3681 | ( ^$HS*\#[^\r\n]* 3682 | "[^"\\]*(?:\\.[^"\\]*)*" 3683 | '[^'\\]*(?:\\.[^'\\]*)*' 3684 | / (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]* ) ) 3685 }{ defined $2 and push @ccom, $2; 3686 defined $1 ? $1 : "$ccs$#ccom$cce" }mgsex; 3687 3688 $file{ccom} = \@ccom; 3689 $file{code} = $c; 3690 $file{has_inc_ppport} = $c =~ /^$HS*#$HS*include[^\r\n]+\b\Q$ppport\E\b/m; 3691 3692 my $func; 3693 3694 for $func (keys %API) { 3695 my $match = $func; 3696 $match .= "|$revreplace{$func}" if exists $revreplace{$func}; 3697 if ($c =~ /\b(?:Perl_)?($match)\b/) { 3698 $file{uses_replace}{$1}++ if exists $revreplace{$func} && $1 eq $revreplace{$func}; 3699 $file{uses_Perl}{$func}++ if $c =~ /\bPerl_$func\b/; 3700 if (exists $API{$func}{provided}) { 3701 $file{uses_provided}{$func}++; 3702 if (!exists $API{$func}{base} || $API{$func}{base} > $opt{'compat-version'}) { 3703 $file{uses}{$func}++; 3704 my @deps = rec_depend($func); 3705 if (@deps) { 3706 $file{uses_deps}{$func} = \@deps; 3707 for (@deps) { 3708 $file{uses}{$_} = 0 unless exists $file{uses}{$_}; 3709 } 3710 } 3711 for ($func, @deps) { 3712 $file{needs}{$_} = 'static' if exists $need{$_}; 3713 } 3714 } 3715 } 3716 if (exists $API{$func}{todo} && $API{$func}{todo} > $opt{'compat-version'}) { 3717 if ($c =~ /\b$func\b/) { 3718 $file{uses_todo}{$func}++; 3719 } 3720 } 3721 } 3722 } 3723 3724 while ($c =~ /^$HS*#$HS*define$HS+(NEED_(\w+?)(_GLOBAL)?)\b/mg) { 3725 if (exists $need{$2}) { 3726 $file{defined $3 ? 'needed_global' : 'needed_static'}{$2}++; 3727 } 3728 else { warning("Possibly wrong #define $1 in $filename") } 3729 } 3730 3731 for (qw(uses needs uses_todo needed_global needed_static)) { 3732 for $func (keys %{$file{$_}}) { 3733 push @{$global{$_}{$func}}, $filename; 3734 } 3735 } 3736 3737 $files{$filename} = \%file; 3738 } 3739 3740 # Globally resolve NEED_'s 3741 my $need; 3742 for $need (keys %{$global{needs}}) { 3743 if (@{$global{needs}{$need}} > 1) { 3744 my @targets = @{$global{needs}{$need}}; 3745 my @t = grep $files{$_}{needed_global}{$need}, @targets; 3746 @targets = @t if @t; 3747 @t = grep /\.xs$/i, @targets; 3748 @targets = @t if @t; 3749 my $target = shift @targets; 3750 $files{$target}{needs}{$need} = 'global'; 3751 for (@{$global{needs}{$need}}) { 3752 $files{$_}{needs}{$need} = 'extern' if $_ ne $target; 3753 } 3754 } 3755 } 3756 3757 for $filename (@files) { 3758 exists $files{$filename} or next; 3759 3760 info("=== Analyzing $filename ==="); 3761 3762 my %file = %{$files{$filename}}; 3763 my $func; 3764 my $c = $file{code}; 3765 my $warnings = 0; 3766 3767 for $func (sort keys %{$file{uses_Perl}}) { 3768 if ($API{$func}{varargs}) { 3769 unless ($API{$func}{nothxarg}) { 3770 my $changes = ($c =~ s{\b(Perl_$func\s*\(\s*)(?!aTHX_?)(\)|[^\s)]*\))} 3771 { $1 . ($2 eq ')' ? 'aTHX' : 'aTHX_ ') . $2 }ge); 3772 if ($changes) { 3773 warning("Doesn't pass interpreter argument aTHX to Perl_$func"); 3774 $file{changes} += $changes; 3775 } 3776 } 3777 } 3778 else { 3779 warning("Uses Perl_$func instead of $func"); 3780 $file{changes} += ($c =~ s{\bPerl_$func(\s*)\((\s*aTHX_?)?\s*} 3781 {$func$1(}g); 3782 } 3783 } 3784 3785 for $func (sort keys %{$file{uses_replace}}) { 3786 warning("Uses $func instead of $replace{$func}"); 3787 $file{changes} += ($c =~ s/\b$func\b/$replace{$func}/g); 3788 } 3789 3790 for $func (sort keys %{$file{uses_provided}}) { 3791 if ($file{uses}{$func}) { 3792 if (exists $file{uses_deps}{$func}) { 3793 diag("Uses $func, which depends on ", join(', ', @{$file{uses_deps}{$func}})); 3794 } 3795 else { 3796 diag("Uses $func"); 3797 } 3798 } 3799 $warnings += hint($func); 3800 } 3801 3802 unless ($opt{quiet}) { 3803 for $func (sort keys %{$file{uses_todo}}) { 3804 print "*** WARNING: Uses $func, which may not be portable below perl ", 3805 format_version($API{$func}{todo}), ", even with '$ppport'\n"; 3806 $warnings++; 3807 } 3808 } 3809 3810 for $func (sort keys %{$file{needed_static}}) { 3811 my $message = ''; 3812 if (not exists $file{uses}{$func}) { 3813 $message = "No need to define NEED_$func if $func is never used"; 3814 } 3815 elsif (exists $file{needs}{$func} && $file{needs}{$func} ne 'static') { 3816 $message = "No need to define NEED_$func when already needed globally"; 3817 } 3818 if ($message) { 3819 diag($message); 3820 $file{changes} += ($c =~ s/^$HS*#$HS*define$HS+NEED_$func\b.*$LF//mg); 3821 } 3822 } 3823 3824 for $func (sort keys %{$file{needed_global}}) { 3825 my $message = ''; 3826 if (not exists $global{uses}{$func}) { 3827 $message = "No need to define NEED_${func}_GLOBAL if $func is never used"; 3828 } 3829 elsif (exists $file{needs}{$func}) { 3830 if ($file{needs}{$func} eq 'extern') { 3831 $message = "No need to define NEED_${func}_GLOBAL when already needed globally"; 3832 } 3833 elsif ($file{needs}{$func} eq 'static') { 3834 $message = "No need to define NEED_${func}_GLOBAL when only used in this file"; 3835 } 3836 } 3837 if ($message) { 3838 diag($message); 3839 $file{changes} += ($c =~ s/^$HS*#$HS*define$HS+NEED_${func}_GLOBAL\b.*$LF//mg); 3840 } 3841 } 3842 3843 $file{needs_inc_ppport} = keys %{$file{uses}}; 3844 3845 if ($file{needs_inc_ppport}) { 3846 my $pp = ''; 3847 3848 for $func (sort keys %{$file{needs}}) { 3849 my $type = $file{needs}{$func}; 3850 next if $type eq 'extern'; 3851 my $suffix = $type eq 'global' ? '_GLOBAL' : ''; 3852 unless (exists $file{"needed_$type"}{$func}) { 3853 if ($type eq 'global') { 3854 diag("Files [@{$global{needs}{$func}}] need $func, adding global request"); 3855 } 3856 else { 3857 diag("File needs $func, adding static request"); 3858 } 3859 $pp .= "#define NEED_$func$suffix\n"; 3860 } 3861 } 3862 3863 if ($pp && ($c =~ s/^(?=$HS*#$HS*define$HS+NEED_\w+)/$pp/m)) { 3864 $pp = ''; 3865 $file{changes}++; 3866 } 3867 3868 unless ($file{has_inc_ppport}) { 3869 diag("Needs to include '$ppport'"); 3870 $pp .= qq(#include "$ppport"\n) 3871 } 3872 3873 if ($pp) { 3874 $file{changes} += ($c =~ s/^($HS*#$HS*define$HS+NEED_\w+.*?)^/$1$pp/ms) 3875 || ($c =~ s/^(?=$HS*#$HS*include.*\Q$ppport\E)/$pp/m) 3876 || ($c =~ s/^($HS*#$HS*include.*XSUB.*\s*?)^/$1$pp/m) 3877 || ($c =~ s/^/$pp/); 3878 } 3879 } 3880 else { 3881 if ($file{has_inc_ppport}) { 3882 diag("No need to include '$ppport'"); 3883 $file{changes} += ($c =~ s/^$HS*?#$HS*include.*\Q$ppport\E.*?$LF//m); 3884 } 3885 } 3886 3887 # put back in our C comments 3888 my $ix; 3889 my $cppc = 0; 3890 my @ccom = @{$file{ccom}}; 3891 for $ix (0 .. $#ccom) { 3892 if (!$opt{cplusplus} && $ccom[$ix] =~ s!^//!!) { 3893 $cppc++; 3894 $file{changes} += $c =~ s/$rccs$ix$rcce/$ccs$ccom[$ix] $cce/; 3895 } 3896 else { 3897 $c =~ s/$rccs$ix$rcce/$ccom[$ix]/; 3898 } 3899 } 3900 3901 if ($cppc) { 3902 my $s = $cppc != 1 ? 's' : ''; 3903 warning("Uses $cppc C++ style comment$s, which is not portable"); 3904 } 3905 3906 my $s = $warnings != 1 ? 's' : ''; 3907 my $warn = $warnings ? " ($warnings warning$s)" : ''; 3908 info("Analysis completed$warn"); 3909 3910 if ($file{changes}) { 3911 if (exists $opt{copy}) { 3912 my $newfile = "$filename$opt{copy}"; 3913 if (-e $newfile) { 3914 error("'$newfile' already exists, refusing to write copy of '$filename'"); 3915 } 3916 else { 3917 local *F; 3918 if (open F, ">$newfile") { 3919 info("Writing copy of '$filename' with changes to '$newfile'"); 3920 print F $c; 3921 close F; 3922 } 3923 else { 3924 error("Cannot open '$newfile' for writing: $!"); 3925 } 3926 } 3927 } 3928 elsif (exists $opt{patch} || $opt{changes}) { 3929 if (exists $opt{patch}) { 3930 unless ($patch_opened) { 3931 if (open PATCH, ">$opt{patch}") { 3932 $patch_opened = 1; 3933 } 3934 else { 3935 error("Cannot open '$opt{patch}' for writing: $!"); 3936 delete $opt{patch}; 3937 $opt{changes} = 1; 3938 goto fallback; 3939 } 3940 } 3941 mydiff(\*PATCH, $filename, $c); 3942 } 3943 else { 3944 fallback: 3945 info("Suggested changes:"); 3946 mydiff(\*STDOUT, $filename, $c); 3947 } 3948 } 3949 else { 3950 my $s = $file{changes} == 1 ? '' : 's'; 3951 info("$file{changes} potentially required change$s detected"); 3952 } 3953 } 3954 else { 3955 info("Looks good"); 3956 } 3957 } 3958 3959 close PATCH if $patch_opened; 3960 3961 exit 0; 3962 3963 3964 sub try_use { eval "use @_;"; return $@ eq '' } 3965 3966 sub mydiff 3967 { 3968 local *F = shift; 3969 my($file, $str) = @_; 3970 my $diff; 3971 3972 if (exists $opt{diff}) { 3973 $diff = run_diff($opt{diff}, $file, $str); 3974 } 3975 3976 if (!defined $diff and try_use('Text::Diff')) { 3977 $diff = Text::Diff::diff($file, \$str, { STYLE => 'Unified' }); 3978 $diff = <<HEADER . $diff; 3979 --- $file 3980 +++ $file.patched 3981 HEADER 3982 } 3983 3984 if (!defined $diff) { 3985 $diff = run_diff('diff -u', $file, $str); 3986 } 3987 3988 if (!defined $diff) { 3989 $diff = run_diff('diff', $file, $str); 3990 } 3991 3992 if (!defined $diff) { 3993 error("Cannot generate a diff. Please install Text::Diff or use --copy."); 3994 return; 3995 } 3996 3997 print F $diff; 3998 } 3999 4000 sub run_diff 4001 { 4002 my($prog, $file, $str) = @_; 4003 my $tmp = 'dppptemp'; 4004 my $suf = 'aaa'; 4005 my $diff = ''; 4006 local *F; 4007 4008 while (-e "$tmp.$suf") { $suf++ } 4009 $tmp = "$tmp.$suf"; 4010 4011 if (open F, ">$tmp") { 4012 print F $str; 4013 close F; 4014 4015 if (open F, "$prog $file $tmp |") { 4016 while (<F>) { 4017 s/\Q$tmp\E/$file.patched/; 4018 $diff .= $_; 4019 } 4020 close F; 4021 unlink $tmp; 4022 return $diff; 4023 } 4024 4025 unlink $tmp; 4026 } 4027 else { 4028 error("Cannot open '$tmp' for writing: $!"); 4029 } 4030 4031 return undef; 4032 } 4033 4034 sub rec_depend 4035 { 4036 my($func, $seen) = @_; 4037 return () unless exists $depends{$func}; 4038 $seen = {%{$seen||{}}}; 4039 return () if $seen->{$func}++; 4040 my %s; 4041 grep !$s{$_}++, map { ($_, rec_depend($_, $seen)) } @{$depends{$func}}; 4042 } 4043 4044 sub parse_version 4045 { 4046 my $ver = shift; 4047 4048 if ($ver =~ /^(\d+)\.(\d+)\.(\d+)$/) { 4049 return ($1, $2, $3); 4050 } 4051 elsif ($ver !~ /^\d+\.[\d_]+$/) { 4052 die "cannot parse version '$ver'\n"; 4053 } 4054 4055 $ver =~ s/_//g; 4056 $ver =~ s/$/000000/; 4057 4058 my($r,$v,$s) = $ver =~ /(\d+)\.(\d{3})(\d{3})/; 4059 4060 $v = int $v; 4061 $s = int $s; 4062 4063 if ($r < 5 || ($r == 5 && $v < 6)) { 4064 if ($s % 10) { 4065 die "cannot parse version '$ver'\n"; 4066 } 4067 } 4068 4069 return ($r, $v, $s); 4070 } 4071 4072 sub format_version 4073 { 4074 my $ver = shift; 4075 4076 $ver =~ s/$/000000/; 4077 my($r,$v,$s) = $ver =~ /(\d+)\.(\d{3})(\d{3})/; 4078 4079 $v = int $v; 4080 $s = int $s; 4081 4082 if ($r < 5 || ($r == 5 && $v < 6)) { 4083 if ($s % 10) { 4084 die "invalid version '$ver'\n"; 4085 } 4086 $s /= 10; 4087 4088 $ver = sprintf "%d.%03d", $r, $v; 4089 $s > 0 and $ver .= sprintf "_%02d", $s; 4090 4091 return $ver; 4092 } 4093 4094 return sprintf "%d.%d.%d", $r, $v, $s; 4095 } 4096 4097 sub info 4098 { 4099 $opt{quiet} and return; 4100 print @_, "\n"; 4101 } 4102 4103 sub diag 4104 { 4105 $opt{quiet} and return; 4106 $opt{diag} and print @_, "\n"; 4107 } 4108 4109 sub warning 4110 { 4111 $opt{quiet} and return; 4112 print "*** ", @_, "\n"; 4113 } 4114 4115 sub error 4116 { 4117 print "*** ERROR: ", @_, "\n"; 4118 } 4119 4120 my %given_hints; 4121 my %given_warnings; 4122 sub hint 4123 { 4124 $opt{quiet} and return; 4125 my $func = shift; 4126 my $rv = 0; 4127 if (exists $warnings{$func} && !$given_warnings{$func}++) { 4128 my $warn = $warnings{$func}; 4129 $warn =~ s!^!*** !mg; 4130 print "*** WARNING: $func\n", $warn; 4131 $rv++; 4132 } 4133 if ($opt{hints} && exists $hints{$func} && !$given_hints{$func}++) { 4134 my $hint = $hints{$func}; 4135 $hint =~ s/^/ /mg; 4136 print " --- hint for $func ---\n", $hint; 4137 } 4138 $rv; 4139 } 4140 4141 sub usage 4142 { 4143 my($usage) = do { local(@ARGV,$/)=($0); <> } =~ /^=head\d$HS+SYNOPSIS\s*^(.*?)\s*^=/ms; 4144 my %M = ( 'I' => '*' ); 4145 $usage =~ s/^\s*perl\s+\S+/$^X $0/; 4146 $usage =~ s/([A-Z])<([^>]+)>/$M{$1}$2$M{$1}/g; 4147 4148 print <<ENDUSAGE; 4149 4150 Usage: $usage 4151 4152 See perldoc $0 for details. 4153 4154 ENDUSAGE 4155 4156 exit 2; 4157 } 4158 4159 sub strip 4160 { 4161 my $self = do { local(@ARGV,$/)=($0); <> }; 4162 my($copy) = $self =~ /^=head\d\s+COPYRIGHT\s*^(.*?)^=\w+/ms; 4163 $copy =~ s/^(?=\S+)/ /gms; 4164 $self =~ s/^$HS+Do NOT edit.*?(?=^-)/$copy/ms; 4165 $self =~ s/^SKIP.*(?=^__DATA__)/SKIP 4166 if (\@ARGV && \$ARGV[0] eq '--unstrip') { 4167 eval { require Devel::PPPort }; 4168 \$@ and die "Cannot require Devel::PPPort, please install.\\n"; 4169 if (\$Devel::PPPort::VERSION < $VERSION) { 4170 die "$0 was originally generated with Devel::PPPort $VERSION.\\n" 4171 . "Your Devel::PPPort is only version \$Devel::PPPort::VERSION.\\n" 4172 . "Please install a newer version, or --unstrip will not work.\\n"; 4173 } 4174 Devel::PPPort::WriteFile(\$0); 4175 exit 0; 4176 } 4177 print <<END; 4178 4179 Sorry, but this is a stripped version of \$0. 4180 4181 To be able to use its original script and doc functionality, 4182 please try to regenerate this file using: 4183 4184 \$^X \$0 --unstrip 4185 4186 END 4187 /ms; 4188 my($pl, $c) = $self =~ /(.*^__DATA__)(.*)/ms; 4189 $c =~ s{ 4190 / (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]*) 4191 | ( "[^"\\]*(?:\\.[^"\\]*)*" 4192 | '[^'\\]*(?:\\.[^'\\]*)*' ) 4193 | ($HS+) }{ defined $2 ? ' ' : ($1 || '') }gsex; 4194 $c =~ s!\s+$!!mg; 4195 $c =~ s!^$LF!!mg; 4196 $c =~ s!^\s*#\s*!#!mg; 4197 $c =~ s!^\s+!!mg; 4198 4199 open OUT, ">$0" or die "cannot strip $0: $!\n"; 4200 print OUT "$pl$c\n"; 4201 4202 exit 0; 4203 } 4204 4205 __DATA__ 4206 */ 4207 4208 #ifndef _P_P_PORTABILITY_H_ 4209 #define _P_P_PORTABILITY_H_ 4210 4211 #ifndef DPPP_NAMESPACE 4212 # define DPPP_NAMESPACE DPPP_ 4213 #endif 4214 4215 #define DPPP_CAT2(x,y) CAT2(x,y) 4216 #define DPPP_(name) DPPP_CAT2(DPPP_NAMESPACE, name) 4217 4218 #ifndef PERL_REVISION 4219 # if !defined(__PATCHLEVEL_H_INCLUDED__) && !(defined(PATCHLEVEL) && defined(SUBVERSION)) 4220 # define PERL_PATCHLEVEL_H_IMPLICIT 4221 # include <patchlevel.h> 4222 # endif 4223 # if !(defined(PERL_VERSION) || (defined(SUBVERSION) && defined(PATCHLEVEL))) 4224 # include <could_not_find_Perl_patchlevel.h> 4225 # endif 4226 # ifndef PERL_REVISION 4227 # define PERL_REVISION (5) 4228 /* Replace: 1 */ 4229 # define PERL_VERSION PATCHLEVEL 4230 # define PERL_SUBVERSION SUBVERSION 4231 /* Replace PERL_PATCHLEVEL with PERL_VERSION */ 4232 /* Replace: 0 */ 4233 # endif 4234 #endif 4235 4236 #define _dpppDEC2BCD(dec) ((((dec)/100)<<8)|((((dec)%100)/10)<<4)|((dec)%10)) 4237 #define PERL_BCDVERSION ((_dpppDEC2BCD(PERL_REVISION)<<24)|(_dpppDEC2BCD(PERL_VERSION)<<12)|_dpppDEC2BCD(PERL_SUBVERSION)) 4238 4239 /* It is very unlikely that anyone will try to use this with Perl 6 4240 (or greater), but who knows. 4241 */ 4242 #if PERL_REVISION != 5 4243 # error ppport.h only works with Perl version 5 4244 #endif /* PERL_REVISION != 5 */ 4245 4246 #ifdef I_LIMITS 4247 # include <limits.h> 4248 #endif 4249 4250 #ifndef PERL_UCHAR_MIN 4251 # define PERL_UCHAR_MIN ((unsigned char)0) 4252 #endif 4253 4254 #ifndef PERL_UCHAR_MAX 4255 # ifdef UCHAR_MAX 4256 # define PERL_UCHAR_MAX ((unsigned char)UCHAR_MAX) 4257 # else 4258 # ifdef MAXUCHAR 4259 # define PERL_UCHAR_MAX ((unsigned char)MAXUCHAR) 4260 # else 4261 # define PERL_UCHAR_MAX ((unsigned char)~(unsigned)0) 4262 # endif 4263 # endif 4264 #endif 4265 4266 #ifndef PERL_USHORT_MIN 4267 # define PERL_USHORT_MIN ((unsigned short)0) 4268 #endif 4269 4270 #ifndef PERL_USHORT_MAX 4271 # ifdef USHORT_MAX 4272 # define PERL_USHORT_MAX ((unsigned short)USHORT_MAX) 4273 # else 4274 # ifdef MAXUSHORT 4275 # define PERL_USHORT_MAX ((unsigned short)MAXUSHORT) 4276 # else 4277 # ifdef USHRT_MAX 4278 # define PERL_USHORT_MAX ((unsigned short)USHRT_MAX) 4279 # else 4280 # define PERL_USHORT_MAX ((unsigned short)~(unsigned)0) 4281 # endif 4282 # endif 4283 # endif 4284 #endif 4285 4286 #ifndef PERL_SHORT_MAX 4287 # ifdef SHORT_MAX 4288 # define PERL_SHORT_MAX ((short)SHORT_MAX) 4289 # else 4290 # ifdef MAXSHORT /* Often used in <values.h> */ 4291 # define PERL_SHORT_MAX ((short)MAXSHORT) 4292 # else 4293 # ifdef SHRT_MAX 4294 # define PERL_SHORT_MAX ((short)SHRT_MAX) 4295 # else 4296 # define PERL_SHORT_MAX ((short) (PERL_USHORT_MAX >> 1)) 4297 # endif 4298 # endif 4299 # endif 4300 #endif 4301 4302 #ifndef PERL_SHORT_MIN 4303 # ifdef SHORT_MIN 4304 # define PERL_SHORT_MIN ((short)SHORT_MIN) 4305 # else 4306 # ifdef MINSHORT 4307 # define PERL_SHORT_MIN ((short)MINSHORT) 4308 # else 4309 # ifdef SHRT_MIN 4310 # define PERL_SHORT_MIN ((short)SHRT_MIN) 4311 # else 4312 # define PERL_SHORT_MIN (-PERL_SHORT_MAX - ((3 & -1) == 3)) 4313 # endif 4314 # endif 4315 # endif 4316 #endif 4317 4318 #ifndef PERL_UINT_MAX 4319 # ifdef UINT_MAX 4320 # define PERL_UINT_MAX ((unsigned int)UINT_MAX) 4321 # else 4322 # ifdef MAXUINT 4323 # define PERL_UINT_MAX ((unsigned int)MAXUINT) 4324 # else 4325 # define PERL_UINT_MAX (~(unsigned int)0) 4326 # endif 4327 # endif 4328 #endif 4329 4330 #ifndef PERL_UINT_MIN 4331 # define PERL_UINT_MIN ((unsigned int)0) 4332 #endif 4333 4334 #ifndef PERL_INT_MAX 4335 # ifdef INT_MAX 4336 # define PERL_INT_MAX ((int)INT_MAX) 4337 # else 4338 # ifdef MAXINT /* Often used in <values.h> */ 4339 # define PERL_INT_MAX ((int)MAXINT) 4340 # else 4341 # define PERL_INT_MAX ((int)(PERL_UINT_MAX >> 1)) 4342 # endif 4343 # endif 4344 #endif 4345 4346 #ifndef PERL_INT_MIN 4347 # ifdef INT_MIN 4348 # define PERL_INT_MIN ((int)INT_MIN) 4349 # else 4350 # ifdef MININT 4351 # define PERL_INT_MIN ((int)MININT) 4352 # else 4353 # define PERL_INT_MIN (-PERL_INT_MAX - ((3 & -1) == 3)) 4354 # endif 4355 # endif 4356 #endif 4357 4358 #ifndef PERL_ULONG_MAX 4359 # ifdef ULONG_MAX 4360 # define PERL_ULONG_MAX ((unsigned long)ULONG_MAX) 4361 # else 4362 # ifdef MAXULONG 4363 # define PERL_ULONG_MAX ((unsigned long)MAXULONG) 4364 # else 4365 # define PERL_ULONG_MAX (~(unsigned long)0) 4366 # endif 4367 # endif 4368 #endif 4369 4370 #ifndef PERL_ULONG_MIN 4371 # define PERL_ULONG_MIN ((unsigned long)0L) 4372 #endif 4373 4374 #ifndef PERL_LONG_MAX 4375 # ifdef LONG_MAX 4376 # define PERL_LONG_MAX ((long)LONG_MAX) 4377 # else 4378 # ifdef MAXLONG 4379 # define PERL_LONG_MAX ((long)MAXLONG) 4380 # else 4381 # define PERL_LONG_MAX ((long) (PERL_ULONG_MAX >> 1)) 4382 # endif 4383 # endif 4384 #endif 4385 4386 #ifndef PERL_LONG_MIN 4387 # ifdef LONG_MIN 4388 # define PERL_LONG_MIN ((long)LONG_MIN) 4389 # else 4390 # ifdef MINLONG 4391 # define PERL_LONG_MIN ((long)MINLONG) 4392 # else 4393 # define PERL_LONG_MIN (-PERL_LONG_MAX - ((3 & -1) == 3)) 4394 # endif 4395 # endif 4396 #endif 4397 4398 #if defined(HAS_QUAD) && (defined(convex) || defined(uts)) 4399 # ifndef PERL_UQUAD_MAX 4400 # ifdef ULONGLONG_MAX 4401 # define PERL_UQUAD_MAX ((unsigned long long)ULONGLONG_MAX) 4402 # else 4403 # ifdef MAXULONGLONG 4404 # define PERL_UQUAD_MAX ((unsigned long long)MAXULONGLONG) 4405 # else 4406 # define PERL_UQUAD_MAX (~(unsigned long long)0) 4407 # endif 4408 # endif 4409 # endif 4410 4411 # ifndef PERL_UQUAD_MIN 4412 # define PERL_UQUAD_MIN ((unsigned long long)0L) 4413 # endif 4414 4415 # ifndef PERL_QUAD_MAX 4416 # ifdef LONGLONG_MAX 4417 # define PERL_QUAD_MAX ((long long)LONGLONG_MAX) 4418 # else 4419 # ifdef MAXLONGLONG 4420 # define PERL_QUAD_MAX ((long long)MAXLONGLONG) 4421 # else 4422 # define PERL_QUAD_MAX ((long long) (PERL_UQUAD_MAX >> 1)) 4423 # endif 4424 # endif 4425 # endif 4426 4427 # ifndef PERL_QUAD_MIN 4428 # ifdef LONGLONG_MIN 4429 # define PERL_QUAD_MIN ((long long)LONGLONG_MIN) 4430 # else 4431 # ifdef MINLONGLONG 4432 # define PERL_QUAD_MIN ((long long)MINLONGLONG) 4433 # else 4434 # define PERL_QUAD_MIN (-PERL_QUAD_MAX - ((3 & -1) == 3)) 4435 # endif 4436 # endif 4437 # endif 4438 #endif 4439 4440 /* This is based on code from 5.003 perl.h */ 4441 #ifdef HAS_QUAD 4442 # ifdef cray 4443 #ifndef IVTYPE 4444 # define IVTYPE int 4445 #endif 4446 4447 #ifndef IV_MIN 4448 # define IV_MIN PERL_INT_MIN 4449 #endif 4450 4451 #ifndef IV_MAX 4452 # define IV_MAX PERL_INT_MAX 4453 #endif 4454 4455 #ifndef UV_MIN 4456 # define UV_MIN PERL_UINT_MIN 4457 #endif 4458 4459 #ifndef UV_MAX 4460 # define UV_MAX PERL_UINT_MAX 4461 #endif 4462 4463 # ifdef INTSIZE 4464 #ifndef IVSIZE 4465 # define IVSIZE INTSIZE 4466 #endif 4467 4468 # endif 4469 # else 4470 # if defined(convex) || defined(uts) 4471 #ifndef IVTYPE 4472 # define IVTYPE long long 4473 #endif 4474 4475 #ifndef IV_MIN 4476 # define IV_MIN PERL_QUAD_MIN 4477 #endif 4478 4479 #ifndef IV_MAX 4480 # define IV_MAX PERL_QUAD_MAX 4481 #endif 4482 4483 #ifndef UV_MIN 4484 # define UV_MIN PERL_UQUAD_MIN 4485 #endif 4486 4487 #ifndef UV_MAX 4488 # define UV_MAX PERL_UQUAD_MAX 4489 #endif 4490 4491 # ifdef LONGLONGSIZE 4492 #ifndef IVSIZE 4493 # define IVSIZE LONGLONGSIZE 4494 #endif 4495 4496 # endif 4497 # else 4498 #ifndef IVTYPE 4499 # define IVTYPE long 4500 #endif 4501 4502 #ifndef IV_MIN 4503 # define IV_MIN PERL_LONG_MIN 4504 #endif 4505 4506 #ifndef IV_MAX 4507 # define IV_MAX PERL_LONG_MAX 4508 #endif 4509 4510 #ifndef UV_MIN 4511 # define UV_MIN PERL_ULONG_MIN 4512 #endif 4513 4514 #ifndef UV_MAX 4515 # define UV_MAX PERL_ULONG_MAX 4516 #endif 4517 4518 # ifdef LONGSIZE 4519 #ifndef IVSIZE 4520 # define IVSIZE LONGSIZE 4521 #endif 4522 4523 # endif 4524 # endif 4525 # endif 4526 #ifndef IVSIZE 4527 # define IVSIZE 8 4528 #endif 4529 4530 #ifndef PERL_QUAD_MIN 4531 # define PERL_QUAD_MIN IV_MIN 4532 #endif 4533 4534 #ifndef PERL_QUAD_MAX 4535 # define PERL_QUAD_MAX IV_MAX 4536 #endif 4537 4538 #ifndef PERL_UQUAD_MIN 4539 # define PERL_UQUAD_MIN UV_MIN 4540 #endif 4541 4542 #ifndef PERL_UQUAD_MAX 4543 # define PERL_UQUAD_MAX UV_MAX 4544 #endif 4545 4546 #else 4547 #ifndef IVTYPE 4548 # define IVTYPE long 4549 #endif 4550 4551 #ifndef IV_MIN 4552 # define IV_MIN PERL_LONG_MIN 4553 #endif 4554 4555 #ifndef IV_MAX 4556 # define IV_MAX PERL_LONG_MAX 4557 #endif 4558 4559 #ifndef UV_MIN 4560 # define UV_MIN PERL_ULONG_MIN 4561 #endif 4562 4563 #ifndef UV_MAX 4564 # define UV_MAX PERL_ULONG_MAX 4565 #endif 4566 4567 #endif 4568 4569 #ifndef IVSIZE 4570 # ifdef LONGSIZE 4571 # define IVSIZE LONGSIZE 4572 # else 4573 # define IVSIZE 4 /* A bold guess, but the best we can make. */ 4574 # endif 4575 #endif 4576 #ifndef UVTYPE 4577 # define UVTYPE unsigned IVTYPE 4578 #endif 4579 4580 #ifndef UVSIZE 4581 # define UVSIZE IVSIZE 4582 #endif 4583 #ifndef sv_setuv 4584 # define sv_setuv(sv, uv) \ 4585 STMT_START { \ 4586 UV TeMpUv = uv; \ 4587 if (TeMpUv <= IV_MAX) \ 4588 sv_setiv(sv, TeMpUv); \ 4589 else \ 4590 sv_setnv(sv, (double)TeMpUv); \ 4591 } STMT_END 4592 #endif 4593 #ifndef newSVuv 4594 # define newSVuv(uv) ((uv) <= IV_MAX ? newSViv((IV)uv) : newSVnv((NV)uv)) 4595 #endif 4596 #ifndef sv_2uv 4597 # define sv_2uv(sv) ((PL_Sv = (sv)), (UV) (SvNOK(PL_Sv) ? SvNV(PL_Sv) : sv_2nv(PL_Sv))) 4598 #endif 4599 4600 #ifndef SvUVX 4601 # define SvUVX(sv) ((UV)SvIVX(sv)) 4602 #endif 4603 4604 #ifndef SvUVXx 4605 # define SvUVXx(sv) SvUVX(sv) 4606 #endif 4607 4608 #ifndef SvUV 4609 # define SvUV(sv) (SvIOK(sv) ? SvUVX(sv) : sv_2uv(sv)) 4610 #endif 4611 4612 #ifndef SvUVx 4613 # define SvUVx(sv) ((PL_Sv = (sv)), SvUV(PL_Sv)) 4614 #endif 4615 4616 /* Hint: sv_uv 4617 * Always use the SvUVx() macro instead of sv_uv(). 4618 */ 4619 #ifndef sv_uv 4620 # define sv_uv(sv) SvUVx(sv) 4621 #endif 4622 4623 #if !defined(SvUOK) && defined(SvIOK_UV) 4624 # define SvUOK(sv) SvIOK_UV(sv) 4625 #endif 4626 #ifndef XST_mUV 4627 # define XST_mUV(i,v) (ST(i) = sv_2mortal(newSVuv(v)) ) 4628 #endif 4629 4630 #ifndef XSRETURN_UV 4631 # define XSRETURN_UV(v) STMT_START { XST_mUV(0,v); XSRETURN(1); } STMT_END 4632 #endif 4633 #ifndef PUSHu 4634 # define PUSHu(u) STMT_START { sv_setuv(TARG, (UV)(u)); PUSHTARG; } STMT_END 4635 #endif 4636 4637 #ifndef XPUSHu 4638 # define XPUSHu(u) STMT_START { sv_setuv(TARG, (UV)(u)); XPUSHTARG; } STMT_END 4639 #endif 4640 4641 #ifdef HAS_MEMCMP 4642 #ifndef memNE 4643 # define memNE(s1,s2,l) (memcmp(s1,s2,l)) 4644 #endif 4645 4646 #ifndef memEQ 4647 # define memEQ(s1,s2,l) (!memcmp(s1,s2,l)) 4648 #endif 4649 4650 #else 4651 #ifndef memNE 4652 # define memNE(s1,s2,l) (bcmp(s1,s2,l)) 4653 #endif 4654 4655 #ifndef memEQ 4656 # define memEQ(s1,s2,l) (!bcmp(s1,s2,l)) 4657 #endif 4658 4659 #endif 4660 #ifndef MoveD 4661 # define MoveD(s,d,n,t) memmove((char*)(d),(char*)(s), (n) * sizeof(t)) 4662 #endif 4663 4664 #ifndef CopyD 4665 # define CopyD(s,d,n,t) memcpy((char*)(d),(char*)(s), (n) * sizeof(t)) 4666 #endif 4667 4668 #ifdef HAS_MEMSET 4669 #ifndef ZeroD 4670 # define ZeroD(d,n,t) memzero((char*)(d), (n) * sizeof(t)) 4671 #endif 4672 4673 #else 4674 #ifndef ZeroD 4675 # define ZeroD(d,n,t) ((void)memzero((char*)(d), (n) * sizeof(t)), d) 4676 #endif 4677 4678 #endif 4679 #ifndef PoisonWith 4680 # define PoisonWith(d,n,t,b) (void)memset((char*)(d), (U8)(b), (n) * sizeof(t)) 4681 #endif 4682 4683 #ifndef PoisonNew 4684 # define PoisonNew(d,n,t) PoisonWith(d,n,t,0xAB) 4685 #endif 4686 4687 #ifndef PoisonFree 4688 # define PoisonFree(d,n,t) PoisonWith(d,n,t,0xEF) 4689 #endif 4690 4691 #ifndef Poison 4692 # define Poison(d,n,t) PoisonFree(d,n,t) 4693 #endif 4694 #ifndef Newx 4695 # define Newx(v,n,t) New(0,v,n,t) 4696 #endif 4697 4698 #ifndef Newxc 4699 # define Newxc(v,n,t,c) Newc(0,v,n,t,c) 4700 #endif 4701 4702 #ifndef Newxz 4703 # define Newxz(v,n,t) Newz(0,v,n,t) 4704 #endif 4705 4706 #ifndef PERL_UNUSED_DECL 4707 # ifdef HASATTRIBUTE 4708 # if (defined(__GNUC__) && defined(__cplusplus)) || defined(__INTEL_COMPILER) 4709 # define PERL_UNUSED_DECL 4710 # else 4711 # define PERL_UNUSED_DECL __attribute__((unused)) 4712 # endif 4713 # else 4714 # define PERL_UNUSED_DECL 4715 # endif 4716 #endif 4717 4718 #ifndef PERL_UNUSED_ARG 4719 # if defined(lint) && defined(S_SPLINT_S) /* www.splint.org */ 4720 # include <note.h> 4721 # define PERL_UNUSED_ARG(x) NOTE(ARGUNUSED(x)) 4722 # else 4723 # define PERL_UNUSED_ARG(x) ((void)x) 4724 # endif 4725 #endif 4726 4727 #ifndef PERL_UNUSED_VAR 4728 # define PERL_UNUSED_VAR(x) ((void)x) 4729 #endif 4730 4731 #ifndef PERL_UNUSED_CONTEXT 4732 # ifdef USE_ITHREADS 4733 # define PERL_UNUSED_CONTEXT PERL_UNUSED_ARG(my_perl) 4734 # else 4735 # define PERL_UNUSED_CONTEXT 4736 # endif 4737 #endif 4738 #ifndef NOOP 4739 # define NOOP /*EMPTY*/(void)0 4740 #endif 4741 4742 #ifndef dNOOP 4743 # define dNOOP extern int /*@unused@*/ Perl___notused PERL_UNUSED_DECL 4744 #endif 4745 4746 #ifndef NVTYPE 4747 # if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) 4748 # define NVTYPE long double 4749 # else 4750 # define NVTYPE double 4751 # endif 4752 typedef NVTYPE NV; 4753 #endif 4754 4755 #ifndef INT2PTR 4756 4757 # if (IVSIZE == PTRSIZE) && (UVSIZE == PTRSIZE) 4758 # define PTRV UV 4759 # define INT2PTR(any,d) (any)(d) 4760 # else 4761 # if PTRSIZE == LONGSIZE 4762 # define PTRV unsigned long 4763 # else 4764 # define PTRV unsigned 4765 # endif 4766 # define INT2PTR(any,d) (any)(PTRV)(d) 4767 # endif 4768 4769 # define NUM2PTR(any,d) (any)(PTRV)(d) 4770 # define PTR2IV(p) INT2PTR(IV,p) 4771 # define PTR2UV(p) INT2PTR(UV,p) 4772 # define PTR2NV(p) NUM2PTR(NV,p) 4773 4774 # if PTRSIZE == LONGSIZE 4775 # define PTR2ul(p) (unsigned long)(p) 4776 # else 4777 # define PTR2ul(p) INT2PTR(unsigned long,p) 4778 # endif 4779 4780 #endif /* !INT2PTR */ 4781 4782 #undef START_EXTERN_C 4783 #undef END_EXTERN_C 4784 #undef EXTERN_C 4785 #ifdef __cplusplus 4786 # define START_EXTERN_C extern "C" { 4787 # define END_EXTERN_C } 4788 # define EXTERN_C extern "C" 4789 #else 4790 # define START_EXTERN_C 4791 # define END_EXTERN_C 4792 # define EXTERN_C extern 4793 #endif 4794 4795 #if defined(PERL_GCC_PEDANTIC) 4796 # ifndef PERL_GCC_BRACE_GROUPS_FORBIDDEN 4797 # define PERL_GCC_BRACE_GROUPS_FORBIDDEN 4798 # endif 4799 #endif 4800 4801 #if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) && !defined(__cplusplus) 4802 # ifndef PERL_USE_GCC_BRACE_GROUPS 4803 # define PERL_USE_GCC_BRACE_GROUPS 4804 # endif 4805 #endif 4806 4807 #undef STMT_START 4808 #undef STMT_END 4809 #ifdef PERL_USE_GCC_BRACE_GROUPS 4810 # define STMT_START (void)( /* gcc supports ``({ STATEMENTS; })'' */ 4811 # define STMT_END ) 4812 #else 4813 # if defined(VOIDFLAGS) && (VOIDFLAGS) && (defined(sun) || defined(__sun__)) && !defined(__GNUC__) 4814 # define STMT_START if (1) 4815 # define STMT_END else (void)0 4816 # else 4817 # define STMT_START do 4818 # define STMT_END while (0) 4819 # endif 4820 #endif 4821 #ifndef boolSV 4822 # define boolSV(b) ((b) ? &PL_sv_yes : &PL_sv_no) 4823 #endif 4824 4825 /* DEFSV appears first in 5.004_56 */ 4826 #ifndef DEFSV 4827 # define DEFSV GvSV(PL_defgv) 4828 #endif 4829 4830 #ifndef SAVE_DEFSV 4831 # define SAVE_DEFSV SAVESPTR(GvSV(PL_defgv)) 4832 #endif 4833 4834 /* Older perls (<=5.003) lack AvFILLp */ 4835 #ifndef AvFILLp 4836 # define AvFILLp AvFILL 4837 #endif 4838 #ifndef ERRSV 4839 # define ERRSV get_sv("@",FALSE) 4840 #endif 4841 #ifndef newSVpvn 4842 # define newSVpvn(data,len) ((data) \ 4843 ? ((len) ? newSVpv((data), (len)) : newSVpv("", 0)) \ 4844 : newSV(0)) 4845 #endif 4846 4847 /* Hint: gv_stashpvn 4848 * This function's backport doesn't support the length parameter, but 4849 * rather ignores it. Portability can only be ensured if the length 4850 * parameter is used for speed reasons, but the length can always be 4851 * correctly computed from the string argument. 4852 */ 4853 #ifndef gv_stashpvn 4854 # define gv_stashpvn(str,len,create) gv_stashpv(str,create) 4855 #endif 4856 4857 /* Replace: 1 */ 4858 #ifndef get_cv 4859 # define get_cv perl_get_cv 4860 #endif 4861 4862 #ifndef get_sv 4863 # define get_sv perl_get_sv 4864 #endif 4865 4866 #ifndef get_av 4867 # define get_av perl_get_av 4868 #endif 4869 4870 #ifndef get_hv 4871 # define get_hv perl_get_hv 4872 #endif 4873 4874 /* Replace: 0 */ 4875 #ifndef dUNDERBAR 4876 # define dUNDERBAR dNOOP 4877 #endif 4878 4879 #ifndef UNDERBAR 4880 # define UNDERBAR DEFSV 4881 #endif 4882 #ifndef dAX 4883 # define dAX I32 ax = MARK - PL_stack_base + 1 4884 #endif 4885 4886 #ifndef dITEMS 4887 # define dITEMS I32 items = SP - MARK 4888 #endif 4889 #ifndef dXSTARG 4890 # define dXSTARG SV * targ = sv_newmortal() 4891 #endif 4892 #ifndef dAXMARK 4893 # define dAXMARK I32 ax = POPMARK; \ 4894 register SV ** const mark = PL_stack_base + ax++ 4895 #endif 4896 #ifndef XSprePUSH 4897 # define XSprePUSH (sp = PL_stack_base + ax - 1) 4898 #endif 4899 4900 #if (PERL_BCDVERSION < 0x5005000) 4901 # undef XSRETURN 4902 # define XSRETURN(off) \ 4903 STMT_START { \ 4904 PL_stack_sp = PL_stack_base + ax + ((off) - 1); \ 4905 return; \ 4906 } STMT_END 4907 #endif 4908 #ifndef PERL_ABS 4909 # define PERL_ABS(x) ((x) < 0 ? -(x) : (x)) 4910 #endif 4911 #ifndef dVAR 4912 # define dVAR dNOOP 4913 #endif 4914 #ifndef SVf 4915 # define SVf "_" 4916 #endif 4917 #ifndef UTF8_MAXBYTES 4918 # define UTF8_MAXBYTES UTF8_MAXLEN 4919 #endif 4920 #ifndef PERL_HASH 4921 # define PERL_HASH(hash,str,len) \ 4922 STMT_START { \ 4923 const char *s_PeRlHaSh = str; \ 4924 I32 i_PeRlHaSh = len; \ 4925 U32 hash_PeRlHaSh = 0; \ 4926 while (i_PeRlHaSh--) \ 4927 hash_PeRlHaSh = hash_PeRlHaSh * 33 + *s_PeRlHaSh++; \ 4928 (hash) = hash_PeRlHaSh; \ 4929 } STMT_END 4930 #endif 4931 4932 #ifndef PERL_SIGNALS_UNSAFE_FLAG 4933 4934 #define PERL_SIGNALS_UNSAFE_FLAG 0x0001 4935 4936 #if (PERL_BCDVERSION < 0x5008000) 4937 # define D_PPP_PERL_SIGNALS_INIT PERL_SIGNALS_UNSAFE_FLAG 4938 #else 4939 # define D_PPP_PERL_SIGNALS_INIT 0 4940 #endif 4941 4942 #if defined(NEED_PL_signals) 4943 static U32 DPPP_(my_PL_signals) = D_PPP_PERL_SIGNALS_INIT; 4944 #elif defined(NEED_PL_signals_GLOBAL) 4945 U32 DPPP_(my_PL_signals) = D_PPP_PERL_SIGNALS_INIT; 4946 #else 4947 extern U32 DPPP_(my_PL_signals); 4948 #endif 4949 #define PL_signals DPPP_(my_PL_signals) 4950 4951 #endif 4952 4953 /* Hint: PL_ppaddr 4954 * Calling an op via PL_ppaddr requires passing a context argument 4955 * for threaded builds. Since the context argument is different for 4956 * 5.005 perls, you can use aTHXR (supplied by ppport.h), which will 4957 * automatically be defined as the correct argument. 4958 */ 4959 4960 #if (PERL_BCDVERSION <= 0x5005005) 4961 /* Replace: 1 */ 4962 # define PL_ppaddr ppaddr 4963 # define PL_no_modify no_modify 4964 /* Replace: 0 */ 4965 #endif 4966 4967 #if (PERL_BCDVERSION <= 0x5004005) 4968 /* Replace: 1 */ 4969 # define PL_DBsignal DBsignal 4970 # define PL_DBsingle DBsingle 4971 # define PL_DBsub DBsub 4972 # define PL_DBtrace DBtrace 4973 # define PL_Sv Sv 4974 # define PL_compiling compiling 4975 # define PL_copline copline 4976 # define PL_curcop curcop 4977 # define PL_curstash curstash 4978 # define PL_debstash debstash 4979 # define PL_defgv defgv 4980 # define PL_diehook diehook 4981 # define PL_dirty dirty 4982 # define PL_dowarn dowarn 4983 # define PL_errgv errgv 4984 # define PL_expect expect 4985 # define PL_hexdigit hexdigit 4986 # define PL_hints hints 4987 # define PL_laststatval laststatval 4988 # define PL_na na 4989 # define PL_perl_destruct_level perl_destruct_level 4990 # define PL_perldb perldb 4991 # define PL_rsfp_filters rsfp_filters 4992 # define PL_rsfp rsfp 4993 # define PL_stack_base stack_base 4994 # define PL_stack_sp stack_sp 4995 # define PL_statcache statcache 4996 # define PL_stdingv stdingv 4997 # define PL_sv_arenaroot sv_arenaroot 4998 # define PL_sv_no sv_no 4999 # define PL_sv_undef sv_undef 5000 # define PL_sv_yes sv_yes 5001 # define PL_tainted tainted 5002 # define PL_tainting tainting 5003 /* Replace: 0 */ 5004 #endif 5005 5006 /* Warning: PL_expect, PL_copline, PL_rsfp, PL_rsfp_filters 5007 * Do not use this variable. It is internal to the perl parser 5008 * and may change or even be removed in the future. Note that 5009 * as of perl 5.9.5 you cannot assign to this variable anymore. 5010 */ 5011 5012 /* TODO: cannot assign to these vars; is it worth fixing? */ 5013 #if (PERL_BCDVERSION >= 0x5009005) 5014 # define PL_expect (PL_parser ? PL_parser->expect : 0) 5015 # define PL_copline (PL_parser ? PL_parser->copline : 0) 5016 # define PL_rsfp (PL_parser ? PL_parser->rsfp : (PerlIO *) 0) 5017 # define PL_rsfp_filters (PL_parser ? PL_parser->rsfp_filters : (AV *) 0) 5018 #endif 5019 #ifndef dTHR 5020 # define dTHR dNOOP 5021 #endif 5022 #ifndef dTHX 5023 # define dTHX dNOOP 5024 #endif 5025 5026 #ifndef dTHXa 5027 # define dTHXa(x) dNOOP 5028 #endif 5029 #ifndef pTHX 5030 # define pTHX void 5031 #endif 5032 5033 #ifndef pTHX_ 5034 # define pTHX_ 5035 #endif 5036 5037 #ifndef aTHX 5038 # define aTHX 5039 #endif 5040 5041 #ifndef aTHX_ 5042 # define aTHX_ 5043 #endif 5044 5045 #if (PERL_BCDVERSION < 0x5006000) 5046 # ifdef USE_THREADS 5047 # define aTHXR thr 5048 # define aTHXR_ thr, 5049 # else 5050 # define aTHXR 5051 # define aTHXR_ 5052 # endif 5053 # define dTHXR dTHR 5054 #else 5055 # define aTHXR aTHX 5056 # define aTHXR_ aTHX_ 5057 # define dTHXR dTHX 5058 #endif 5059 #ifndef dTHXoa 5060 # define dTHXoa(x) dTHXa(x) 5061 #endif 5062 #ifndef PUSHmortal 5063 # define PUSHmortal PUSHs(sv_newmortal()) 5064 #endif 5065 5066 #ifndef mPUSHp 5067 # define mPUSHp(p,l) sv_setpvn_mg(PUSHmortal, (p), (l)) 5068 #endif 5069 5070 #ifndef mPUSHn 5071 # define mPUSHn(n) sv_setnv_mg(PUSHmortal, (NV)(n)) 5072 #endif 5073 5074 #ifndef mPUSHi 5075 # define mPUSHi(i) sv_setiv_mg(PUSHmortal, (IV)(i)) 5076 #endif 5077 5078 #ifndef mPUSHu 5079 # define mPUSHu(u) sv_setuv_mg(PUSHmortal, (UV)(u)) 5080 #endif 5081 #ifndef XPUSHmortal 5082 # define XPUSHmortal XPUSHs(sv_newmortal()) 5083 #endif 5084 5085 #ifndef mXPUSHp 5086 # define mXPUSHp(p,l) STMT_START { EXTEND(sp,1); sv_setpvn_mg(PUSHmortal, (p), (l)); } STMT_END 5087 #endif 5088 5089 #ifndef mXPUSHn 5090 # define mXPUSHn(n) STMT_START { EXTEND(sp,1); sv_setnv_mg(PUSHmortal, (NV)(n)); } STMT_END 5091 #endif 5092 5093 #ifndef mXPUSHi 5094 # define mXPUSHi(i) STMT_START { EXTEND(sp,1); sv_setiv_mg(PUSHmortal, (IV)(i)); } STMT_END 5095 #endif 5096 5097 #ifndef mXPUSHu 5098 # define mXPUSHu(u) STMT_START { EXTEND(sp,1); sv_setuv_mg(PUSHmortal, (UV)(u)); } STMT_END 5099 #endif 5100 5101 /* Replace: 1 */ 5102 #ifndef call_sv 5103 # define call_sv perl_call_sv 5104 #endif 5105 5106 #ifndef call_pv 5107 # define call_pv perl_call_pv 5108 #endif 5109 5110 #ifndef call_argv 5111 # define call_argv perl_call_argv 5112 #endif 5113 5114 #ifndef call_method 5115 # define call_method perl_call_method 5116 #endif 5117 #ifndef eval_sv 5118 # define eval_sv perl_eval_sv 5119 #endif 5120 #ifndef PERL_LOADMOD_DENY 5121 # define PERL_LOADMOD_DENY 0x1 5122 #endif 5123 5124 #ifndef PERL_LOADMOD_NOIMPORT 5125 # define PERL_LOADMOD_NOIMPORT 0x2 5126 #endif 5127 5128 #ifndef PERL_LOADMOD_IMPORT_OPS 5129 # define PERL_LOADMOD_IMPORT_OPS 0x4 5130 #endif 5131 5132 /* Replace: 0 */ 5133 5134 /* Replace perl_eval_pv with eval_pv */ 5135 5136 #ifndef eval_pv 5137 #if defined(NEED_eval_pv) 5138 static SV* DPPP_(my_eval_pv)(char *p, I32 croak_on_error); 5139 static 5140 #else 5141 extern SV* DPPP_(my_eval_pv)(char *p, I32 croak_on_error); 5142 #endif 5143 5144 #ifdef eval_pv 5145 # undef eval_pv 5146 #endif 5147 #define eval_pv(a,b) DPPP_(my_eval_pv)(aTHX_ a,b) 5148 #define Perl_eval_pv DPPP_(my_eval_pv) 5149 5150 #if defined(NEED_eval_pv) || defined(NEED_eval_pv_GLOBAL) 5151 5152 SV* 5153 DPPP_(my_eval_pv)(char *p, I32 croak_on_error) 5154 { 5155 dSP; 5156 SV* sv = newSVpv(p, 0); 5157 5158 PUSHMARK(sp); 5159 eval_sv(sv, G_SCALAR); 5160 SvREFCNT_dec(sv); 5161 5162 SPAGAIN; 5163 sv = POPs; 5164 PUTBACK; 5165 5166 if (croak_on_error && SvTRUE(GvSV(errgv))) 5167 croak(SvPVx(GvSV(errgv), na)); 5168 5169 return sv; 5170 } 5171 5172 #endif 5173 #endif 5174 5175 #ifndef vload_module 5176 #if defined(NEED_vload_module) 5177 static void DPPP_(my_vload_module)(U32 flags, SV *name, SV *ver, va_list *args); 5178 static 5179 #else 5180 extern void DPPP_(my_vload_module)(U32 flags, SV *name, SV *ver, va_list *args); 5181 #endif 5182 5183 #ifdef vload_module 5184 # undef vload_module 5185 #endif 5186 #define vload_module(a,b,c,d) DPPP_(my_vload_module)(aTHX_ a,b,c,d) 5187 #define Perl_vload_module DPPP_(my_vload_module) 5188 5189 #if defined(NEED_vload_module) || defined(NEED_vload_module_GLOBAL) 5190 5191 void 5192 DPPP_(my_vload_module)(U32 flags, SV *name, SV *ver, va_list *args) 5193 { 5194 dTHR; 5195 dVAR; 5196 OP *veop, *imop; 5197 5198 OP * const modname = newSVOP(OP_CONST, 0, name); 5199 /* 5.005 has a somewhat hacky force_normal that doesn't croak on 5200 SvREADONLY() if PL_compling is true. Current perls take care in 5201 ck_require() to correctly turn off SvREADONLY before calling 5202 force_normal_flags(). This seems a better fix than fudging PL_compling 5203 */ 5204 SvREADONLY_off(((SVOP*)modname)->op_sv); 5205 modname->op_private |= OPpCONST_BARE; 5206 if (ver) { 5207 veop = newSVOP(OP_CONST, 0, ver); 5208 } 5209 else 5210 veop = NULL; 5211 if (flags & PERL_LOADMOD_NOIMPORT) { 5212 imop = sawparens(newNULLLIST()); 5213 } 5214 else if (flags & PERL_LOADMOD_IMPORT_OPS) { 5215 imop = va_arg(*args, OP*); 5216 } 5217 else { 5218 SV *sv; 5219 imop = NULL; 5220 sv = va_arg(*args, SV*); 5221 while (sv) { 5222 imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv)); 5223 sv = va_arg(*args, SV*); 5224 } 5225 } 5226 { 5227 const line_t ocopline = PL_copline; 5228 COP * const ocurcop = PL_curcop; 5229 const int oexpect = PL_expect; 5230 5231 #if (PERL_BCDVERSION >= 0x5004000) 5232 utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0), 5233 veop, modname, imop); 5234 #else 5235 utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(), 5236 modname, imop); 5237 #endif 5238 PL_expect = oexpect; 5239 PL_copline = ocopline; 5240 PL_curcop = ocurcop; 5241 } 5242 } 5243 5244 #endif 5245 #endif 5246 5247 #ifndef load_module 5248 #if defined(NEED_load_module) 5249 static void DPPP_(my_load_module)(U32 flags, SV *name, SV *ver, ...); 5250 static 5251 #else 5252 extern void DPPP_(my_load_module)(U32 flags, SV *name, SV *ver, ...); 5253 #endif 5254 5255 #ifdef load_module 5256 # undef load_module 5257 #endif 5258 #define load_module DPPP_(my_load_module) 5259 #define Perl_load_module DPPP_(my_load_module) 5260 5261 #if defined(NEED_load_module) || defined(NEED_load_module_GLOBAL) 5262 5263 void 5264 DPPP_(my_load_module)(U32 flags, SV *name, SV *ver, ...) 5265 { 5266 va_list args; 5267 va_start(args, ver); 5268 vload_module(flags, name, ver, &args); 5269 va_end(args); 5270 } 5271 5272 #endif 5273 #endif 5274 #ifndef newRV_inc 5275 # define newRV_inc(sv) newRV(sv) /* Replace */ 5276 #endif 5277 5278 #ifndef newRV_noinc 5279 #if defined(NEED_newRV_noinc) 5280 static SV * DPPP_(my_newRV_noinc)(SV *sv); 5281 static 5282 #else 5283 extern SV * DPPP_(my_newRV_noinc)(SV *sv); 5284 #endif 5285 5286 #ifdef newRV_noinc 5287 # undef newRV_noinc 5288 #endif 5289 #define newRV_noinc(a) DPPP_(my_newRV_noinc)(aTHX_ a) 5290 #define Perl_newRV_noinc DPPP_(my_newRV_noinc) 5291 5292 #if defined(NEED_newRV_noinc) || defined(NEED_newRV_noinc_GLOBAL) 5293 SV * 5294 DPPP_(my_newRV_noinc)(SV *sv) 5295 { 5296 SV *rv = (SV *)newRV(sv); 5297 SvREFCNT_dec(sv); 5298 return rv; 5299 } 5300 #endif 5301 #endif 5302 5303 /* Hint: newCONSTSUB 5304 * Returns a CV* as of perl-5.7.1. This return value is not supported 5305 * by Devel::PPPort. 5306 */ 5307 5308 /* newCONSTSUB from IO.xs is in the core starting with 5.004_63 */ 5309 #if (PERL_BCDVERSION < 0x5004063) && (PERL_BCDVERSION != 0x5004005) 5310 #if defined(NEED_newCONSTSUB) 5311 static void DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv); 5312 static 5313 #else 5314 extern void DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv); 5315 #endif 5316 5317 #ifdef newCONSTSUB 5318 # undef newCONSTSUB 5319 #endif 5320 #define newCONSTSUB(a,b,c) DPPP_(my_newCONSTSUB)(aTHX_ a,b,c) 5321 #define Perl_newCONSTSUB DPPP_(my_newCONSTSUB) 5322 5323 #if defined(NEED_newCONSTSUB) || defined(NEED_newCONSTSUB_GLOBAL) 5324 5325 void 5326 DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv) 5327 { 5328 U32 oldhints = PL_hints; 5329 HV *old_cop_stash = PL_curcop->cop_stash; 5330 HV *old_curstash = PL_curstash; 5331 line_t oldline = PL_curcop->cop_line; 5332 PL_curcop->cop_line = PL_copline; 5333 5334 PL_hints &= ~HINT_BLOCK_SCOPE; 5335 if (stash) 5336 PL_curstash = PL_curcop->cop_stash = stash; 5337 5338 newSUB( 5339 5340 #if (PERL_BCDVERSION < 0x5003022) 5341 start_subparse(), 5342 #elif (PERL_BCDVERSION == 0x5003022) 5343 start_subparse(0), 5344 #else /* 5.003_23 onwards */ 5345 start_subparse(FALSE, 0), 5346 #endif 5347 5348 newSVOP(OP_CONST, 0, newSVpv((char *) name, 0)), 5349 newSVOP(OP_CONST, 0, &PL_sv_no), /* SvPV(&PL_sv_no) == "" -- GMB */ 5350 newSTATEOP(0, Nullch, newSVOP(OP_CONST, 0, sv)) 5351 ); 5352 5353 PL_hints = oldhints; 5354 PL_curcop->cop_stash = old_cop_stash; 5355 PL_curstash = old_curstash; 5356 PL_curcop->cop_line = oldline; 5357 } 5358 #endif 5359 #endif 5360 5361 /* 5362 * Boilerplate macros for initializing and accessing interpreter-local 5363 * data from C. All statics in extensions should be reworked to use 5364 * this, if you want to make the extension thread-safe. See ext/re/re.xs 5365 * for an example of the use of these macros. 5366 * 5367 * Code that uses these macros is responsible for the following: 5368 * 1. #define MY_CXT_KEY to a unique string, e.g. "DynaLoader_guts" 5369 * 2. Declare a typedef named my_cxt_t that is a structure that contains 5370 * all the data that needs to be interpreter-local. 5371 * 3. Use the START_MY_CXT macro after the declaration of my_cxt_t. 5372 * 4. Use the MY_CXT_INIT macro such that it is called exactly once 5373 * (typically put in the BOOT: section). 5374 * 5. Use the members of the my_cxt_t structure everywhere as 5375 * MY_CXT.member. 5376 * 6. Use the dMY_CXT macro (a declaration) in all the functions that 5377 * access MY_CXT. 5378 */ 5379 5380 #if defined(MULTIPLICITY) || defined(PERL_OBJECT) || \ 5381 defined(PERL_CAPI) || defined(PERL_IMPLICIT_CONTEXT) 5382 5383 #ifndef START_MY_CXT 5384 5385 /* This must appear in all extensions that define a my_cxt_t structure, 5386 * right after the definition (i.e. at file scope). The non-threads 5387 * case below uses it to declare the data as static. */ 5388 #define START_MY_CXT 5389 5390 #if (PERL_BCDVERSION < 0x5004068) 5391 /* Fetches the SV that keeps the per-interpreter data. */ 5392 #define dMY_CXT_SV \ 5393 SV *my_cxt_sv = get_sv(MY_CXT_KEY, FALSE) 5394 #else /* >= perl5.004_68 */ 5395 #define dMY_CXT_SV \ 5396 SV *my_cxt_sv = *hv_fetch(PL_modglobal, MY_CXT_KEY, \ 5397 sizeof(MY_CXT_KEY)-1, TRUE) 5398 #endif /* < perl5.004_68 */ 5399 5400 /* This declaration should be used within all functions that use the 5401 * interpreter-local data. */ 5402 #define dMY_CXT \ 5403 dMY_CXT_SV; \ 5404 my_cxt_t *my_cxtp = INT2PTR(my_cxt_t*,SvUV(my_cxt_sv)) 5405 5406 /* Creates and zeroes the per-interpreter data. 5407 * (We allocate my_cxtp in a Perl SV so that it will be released when 5408 * the interpreter goes away.) */ 5409 #define MY_CXT_INIT \ 5410 dMY_CXT_SV; \ 5411 /* newSV() allocates one more than needed */ \ 5412 my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\ 5413 Zero(my_cxtp, 1, my_cxt_t); \ 5414 sv_setuv(my_cxt_sv, PTR2UV(my_cxtp)) 5415 5416 /* This macro must be used to access members of the my_cxt_t structure. 5417 * e.g. MYCXT.some_data */ 5418 #define MY_CXT (*my_cxtp) 5419 5420 /* Judicious use of these macros can reduce the number of times dMY_CXT 5421 * is used. Use is similar to pTHX, aTHX etc. */ 5422 #define pMY_CXT my_cxt_t *my_cxtp 5423 #define pMY_CXT_ pMY_CXT, 5424 #define _pMY_CXT ,pMY_CXT 5425 #define aMY_CXT my_cxtp 5426 #define aMY_CXT_ aMY_CXT, 5427 #define _aMY_CXT ,aMY_CXT 5428 5429 #endif /* START_MY_CXT */ 5430 5431 #ifndef MY_CXT_CLONE 5432 /* Clones the per-interpreter data. */ 5433 #define MY_CXT_CLONE \ 5434 dMY_CXT_SV; \ 5435 my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\ 5436 Copy(INT2PTR(my_cxt_t*, SvUV(my_cxt_sv)), my_cxtp, 1, my_cxt_t);\ 5437 sv_setuv(my_cxt_sv, PTR2UV(my_cxtp)) 5438 #endif 5439 5440 #else /* single interpreter */ 5441 5442 #ifndef START_MY_CXT 5443 5444 #define START_MY_CXT static my_cxt_t my_cxt; 5445 #define dMY_CXT_SV dNOOP 5446 #define dMY_CXT dNOOP 5447 #define MY_CXT_INIT NOOP 5448 #define MY_CXT my_cxt 5449 5450 #define pMY_CXT void 5451 #define pMY_CXT_ 5452 #define _pMY_CXT 5453 #define aMY_CXT 5454 #define aMY_CXT_ 5455 #define _aMY_CXT 5456 5457 #endif /* START_MY_CXT */ 5458 5459 #ifndef MY_CXT_CLONE 5460 #define MY_CXT_CLONE NOOP 5461 #endif 5462 5463 #endif 5464 5465 #ifndef IVdf 5466 # if IVSIZE == LONGSIZE 5467 # define IVdf "ld" 5468 # define UVuf "lu" 5469 # define UVof "lo" 5470 # define UVxf "lx" 5471 # define UVXf "lX" 5472 # else 5473 # if IVSIZE == INTSIZE 5474 # define IVdf "d" 5475 # define UVuf "u" 5476 # define UVof "o" 5477 # define UVxf "x" 5478 # define UVXf "X" 5479 # endif 5480 # endif 5481 #endif 5482 5483 #ifndef NVef 5484 # if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && \ 5485 defined(PERL_PRIfldbl) /* Not very likely, but let's try anyway. */ 5486 # define NVef PERL_PRIeldbl 5487 # define NVff PERL_PRIfldbl 5488 # define NVgf PERL_PRIgldbl 5489 # else 5490 # define NVef "e" 5491 # define NVff "f" 5492 # define NVgf "g" 5493 # endif 5494 #endif 5495 5496 #ifndef SvREFCNT_inc 5497 # ifdef PERL_USE_GCC_BRACE_GROUPS 5498 # define SvREFCNT_inc(sv) \ 5499 ({ \ 5500 SV * const _sv = (SV*)(sv); \ 5501 if (_sv) \ 5502 (SvREFCNT(_sv))++; \ 5503 _sv; \ 5504 }) 5505 # else 5506 # define SvREFCNT_inc(sv) \ 5507 ((PL_Sv=(SV*)(sv)) ? (++(SvREFCNT(PL_Sv)),PL_Sv) : NULL) 5508 # endif 5509 #endif 5510 5511 #ifndef SvREFCNT_inc_simple 5512 # ifdef PERL_USE_GCC_BRACE_GROUPS 5513 # define SvREFCNT_inc_simple(sv) \ 5514 ({ \ 5515 if (sv) \ 5516 (SvREFCNT(sv))++; \ 5517 (SV *)(sv); \ 5518 }) 5519 # else 5520 # define SvREFCNT_inc_simple(sv) \ 5521 ((sv) ? (SvREFCNT(sv)++,(SV*)(sv)) : NULL) 5522 # endif 5523 #endif 5524 5525 #ifndef SvREFCNT_inc_NN 5526 # ifdef PERL_USE_GCC_BRACE_GROUPS 5527 # define SvREFCNT_inc_NN(sv) \ 5528 ({ \ 5529 SV * const _sv = (SV*)(sv); \ 5530 SvREFCNT(_sv)++; \ 5531 _sv; \ 5532 }) 5533 # else 5534 # define SvREFCNT_inc_NN(sv) \ 5535 (PL_Sv=(SV*)(sv),++(SvREFCNT(PL_Sv)),PL_Sv) 5536 # endif 5537 #endif 5538 5539 #ifndef SvREFCNT_inc_void 5540 # ifdef PERL_USE_GCC_BRACE_GROUPS 5541 # define SvREFCNT_inc_void(sv) \ 5542 ({ \ 5543 SV * const _sv = (SV*)(sv); \ 5544 if (_sv) \ 5545 (void)(SvREFCNT(_sv)++); \ 5546 }) 5547 # else 5548 # define SvREFCNT_inc_void(sv) \ 5549 (void)((PL_Sv=(SV*)(sv)) ? ++(SvREFCNT(PL_Sv)) : 0) 5550 # endif 5551 #endif 5552 #ifndef SvREFCNT_inc_simple_void 5553 # define SvREFCNT_inc_simple_void(sv) STMT_START { if (sv) SvREFCNT(sv)++; } STMT_END 5554 #endif 5555 5556 #ifndef SvREFCNT_inc_simple_NN 5557 # define SvREFCNT_inc_simple_NN(sv) (++SvREFCNT(sv), (SV*)(sv)) 5558 #endif 5559 5560 #ifndef SvREFCNT_inc_void_NN 5561 # define SvREFCNT_inc_void_NN(sv) (void)(++SvREFCNT((SV*)(sv))) 5562 #endif 5563 5564 #ifndef SvREFCNT_inc_simple_void_NN 5565 # define SvREFCNT_inc_simple_void_NN(sv) (void)(++SvREFCNT((SV*)(sv))) 5566 #endif 5567 5568 /* Backwards compatibility stuff... :-( */ 5569 #if !defined(NEED_sv_2pv_flags) && defined(NEED_sv_2pv_nolen) 5570 # define NEED_sv_2pv_flags 5571 #endif 5572 #if !defined(NEED_sv_2pv_flags_GLOBAL) && defined(NEED_sv_2pv_nolen_GLOBAL) 5573 # define NEED_sv_2pv_flags_GLOBAL 5574 #endif 5575 5576 /* Hint: sv_2pv_nolen 5577 * Use the SvPV_nolen() or SvPV_nolen_const() macros instead of sv_2pv_nolen(). 5578 */ 5579 #ifndef sv_2pv_nolen 5580 # define sv_2pv_nolen(sv) SvPV_nolen(sv) 5581 #endif 5582 5583 #ifdef SvPVbyte 5584 5585 /* Hint: SvPVbyte 5586 * Does not work in perl-5.6.1, ppport.h implements a version 5587 * borrowed from perl-5.7.3. 5588 */ 5589 5590 #if (PERL_BCDVERSION < 0x5007000) 5591 5592 #if defined(NEED_sv_2pvbyte) 5593 static char * DPPP_(my_sv_2pvbyte)(pTHX_ SV * sv, STRLEN * lp); 5594 static 5595 #else 5596 extern char * DPPP_(my_sv_2pvbyte)(pTHX_ SV * sv, STRLEN * lp); 5597 #endif 5598 5599 #ifdef sv_2pvbyte 5600 # undef sv_2pvbyte 5601 #endif 5602 #define sv_2pvbyte(a,b) DPPP_(my_sv_2pvbyte)(aTHX_ a,b) 5603 #define Perl_sv_2pvbyte DPPP_(my_sv_2pvbyte) 5604 5605 #if defined(NEED_sv_2pvbyte) || defined(NEED_sv_2pvbyte_GLOBAL) 5606 5607 char * 5608 DPPP_(my_sv_2pvbyte)(pTHX_ SV *sv, STRLEN *lp) 5609 { 5610 sv_utf8_downgrade(sv,0); 5611 return SvPV(sv,*lp); 5612 } 5613 5614 #endif 5615 5616 /* Hint: sv_2pvbyte 5617 * Use the SvPVbyte() macro instead of sv_2pvbyte(). 5618 */ 5619 5620 #undef SvPVbyte 5621 5622 #define SvPVbyte(sv, lp) \ 5623 ((SvFLAGS(sv) & (SVf_POK|SVf_UTF8)) == (SVf_POK) \ 5624 ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pvbyte(sv, &lp)) 5625 5626 #endif 5627 5628 #else 5629 5630 # define SvPVbyte SvPV 5631 # define sv_2pvbyte sv_2pv 5632 5633 #endif 5634 #ifndef sv_2pvbyte_nolen 5635 # define sv_2pvbyte_nolen(sv) sv_2pv_nolen(sv) 5636 #endif 5637 5638 /* Hint: sv_pvn 5639 * Always use the SvPV() macro instead of sv_pvn(). 5640 */ 5641 5642 /* Hint: sv_pvn_force 5643 * Always use the SvPV_force() macro instead of sv_pvn_force(). 5644 */ 5645 5646 /* If these are undefined, they're not handled by the core anyway */ 5647 #ifndef SV_IMMEDIATE_UNREF 5648 # define SV_IMMEDIATE_UNREF 0 5649 #endif 5650 5651 #ifndef SV_GMAGIC 5652 # define SV_GMAGIC 0 5653 #endif 5654 5655 #ifndef SV_COW_DROP_PV 5656 # define SV_COW_DROP_PV 0 5657 #endif 5658 5659 #ifndef SV_UTF8_NO_ENCODING 5660 # define SV_UTF8_NO_ENCODING 0 5661 #endif 5662 5663 #ifndef SV_NOSTEAL 5664 # define SV_NOSTEAL 0 5665 #endif 5666 5667 #ifndef SV_CONST_RETURN 5668 # define SV_CONST_RETURN 0 5669 #endif 5670 5671 #ifndef SV_MUTABLE_RETURN 5672 # define SV_MUTABLE_RETURN 0 5673 #endif 5674 5675 #ifndef SV_SMAGIC 5676 # define SV_SMAGIC 0 5677 #endif 5678 5679 #ifndef SV_HAS_TRAILING_NUL 5680 # define SV_HAS_TRAILING_NUL 0 5681 #endif 5682 5683 #ifndef SV_COW_SHARED_HASH_KEYS 5684 # define SV_COW_SHARED_HASH_KEYS 0 5685 #endif 5686 5687 #if (PERL_BCDVERSION < 0x5007002) 5688 5689 #if defined(NEED_sv_2pv_flags) 5690 static char * DPPP_(my_sv_2pv_flags)(pTHX_ SV * sv, STRLEN * lp, I32 flags); 5691 static 5692 #else 5693 extern char * DPPP_(my_sv_2pv_flags)(pTHX_ SV * sv, STRLEN * lp, I32 flags); 5694 #endif 5695 5696 #ifdef sv_2pv_flags 5697 # undef sv_2pv_flags 5698 #endif 5699 #define sv_2pv_flags(a,b,c) DPPP_(my_sv_2pv_flags)(aTHX_ a,b,c) 5700 #define Perl_sv_2pv_flags DPPP_(my_sv_2pv_flags) 5701 5702 #if defined(NEED_sv_2pv_flags) || defined(NEED_sv_2pv_flags_GLOBAL) 5703 5704 char * 5705 DPPP_(my_sv_2pv_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags) 5706 { 5707 STRLEN n_a = (STRLEN) flags; 5708 return sv_2pv(sv, lp ? lp : &n_a); 5709 } 5710 5711 #endif 5712 5713 #if defined(NEED_sv_pvn_force_flags) 5714 static char * DPPP_(my_sv_pvn_force_flags)(pTHX_ SV * sv, STRLEN * lp, I32 flags); 5715 static 5716 #else 5717 extern char * DPPP_(my_sv_pvn_force_flags)(pTHX_ SV * sv, STRLEN * lp, I32 flags); 5718 #endif 5719 5720 #ifdef sv_pvn_force_flags 5721 # undef sv_pvn_force_flags 5722 #endif 5723 #define sv_pvn_force_flags(a,b,c) DPPP_(my_sv_pvn_force_flags)(aTHX_ a,b,c) 5724 #define Perl_sv_pvn_force_flags DPPP_(my_sv_pvn_force_flags) 5725 5726 #if defined(NEED_sv_pvn_force_flags) || defined(NEED_sv_pvn_force_flags_GLOBAL) 5727 5728 char * 5729 DPPP_(my_sv_pvn_force_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags) 5730 { 5731 STRLEN n_a = (STRLEN) flags; 5732 return sv_pvn_force(sv, lp ? lp : &n_a); 5733 } 5734 5735 #endif 5736 5737 #endif 5738 #ifndef SvPV_const 5739 # define SvPV_const(sv, lp) SvPV_flags_const(sv, lp, SV_GMAGIC) 5740 #endif 5741 5742 #ifndef SvPV_mutable 5743 # define SvPV_mutable(sv, lp) SvPV_flags_mutable(sv, lp, SV_GMAGIC) 5744 #endif 5745 #ifndef SvPV_flags 5746 # define SvPV_flags(sv, lp, flags) \ 5747 ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ 5748 ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pv_flags(sv, &lp, flags)) 5749 #endif 5750 #ifndef SvPV_flags_const 5751 # define SvPV_flags_const(sv, lp, flags) \ 5752 ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ 5753 ? ((lp = SvCUR(sv)), SvPVX_const(sv)) : \ 5754 (const char*) sv_2pv_flags(sv, &lp, flags|SV_CONST_RETURN)) 5755 #endif 5756 #ifndef SvPV_flags_const_nolen 5757 # define SvPV_flags_const_nolen(sv, flags) \ 5758 ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ 5759 ? SvPVX_const(sv) : \ 5760 (const char*) sv_2pv_flags(sv, 0, flags|SV_CONST_RETURN)) 5761 #endif 5762 #ifndef SvPV_flags_mutable 5763 # define SvPV_flags_mutable(sv, lp, flags) \ 5764 ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ 5765 ? ((lp = SvCUR(sv)), SvPVX_mutable(sv)) : \ 5766 sv_2pv_flags(sv, &lp, flags|SV_MUTABLE_RETURN)) 5767 #endif 5768 #ifndef SvPV_force 5769 # define SvPV_force(sv, lp) SvPV_force_flags(sv, lp, SV_GMAGIC) 5770 #endif 5771 5772 #ifndef SvPV_force_nolen 5773 # define SvPV_force_nolen(sv) SvPV_force_flags_nolen(sv, SV_GMAGIC) 5774 #endif 5775 5776 #ifndef SvPV_force_mutable 5777 # define SvPV_force_mutable(sv, lp) SvPV_force_flags_mutable(sv, lp, SV_GMAGIC) 5778 #endif 5779 5780 #ifndef SvPV_force_nomg 5781 # define SvPV_force_nomg(sv, lp) SvPV_force_flags(sv, lp, 0) 5782 #endif 5783 5784 #ifndef SvPV_force_nomg_nolen 5785 # define SvPV_force_nomg_nolen(sv) SvPV_force_flags_nolen(sv, 0) 5786 #endif 5787 #ifndef SvPV_force_flags 5788 # define SvPV_force_flags(sv, lp, flags) \ 5789 ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \ 5790 ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_pvn_force_flags(sv, &lp, flags)) 5791 #endif 5792 #ifndef SvPV_force_flags_nolen 5793 # define SvPV_force_flags_nolen(sv, flags) \ 5794 ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \ 5795 ? SvPVX(sv) : sv_pvn_force_flags(sv, 0, flags)) 5796 #endif 5797 #ifndef SvPV_force_flags_mutable 5798 # define SvPV_force_flags_mutable(sv, lp, flags) \ 5799 ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \ 5800 ? ((lp = SvCUR(sv)), SvPVX_mutable(sv)) \ 5801 : sv_pvn_force_flags(sv, &lp, flags|SV_MUTABLE_RETURN)) 5802 #endif 5803 #ifndef SvPV_nolen 5804 # define SvPV_nolen(sv) \ 5805 ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ 5806 ? SvPVX(sv) : sv_2pv_flags(sv, 0, SV_GMAGIC)) 5807 #endif 5808 #ifndef SvPV_nolen_const 5809 # define SvPV_nolen_const(sv) \ 5810 ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ 5811 ? SvPVX_const(sv) : sv_2pv_flags(sv, 0, SV_GMAGIC|SV_CONST_RETURN)) 5812 #endif 5813 #ifndef SvPV_nomg 5814 # define SvPV_nomg(sv, lp) SvPV_flags(sv, lp, 0) 5815 #endif 5816 5817 #ifndef SvPV_nomg_const 5818 # define SvPV_nomg_const(sv, lp) SvPV_flags_const(sv, lp, 0) 5819 #endif 5820 5821 #ifndef SvPV_nomg_const_nolen 5822 # define SvPV_nomg_const_nolen(sv) SvPV_flags_const_nolen(sv, 0) 5823 #endif 5824 #ifndef SvMAGIC_set 5825 # define SvMAGIC_set(sv, val) \ 5826 STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \ 5827 (((XPVMG*) SvANY(sv))->xmg_magic = (val)); } STMT_END 5828 #endif 5829 5830 #if (PERL_BCDVERSION < 0x5009003) 5831 #ifndef SvPVX_const 5832 # define SvPVX_const(sv) ((const char*) (0 + SvPVX(sv))) 5833 #endif 5834 5835 #ifndef SvPVX_mutable 5836 # define SvPVX_mutable(sv) (0 + SvPVX(sv)) 5837 #endif 5838 #ifndef SvRV_set 5839 # define SvRV_set(sv, val) \ 5840 STMT_START { assert(SvTYPE(sv) >= SVt_RV); \ 5841 (((XRV*) SvANY(sv))->xrv_rv = (val)); } STMT_END 5842 #endif 5843 5844 #else 5845 #ifndef SvPVX_const 5846 # define SvPVX_const(sv) ((const char*)((sv)->sv_u.svu_pv)) 5847 #endif 5848 5849 #ifndef SvPVX_mutable 5850 # define SvPVX_mutable(sv) ((sv)->sv_u.svu_pv) 5851 #endif 5852 #ifndef SvRV_set 5853 # define SvRV_set(sv, val) \ 5854 STMT_START { assert(SvTYPE(sv) >= SVt_RV); \ 5855 ((sv)->sv_u.svu_rv = (val)); } STMT_END 5856 #endif 5857 5858 #endif 5859 #ifndef SvSTASH_set 5860 # define SvSTASH_set(sv, val) \ 5861 STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \ 5862 (((XPVMG*) SvANY(sv))->xmg_stash = (val)); } STMT_END 5863 #endif 5864 5865 #if (PERL_BCDVERSION < 0x5004000) 5866 #ifndef SvUV_set 5867 # define SvUV_set(sv, val) \ 5868 STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \ 5869 (((XPVIV*) SvANY(sv))->xiv_iv = (IV) (val)); } STMT_END 5870 #endif 5871 5872 #else 5873 #ifndef SvUV_set 5874 # define SvUV_set(sv, val) \ 5875 STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \ 5876 (((XPVUV*) SvANY(sv))->xuv_uv = (val)); } STMT_END 5877 #endif 5878 5879 #endif 5880 5881 #if (PERL_BCDVERSION >= 0x5004000) && !defined(vnewSVpvf) 5882 #if defined(NEED_vnewSVpvf) 5883 static SV * DPPP_(my_vnewSVpvf)(pTHX_ const char * pat, va_list * args); 5884 static 5885 #else 5886 extern SV * DPPP_(my_vnewSVpvf)(pTHX_ const char * pat, va_list * args); 5887 #endif 5888 5889 #ifdef vnewSVpvf 5890 # undef vnewSVpvf 5891 #endif 5892 #define vnewSVpvf(a,b) DPPP_(my_vnewSVpvf)(aTHX_ a,b) 5893 #define Perl_vnewSVpvf DPPP_(my_vnewSVpvf) 5894 5895 #if defined(NEED_vnewSVpvf) || defined(NEED_vnewSVpvf_GLOBAL) 5896 5897 SV * 5898 DPPP_(my_vnewSVpvf)(pTHX_ const char *pat, va_list *args) 5899 { 5900 register SV *sv = newSV(0); 5901 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)); 5902 return sv; 5903 } 5904 5905 #endif 5906 #endif 5907 5908 #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vcatpvf) 5909 # define sv_vcatpvf(sv, pat, args) sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)) 5910 #endif 5911 5912 #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vsetpvf) 5913 # define sv_vsetpvf(sv, pat, args) sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)) 5914 #endif 5915 5916 #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_catpvf_mg) 5917 #if defined(NEED_sv_catpvf_mg) 5918 static void DPPP_(my_sv_catpvf_mg)(pTHX_ SV * sv, const char * pat, ...); 5919 static 5920 #else 5921 extern void DPPP_(my_sv_catpvf_mg)(pTHX_ SV * sv, const char * pat, ...); 5922 #endif 5923 5924 #define Perl_sv_catpvf_mg DPPP_(my_sv_catpvf_mg) 5925 5926 #if defined(NEED_sv_catpvf_mg) || defined(NEED_sv_catpvf_mg_GLOBAL) 5927 5928 void 5929 DPPP_(my_sv_catpvf_mg)(pTHX_ SV *sv, const char *pat, ...) 5930 { 5931 va_list args; 5932 va_start(args, pat); 5933 sv_vcatpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*)); 5934 SvSETMAGIC(sv); 5935 va_end(args); 5936 } 5937 5938 #endif 5939 #endif 5940 5941 #ifdef PERL_IMPLICIT_CONTEXT 5942 #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_catpvf_mg_nocontext) 5943 #if defined(NEED_sv_catpvf_mg_nocontext) 5944 static void DPPP_(my_sv_catpvf_mg_nocontext)(SV * sv, const char * pat, ...); 5945 static 5946 #else 5947 extern void DPPP_(my_sv_catpvf_mg_nocontext)(SV * sv, const char * pat, ...); 5948 #endif 5949 5950 #define sv_catpvf_mg_nocontext DPPP_(my_sv_catpvf_mg_nocontext) 5951 #define Perl_sv_catpvf_mg_nocontext DPPP_(my_sv_catpvf_mg_nocontext) 5952 5953 #if defined(NEED_sv_catpvf_mg_nocontext) || defined(NEED_sv_catpvf_mg_nocontext_GLOBAL) 5954 5955 void 5956 DPPP_(my_sv_catpvf_mg_nocontext)(SV *sv, const char *pat, ...) 5957 { 5958 dTHX; 5959 va_list args; 5960 va_start(args, pat); 5961 sv_vcatpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*)); 5962 SvSETMAGIC(sv); 5963 va_end(args); 5964 } 5965 5966 #endif 5967 #endif 5968 #endif 5969 5970 /* sv_catpvf_mg depends on sv_catpvf_mg_nocontext */ 5971 #ifndef sv_catpvf_mg 5972 # ifdef PERL_IMPLICIT_CONTEXT 5973 # define sv_catpvf_mg Perl_sv_catpvf_mg_nocontext 5974 # else 5975 # define sv_catpvf_mg Perl_sv_catpvf_mg 5976 # endif 5977 #endif 5978 5979 #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vcatpvf_mg) 5980 # define sv_vcatpvf_mg(sv, pat, args) \ 5981 STMT_START { \ 5982 sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)); \ 5983 SvSETMAGIC(sv); \ 5984 } STMT_END 5985 #endif 5986 5987 #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_setpvf_mg) 5988 #if defined(NEED_sv_setpvf_mg) 5989 static void DPPP_(my_sv_setpvf_mg)(pTHX_ SV * sv, const char * pat, ...); 5990 static 5991 #else 5992 extern void DPPP_(my_sv_setpvf_mg)(pTHX_ SV * sv, const char * pat, ...); 5993 #endif 5994 5995 #define Perl_sv_setpvf_mg DPPP_(my_sv_setpvf_mg) 5996 5997 #if defined(NEED_sv_setpvf_mg) || defined(NEED_sv_setpvf_mg_GLOBAL) 5998 5999 void 6000 DPPP_(my_sv_setpvf_mg)(pTHX_ SV *sv, const char *pat, ...) 6001 { 6002 va_list args; 6003 va_start(args, pat); 6004 sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*)); 6005 SvSETMAGIC(sv); 6006 va_end(args); 6007 } 6008 6009 #endif 6010 #endif 6011 6012 #ifdef PERL_IMPLICIT_CONTEXT 6013 #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_setpvf_mg_nocontext) 6014 #if defined(NEED_sv_setpvf_mg_nocontext) 6015 static void DPPP_(my_sv_setpvf_mg_nocontext)(SV * sv, const char * pat, ...); 6016 static 6017 #else 6018 extern void DPPP_(my_sv_setpvf_mg_nocontext)(SV * sv, const char * pat, ...); 6019 #endif 6020 6021 #define sv_setpvf_mg_nocontext DPPP_(my_sv_setpvf_mg_nocontext) 6022 #define Perl_sv_setpvf_mg_nocontext DPPP_(my_sv_setpvf_mg_nocontext) 6023 6024 #if defined(NEED_sv_setpvf_mg_nocontext) || defined(NEED_sv_setpvf_mg_nocontext_GLOBAL) 6025 6026 void 6027 DPPP_(my_sv_setpvf_mg_nocontext)(SV *sv, const char *pat, ...) 6028 { 6029 dTHX; 6030 va_list args; 6031 va_start(args, pat); 6032 sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*)); 6033 SvSETMAGIC(sv); 6034 va_end(args); 6035 } 6036 6037 #endif 6038 #endif 6039 #endif 6040 6041 /* sv_setpvf_mg depends on sv_setpvf_mg_nocontext */ 6042 #ifndef sv_setpvf_mg 6043 # ifdef PERL_IMPLICIT_CONTEXT 6044 # define sv_setpvf_mg Perl_sv_setpvf_mg_nocontext 6045 # else 6046 # define sv_setpvf_mg Perl_sv_setpvf_mg 6047 # endif 6048 #endif 6049 6050 #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vsetpvf_mg) 6051 # define sv_vsetpvf_mg(sv, pat, args) \ 6052 STMT_START { \ 6053 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)); \ 6054 SvSETMAGIC(sv); \ 6055 } STMT_END 6056 #endif 6057 6058 #ifndef newSVpvn_share 6059 6060 #if defined(NEED_newSVpvn_share) 6061 static SV * DPPP_(my_newSVpvn_share)(pTHX_ const char *src, I32 len, U32 hash); 6062 static 6063 #else 6064 extern SV * DPPP_(my_newSVpvn_share)(pTHX_ const char *src, I32 len, U32 hash); 6065 #endif 6066 6067 #ifdef newSVpvn_share 6068 # undef newSVpvn_share 6069 #endif 6070 #define newSVpvn_share(a,b,c) DPPP_(my_newSVpvn_share)(aTHX_ a,b,c) 6071 #define Perl_newSVpvn_share DPPP_(my_newSVpvn_share) 6072 6073 #if defined(NEED_newSVpvn_share) || defined(NEED_newSVpvn_share_GLOBAL) 6074 6075 SV * 6076 DPPP_(my_newSVpvn_share)(pTHX_ const char *src, I32 len, U32 hash) 6077 { 6078 SV *sv; 6079 if (len < 0) 6080 len = -len; 6081 if (!hash) 6082 PERL_HASH(hash, (char*) src, len); 6083 sv = newSVpvn((char *) src, len); 6084 sv_upgrade(sv, SVt_PVIV); 6085 SvIVX(sv) = hash; 6086 SvREADONLY_on(sv); 6087 SvPOK_on(sv); 6088 return sv; 6089 } 6090 6091 #endif 6092 6093 #endif 6094 #ifndef SvSHARED_HASH 6095 # define SvSHARED_HASH(sv) (0 + SvUVX(sv)) 6096 #endif 6097 #ifndef WARN_ALL 6098 # define WARN_ALL 0 6099 #endif 6100 6101 #ifndef WARN_CLOSURE 6102 # define WARN_CLOSURE 1 6103 #endif 6104 6105 #ifndef WARN_DEPRECATED 6106 # define WARN_DEPRECATED 2 6107 #endif 6108 6109 #ifndef WARN_EXITING 6110 # define WARN_EXITING 3 6111 #endif 6112 6113 #ifndef WARN_GLOB 6114 # define WARN_GLOB 4 6115 #endif 6116 6117 #ifndef WARN_IO 6118 # define WARN_IO 5 6119 #endif 6120 6121 #ifndef WARN_CLOSED 6122 # define WARN_CLOSED 6 6123 #endif 6124 6125 #ifndef WARN_EXEC 6126 # define WARN_EXEC 7 6127 #endif 6128 6129 #ifndef WARN_LAYER 6130 # define WARN_LAYER 8 6131 #endif 6132 6133 #ifndef WARN_NEWLINE 6134 # define WARN_NEWLINE 9 6135 #endif 6136 6137 #ifndef WARN_PIPE 6138 # define WARN_PIPE 10 6139 #endif 6140 6141 #ifndef WARN_UNOPENED 6142 # define WARN_UNOPENED 11 6143 #endif 6144 6145 #ifndef WARN_MISC 6146 # define WARN_MISC 12 6147 #endif 6148 6149 #ifndef WARN_NUMERIC 6150 # define WARN_NUMERIC 13 6151 #endif 6152 6153 #ifndef WARN_ONCE 6154 # define WARN_ONCE 14 6155 #endif 6156 6157 #ifndef WARN_OVERFLOW 6158 # define WARN_OVERFLOW 15 6159 #endif 6160 6161 #ifndef WARN_PACK 6162 # define WARN_PACK 16 6163 #endif 6164 6165 #ifndef WARN_PORTABLE 6166 # define WARN_PORTABLE 17 6167 #endif 6168 6169 #ifndef WARN_RECURSION 6170 # define WARN_RECURSION 18 6171 #endif 6172 6173 #ifndef WARN_REDEFINE 6174 # define WARN_REDEFINE 19 6175 #endif 6176 6177 #ifndef WARN_REGEXP 6178 # define WARN_REGEXP 20 6179 #endif 6180 6181 #ifndef WARN_SEVERE 6182 # define WARN_SEVERE 21 6183 #endif 6184 6185 #ifndef WARN_DEBUGGING 6186 # define WARN_DEBUGGING 22 6187 #endif 6188 6189 #ifndef WARN_INPLACE 6190 # define WARN_INPLACE 23 6191 #endif 6192 6193 #ifndef WARN_INTERNAL 6194 # define WARN_INTERNAL 24 6195 #endif 6196 6197 #ifndef WARN_MALLOC 6198 # define WARN_MALLOC 25 6199 #endif 6200 6201 #ifndef WARN_SIGNAL 6202 # define WARN_SIGNAL 26 6203 #endif 6204 6205 #ifndef WARN_SUBSTR 6206 # define WARN_SUBSTR 27 6207 #endif 6208 6209 #ifndef WARN_SYNTAX 6210 # define WARN_SYNTAX 28 6211 #endif 6212 6213 #ifndef WARN_AMBIGUOUS 6214 # define WARN_AMBIGUOUS 29 6215 #endif 6216 6217 #ifndef WARN_BAREWORD 6218 # define WARN_BAREWORD 30 6219 #endif 6220 6221 #ifndef WARN_DIGIT 6222 # define WARN_DIGIT 31 6223 #endif 6224 6225 #ifndef WARN_PARENTHESIS 6226 # define WARN_PARENTHESIS 32 6227 #endif 6228 6229 #ifndef WARN_PRECEDENCE 6230 # define WARN_PRECEDENCE 33 6231 #endif 6232 6233 #ifndef WARN_PRINTF 6234 # define WARN_PRINTF 34 6235 #endif 6236 6237 #ifndef WARN_PROTOTYPE 6238 # define WARN_PROTOTYPE 35 6239 #endif 6240 6241 #ifndef WARN_QW 6242 # define WARN_QW 36 6243 #endif 6244 6245 #ifndef WARN_RESERVED 6246 # define WARN_RESERVED 37 6247 #endif 6248 6249 #ifndef WARN_SEMICOLON 6250 # define WARN_SEMICOLON 38 6251 #endif 6252 6253 #ifndef WARN_TAINT 6254 # define WARN_TAINT 39 6255 #endif 6256 6257 #ifndef WARN_THREADS 6258 # define WARN_THREADS 40 6259 #endif 6260 6261 #ifndef WARN_UNINITIALIZED 6262 # define WARN_UNINITIALIZED 41 6263 #endif 6264 6265 #ifndef WARN_UNPACK 6266 # define WARN_UNPACK 42 6267 #endif 6268 6269 #ifndef WARN_UNTIE 6270 # define WARN_UNTIE 43 6271 #endif 6272 6273 #ifndef WARN_UTF8 6274 # define WARN_UTF8 44 6275 #endif 6276 6277 #ifndef WARN_VOID 6278 # define WARN_VOID 45 6279 #endif 6280 6281 #ifndef WARN_ASSERTIONS 6282 # define WARN_ASSERTIONS 46 6283 #endif 6284 #ifndef packWARN 6285 # define packWARN(a) (a) 6286 #endif 6287 6288 #ifndef ckWARN 6289 # ifdef G_WARN_ON 6290 # define ckWARN(a) (PL_dowarn & G_WARN_ON) 6291 # else 6292 # define ckWARN(a) PL_dowarn 6293 # endif 6294 #endif 6295 6296 #if (PERL_BCDVERSION >= 0x5004000) && !defined(warner) 6297 #if defined(NEED_warner) 6298 static void DPPP_(my_warner)(U32 err, const char *pat, ...); 6299 static 6300 #else 6301 extern void DPPP_(my_warner)(U32 err, const char *pat, ...); 6302 #endif 6303 6304 #define Perl_warner DPPP_(my_warner) 6305 6306 #if defined(NEED_warner) || defined(NEED_warner_GLOBAL) 6307 6308 void 6309 DPPP_(my_warner)(U32 err, const char *pat, ...) 6310 { 6311 SV *sv; 6312 va_list args; 6313 6314 PERL_UNUSED_ARG(err); 6315 6316 va_start(args, pat); 6317 sv = vnewSVpvf(pat, &args); 6318 va_end(args); 6319 sv_2mortal(sv); 6320 warn("%s", SvPV_nolen(sv)); 6321 } 6322 6323 #define warner Perl_warner 6324 6325 #define Perl_warner_nocontext Perl_warner 6326 6327 #endif 6328 #endif 6329 6330 /* concatenating with "" ensures that only literal strings are accepted as argument 6331 * note that STR_WITH_LEN() can't be used as argument to macros or functions that 6332 * under some configurations might be macros 6333 */ 6334 #ifndef STR_WITH_LEN 6335 # define STR_WITH_LEN(s) (s ""), (sizeof(s)-1) 6336 #endif 6337 #ifndef newSVpvs 6338 # define newSVpvs(str) newSVpvn(str "", sizeof(str) - 1) 6339 #endif 6340 6341 #ifndef sv_catpvs 6342 # define sv_catpvs(sv, str) sv_catpvn(sv, str "", sizeof(str) - 1) 6343 #endif 6344 6345 #ifndef sv_setpvs 6346 # define sv_setpvs(sv, str) sv_setpvn(sv, str "", sizeof(str) - 1) 6347 #endif 6348 6349 #ifndef hv_fetchs 6350 # define hv_fetchs(hv, key, lval) hv_fetch(hv, key "", sizeof(key) - 1, lval) 6351 #endif 6352 6353 #ifndef hv_stores 6354 # define hv_stores(hv, key, val) hv_store(hv, key "", sizeof(key) - 1, val, 0) 6355 #endif 6356 #ifndef SvGETMAGIC 6357 # define SvGETMAGIC(x) STMT_START { if (SvGMAGICAL(x)) mg_get(x); } STMT_END 6358 #endif 6359 #ifndef PERL_MAGIC_sv 6360 # define PERL_MAGIC_sv '\0' 6361 #endif 6362 6363 #ifndef PERL_MAGIC_overload 6364 # define PERL_MAGIC_overload 'A' 6365 #endif 6366 6367 #ifndef PERL_MAGIC_overload_elem 6368 # define PERL_MAGIC_overload_elem 'a' 6369 #endif 6370 6371 #ifndef PERL_MAGIC_overload_table 6372 # define PERL_MAGIC_overload_table 'c' 6373 #endif 6374 6375 #ifndef PERL_MAGIC_bm 6376 # define PERL_MAGIC_bm 'B' 6377 #endif 6378 6379 #ifndef PERL_MAGIC_regdata 6380 # define PERL_MAGIC_regdata 'D' 6381 #endif 6382 6383 #ifndef PERL_MAGIC_regdatum 6384 # define PERL_MAGIC_regdatum 'd' 6385 #endif 6386 6387 #ifndef PERL_MAGIC_env 6388 # define PERL_MAGIC_env 'E' 6389 #endif 6390 6391 #ifndef PERL_MAGIC_envelem 6392 # define PERL_MAGIC_envelem 'e' 6393 #endif 6394 6395 #ifndef PERL_MAGIC_fm 6396 # define PERL_MAGIC_fm 'f' 6397 #endif 6398 6399 #ifndef PERL_MAGIC_regex_global 6400 # define PERL_MAGIC_regex_global 'g' 6401 #endif 6402 6403 #ifndef PERL_MAGIC_isa 6404 # define PERL_MAGIC_isa 'I' 6405 #endif 6406 6407 #ifndef PERL_MAGIC_isaelem 6408 # define PERL_MAGIC_isaelem 'i' 6409 #endif 6410 6411 #ifndef PERL_MAGIC_nkeys 6412 # define PERL_MAGIC_nkeys 'k' 6413 #endif 6414 6415 #ifndef PERL_MAGIC_dbfile 6416 # define PERL_MAGIC_dbfile 'L' 6417 #endif 6418 6419 #ifndef PERL_MAGIC_dbline 6420 # define PERL_MAGIC_dbline 'l' 6421 #endif 6422 6423 #ifndef PERL_MAGIC_mutex 6424 # define PERL_MAGIC_mutex 'm' 6425 #endif 6426 6427 #ifndef PERL_MAGIC_shared 6428 # define PERL_MAGIC_shared 'N' 6429 #endif 6430 6431 #ifndef PERL_MAGIC_shared_scalar 6432 # define PERL_MAGIC_shared_scalar 'n' 6433 #endif 6434 6435 #ifndef PERL_MAGIC_collxfrm 6436 # define PERL_MAGIC_collxfrm 'o' 6437 #endif 6438 6439 #ifndef PERL_MAGIC_tied 6440 # define PERL_MAGIC_tied 'P' 6441 #endif 6442 6443 #ifndef PERL_MAGIC_tiedelem 6444 # define PERL_MAGIC_tiedelem 'p' 6445 #endif 6446 6447 #ifndef PERL_MAGIC_tiedscalar 6448 # define PERL_MAGIC_tiedscalar 'q' 6449 #endif 6450 6451 #ifndef PERL_MAGIC_qr 6452 # define PERL_MAGIC_qr 'r' 6453 #endif 6454 6455 #ifndef PERL_MAGIC_sig 6456 # define PERL_MAGIC_sig 'S' 6457 #endif 6458 6459 #ifndef PERL_MAGIC_sigelem 6460 # define PERL_MAGIC_sigelem 's' 6461 #endif 6462 6463 #ifndef PERL_MAGIC_taint 6464 # define PERL_MAGIC_taint 't' 6465 #endif 6466 6467 #ifndef PERL_MAGIC_uvar 6468 # define PERL_MAGIC_uvar 'U' 6469 #endif 6470 6471 #ifndef PERL_MAGIC_uvar_elem 6472 # define PERL_MAGIC_uvar_elem 'u' 6473 #endif 6474 6475 #ifndef PERL_MAGIC_vstring 6476 # define PERL_MAGIC_vstring 'V' 6477 #endif 6478 6479 #ifndef PERL_MAGIC_vec 6480 # define PERL_MAGIC_vec 'v' 6481 #endif 6482 6483 #ifndef PERL_MAGIC_utf8 6484 # define PERL_MAGIC_utf8 'w' 6485 #endif 6486 6487 #ifndef PERL_MAGIC_substr 6488 # define PERL_MAGIC_substr 'x' 6489 #endif 6490 6491 #ifndef PERL_MAGIC_defelem 6492 # define PERL_MAGIC_defelem 'y' 6493 #endif 6494 6495 #ifndef PERL_MAGIC_glob 6496 # define PERL_MAGIC_glob '*' 6497 #endif 6498 6499 #ifndef PERL_MAGIC_arylen 6500 # define PERL_MAGIC_arylen '#' 6501 #endif 6502 6503 #ifndef PERL_MAGIC_pos 6504 # define PERL_MAGIC_pos '.' 6505 #endif 6506 6507 #ifndef PERL_MAGIC_backref 6508 # define PERL_MAGIC_backref '<' 6509 #endif 6510 6511 #ifndef PERL_MAGIC_ext 6512 # define PERL_MAGIC_ext '~' 6513 #endif 6514 6515 /* That's the best we can do... */ 6516 #ifndef sv_catpvn_nomg 6517 # define sv_catpvn_nomg sv_catpvn 6518 #endif 6519 6520 #ifndef sv_catsv_nomg 6521 # define sv_catsv_nomg sv_catsv 6522 #endif 6523 6524 #ifndef sv_setsv_nomg 6525 # define sv_setsv_nomg sv_setsv 6526 #endif 6527 6528 #ifndef sv_pvn_nomg 6529 # define sv_pvn_nomg sv_pvn 6530 #endif 6531 6532 #ifndef SvIV_nomg 6533 # define SvIV_nomg SvIV 6534 #endif 6535 6536 #ifndef SvUV_nomg 6537 # define SvUV_nomg SvUV 6538 #endif 6539 6540 #ifndef sv_catpv_mg 6541 # define sv_catpv_mg(sv, ptr) \ 6542 STMT_START { \ 6543 SV *TeMpSv = sv; \ 6544 sv_catpv(TeMpSv,ptr); \ 6545 SvSETMAGIC(TeMpSv); \ 6546 } STMT_END 6547 #endif 6548 6549 #ifndef sv_catpvn_mg 6550 # define sv_catpvn_mg(sv, ptr, len) \ 6551 STMT_START { \ 6552 SV *TeMpSv = sv; \ 6553 sv_catpvn(TeMpSv,ptr,len); \ 6554 SvSETMAGIC(TeMpSv); \ 6555 } STMT_END 6556 #endif 6557 6558 #ifndef sv_catsv_mg 6559 # define sv_catsv_mg(dsv, ssv) \ 6560 STMT_START { \ 6561 SV *TeMpSv = dsv; \ 6562 sv_catsv(TeMpSv,ssv); \ 6563 SvSETMAGIC(TeMpSv); \ 6564 } STMT_END 6565 #endif 6566 6567 #ifndef sv_setiv_mg 6568 # define sv_setiv_mg(sv, i) \ 6569 STMT_START { \ 6570 SV *TeMpSv = sv; \ 6571 sv_setiv(TeMpSv,i); \ 6572 SvSETMAGIC(TeMpSv); \ 6573 } STMT_END 6574 #endif 6575 6576 #ifndef sv_setnv_mg 6577 # define sv_setnv_mg(sv, num) \ 6578 STMT_START { \ 6579 SV *TeMpSv = sv; \ 6580 sv_setnv(TeMpSv,num); \ 6581 SvSETMAGIC(TeMpSv); \ 6582 } STMT_END 6583 #endif 6584 6585 #ifndef sv_setpv_mg 6586 # define sv_setpv_mg(sv, ptr) \ 6587 STMT_START { \ 6588 SV *TeMpSv = sv; \ 6589 sv_setpv(TeMpSv,ptr); \ 6590 SvSETMAGIC(TeMpSv); \ 6591 } STMT_END 6592 #endif 6593 6594 #ifndef sv_setpvn_mg 6595 # define sv_setpvn_mg(sv, ptr, len) \ 6596 STMT_START { \ 6597 SV *TeMpSv = sv; \ 6598 sv_setpvn(TeMpSv,ptr,len); \ 6599 SvSETMAGIC(TeMpSv); \ 6600 } STMT_END 6601 #endif 6602 6603 #ifndef sv_setsv_mg 6604 # define sv_setsv_mg(dsv, ssv) \ 6605 STMT_START { \ 6606 SV *TeMpSv = dsv; \ 6607 sv_setsv(TeMpSv,ssv); \ 6608 SvSETMAGIC(TeMpSv); \ 6609 } STMT_END 6610 #endif 6611 6612 #ifndef sv_setuv_mg 6613 # define sv_setuv_mg(sv, i) \ 6614 STMT_START { \ 6615 SV *TeMpSv = sv; \ 6616 sv_setuv(TeMpSv,i); \ 6617 SvSETMAGIC(TeMpSv); \ 6618 } STMT_END 6619 #endif 6620 6621 #ifndef sv_usepvn_mg 6622 # define sv_usepvn_mg(sv, ptr, len) \ 6623 STMT_START { \ 6624 SV *TeMpSv = sv; \ 6625 sv_usepvn(TeMpSv,ptr,len); \ 6626 SvSETMAGIC(TeMpSv); \ 6627 } STMT_END 6628 #endif 6629 #ifndef SvVSTRING_mg 6630 # define SvVSTRING_mg(sv) (SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_vstring) : NULL) 6631 #endif 6632 6633 /* Hint: sv_magic_portable 6634 * This is a compatibility function that is only available with 6635 * Devel::PPPort. It is NOT in the perl core. 6636 * Its purpose is to mimic the 5.8.0 behaviour of sv_magic() when 6637 * it is being passed a name pointer with namlen == 0. In that 6638 * case, perl 5.8.0 and later store the pointer, not a copy of it. 6639 * The compatibility can be provided back to perl 5.004. With 6640 * earlier versions, the code will not compile. 6641 */ 6642 6643 #if (PERL_BCDVERSION < 0x5004000) 6644 6645 /* code that uses sv_magic_portable will not compile */ 6646 6647 #elif (PERL_BCDVERSION < 0x5008000) 6648 6649 # define sv_magic_portable(sv, obj, how, name, namlen) \ 6650 STMT_START { \ 6651 SV *SvMp_sv = (sv); \ 6652 char *SvMp_name = (char *) (name); \ 6653 I32 SvMp_namlen = (namlen); \ 6654 if (SvMp_name && SvMp_namlen == 0) \ 6655 { \ 6656 MAGIC *mg; \ 6657 sv_magic(SvMp_sv, obj, how, 0, 0); \ 6658 mg = SvMAGIC(SvMp_sv); \ 6659 mg->mg_len = -42; /* XXX: this is the tricky part */ \ 6660 mg->mg_ptr = SvMp_name; \ 6661 } \ 6662 else \ 6663 { \ 6664 sv_magic(SvMp_sv, obj, how, SvMp_name, SvMp_namlen); \ 6665 } \ 6666 } STMT_END 6667 6668 #else 6669 6670 # define sv_magic_portable(a, b, c, d, e) sv_magic(a, b, c, d, e) 6671 6672 #endif 6673 6674 #ifdef USE_ITHREADS 6675 #ifndef CopFILE 6676 # define CopFILE(c) ((c)->cop_file) 6677 #endif 6678 6679 #ifndef CopFILEGV 6680 # define CopFILEGV(c) (CopFILE(c) ? gv_fetchfile(CopFILE(c)) : Nullgv) 6681 #endif 6682 6683 #ifndef CopFILE_set 6684 # define CopFILE_set(c,pv) ((c)->cop_file = savepv(pv)) 6685 #endif 6686 6687 #ifndef CopFILESV 6688 # define CopFILESV(c) (CopFILE(c) ? GvSV(gv_fetchfile(CopFILE(c))) : Nullsv) 6689 #endif 6690 6691 #ifndef CopFILEAV 6692 # define CopFILEAV(c) (CopFILE(c) ? GvAV(gv_fetchfile(CopFILE(c))) : Nullav) 6693 #endif 6694 6695 #ifndef CopSTASHPV 6696 # define CopSTASHPV(c) ((c)->cop_stashpv) 6697 #endif 6698 6699 #ifndef CopSTASHPV_set 6700 # define CopSTASHPV_set(c,pv) ((c)->cop_stashpv = ((pv) ? savepv(pv) : Nullch)) 6701 #endif 6702 6703 #ifndef CopSTASH 6704 # define CopSTASH(c) (CopSTASHPV(c) ? gv_stashpv(CopSTASHPV(c),GV_ADD) : Nullhv) 6705 #endif 6706 6707 #ifndef CopSTASH_set 6708 # define CopSTASH_set(c,hv) CopSTASHPV_set(c, (hv) ? HvNAME(hv) : Nullch) 6709 #endif 6710 6711 #ifndef CopSTASH_eq 6712 # define CopSTASH_eq(c,hv) ((hv) && (CopSTASHPV(c) == HvNAME(hv) \ 6713 || (CopSTASHPV(c) && HvNAME(hv) \ 6714 && strEQ(CopSTASHPV(c), HvNAME(hv))))) 6715 #endif 6716 6717 #else 6718 #ifndef CopFILEGV 6719 # define CopFILEGV(c) ((c)->cop_filegv) 6720 #endif 6721 6722 #ifndef CopFILEGV_set 6723 # define CopFILEGV_set(c,gv) ((c)->cop_filegv = (GV*)SvREFCNT_inc(gv)) 6724 #endif 6725 6726 #ifndef CopFILE_set 6727 # define CopFILE_set(c,pv) CopFILEGV_set((c), gv_fetchfile(pv)) 6728 #endif 6729 6730 #ifndef CopFILESV 6731 # define CopFILESV(c) (CopFILEGV(c) ? GvSV(CopFILEGV(c)) : Nullsv) 6732 #endif 6733 6734 #ifndef CopFILEAV 6735 # define CopFILEAV(c) (CopFILEGV(c) ? GvAV(CopFILEGV(c)) : Nullav) 6736 #endif 6737 6738 #ifndef CopFILE 6739 # define CopFILE(c) (CopFILESV(c) ? SvPVX(CopFILESV(c)) : Nullch) 6740 #endif 6741 6742 #ifndef CopSTASH 6743 # define CopSTASH(c) ((c)->cop_stash) 6744 #endif 6745 6746 #ifndef CopSTASH_set 6747 # define CopSTASH_set(c,hv) ((c)->cop_stash = (hv)) 6748 #endif 6749 6750 #ifndef CopSTASHPV 6751 # define CopSTASHPV(c) (CopSTASH(c) ? HvNAME(CopSTASH(c)) : Nullch) 6752 #endif 6753 6754 #ifndef CopSTASHPV_set 6755 # define CopSTASHPV_set(c,pv) CopSTASH_set((c), gv_stashpv(pv,GV_ADD)) 6756 #endif 6757 6758 #ifndef CopSTASH_eq 6759 # define CopSTASH_eq(c,hv) (CopSTASH(c) == (hv)) 6760 #endif 6761 6762 #endif /* USE_ITHREADS */ 6763 #ifndef IN_PERL_COMPILETIME 6764 # define IN_PERL_COMPILETIME (PL_curcop == &PL_compiling) 6765 #endif 6766 6767 #ifndef IN_LOCALE_RUNTIME 6768 # define IN_LOCALE_RUNTIME (PL_curcop->op_private & HINT_LOCALE) 6769 #endif 6770 6771 #ifndef IN_LOCALE_COMPILETIME 6772 # define IN_LOCALE_COMPILETIME (PL_hints & HINT_LOCALE) 6773 #endif 6774 6775 #ifndef IN_LOCALE 6776 # define IN_LOCALE (IN_PERL_COMPILETIME ? IN_LOCALE_COMPILETIME : IN_LOCALE_RUNTIME) 6777 #endif 6778 #ifndef IS_NUMBER_IN_UV 6779 # define IS_NUMBER_IN_UV 0x01 6780 #endif 6781 6782 #ifndef IS_NUMBER_GREATER_THAN_UV_MAX 6783 # define IS_NUMBER_GREATER_THAN_UV_MAX 0x02 6784 #endif 6785 6786 #ifndef IS_NUMBER_NOT_INT 6787 # define IS_NUMBER_NOT_INT 0x04 6788 #endif 6789 6790 #ifndef IS_NUMBER_NEG 6791 # define IS_NUMBER_NEG 0x08 6792 #endif 6793 6794 #ifndef IS_NUMBER_INFINITY 6795 # define IS_NUMBER_INFINITY 0x10 6796 #endif 6797 6798 #ifndef IS_NUMBER_NAN 6799 # define IS_NUMBER_NAN 0x20 6800 #endif 6801 #ifndef GROK_NUMERIC_RADIX 6802 # define GROK_NUMERIC_RADIX(sp, send) grok_numeric_radix(sp, send) 6803 #endif 6804 #ifndef PERL_SCAN_GREATER_THAN_UV_MAX 6805 # define PERL_SCAN_GREATER_THAN_UV_MAX 0x02 6806 #endif 6807 6808 #ifndef PERL_SCAN_SILENT_ILLDIGIT 6809 # define PERL_SCAN_SILENT_ILLDIGIT 0x04 6810 #endif 6811 6812 #ifndef PERL_SCAN_ALLOW_UNDERSCORES 6813 # define PERL_SCAN_ALLOW_UNDERSCORES 0x01 6814 #endif 6815 6816 #ifndef PERL_SCAN_DISALLOW_PREFIX 6817 # define PERL_SCAN_DISALLOW_PREFIX 0x02 6818 #endif 6819 6820 #ifndef grok_numeric_radix 6821 #if defined(NEED_grok_numeric_radix) 6822 static bool DPPP_(my_grok_numeric_radix)(pTHX_ const char ** sp, const char * send); 6823 static 6824 #else 6825 extern bool DPPP_(my_grok_numeric_radix)(pTHX_ const char ** sp, const char * send); 6826 #endif 6827 6828 #ifdef grok_numeric_radix 6829 # undef grok_numeric_radix 6830 #endif 6831 #define grok_numeric_radix(a,b) DPPP_(my_grok_numeric_radix)(aTHX_ a,b) 6832 #define Perl_grok_numeric_radix DPPP_(my_grok_numeric_radix) 6833 6834 #if defined(NEED_grok_numeric_radix) || defined(NEED_grok_numeric_radix_GLOBAL) 6835 bool 6836 DPPP_(my_grok_numeric_radix)(pTHX_ const char **sp, const char *send) 6837 { 6838 #ifdef USE_LOCALE_NUMERIC 6839 #ifdef PL_numeric_radix_sv 6840 if (PL_numeric_radix_sv && IN_LOCALE) { 6841 STRLEN len; 6842 char* radix = SvPV(PL_numeric_radix_sv, len); 6843 if (*sp + len <= send && memEQ(*sp, radix, len)) { 6844 *sp += len; 6845 return TRUE; 6846 } 6847 } 6848 #else 6849 /* older perls don't have PL_numeric_radix_sv so the radix 6850 * must manually be requested from locale.h 6851 */ 6852 #include <locale.h> 6853 dTHR; /* needed for older threaded perls */ 6854 struct lconv *lc = localeconv(); 6855 char *radix = lc->decimal_point; 6856 if (radix && IN_LOCALE) { 6857 STRLEN len = strlen(radix); 6858 if (*sp + len <= send && memEQ(*sp, radix, len)) { 6859 *sp += len; 6860 return TRUE; 6861 } 6862 } 6863 #endif 6864 #endif /* USE_LOCALE_NUMERIC */ 6865 /* always try "." if numeric radix didn't match because 6866 * we may have data from different locales mixed */ 6867 if (*sp < send && **sp == '.') { 6868 ++*sp; 6869 return TRUE; 6870 } 6871 return FALSE; 6872 } 6873 #endif 6874 #endif 6875 6876 #ifndef grok_number 6877 #if defined(NEED_grok_number) 6878 static int DPPP_(my_grok_number)(pTHX_ const char * pv, STRLEN len, UV * valuep); 6879 static 6880 #else 6881 extern int DPPP_(my_grok_number)(pTHX_ const char * pv, STRLEN len, UV * valuep); 6882 #endif 6883 6884 #ifdef grok_number 6885 # undef grok_number 6886 #endif 6887 #define grok_number(a,b,c) DPPP_(my_grok_number)(aTHX_ a,b,c) 6888 #define Perl_grok_number DPPP_(my_grok_number) 6889 6890 #if defined(NEED_grok_number) || defined(NEED_grok_number_GLOBAL) 6891 int 6892 DPPP_(my_grok_number)(pTHX_ const char *pv, STRLEN len, UV *valuep) 6893 { 6894 const char *s = pv; 6895 const char *send = pv + len; 6896 const UV max_div_10 = UV_MAX / 10; 6897 const char max_mod_10 = UV_MAX % 10; 6898 int numtype = 0; 6899 int sawinf = 0; 6900 int sawnan = 0; 6901 6902 while (s < send && isSPACE(*s)) 6903 s++; 6904 if (s == send) { 6905 return 0; 6906 } else if (*s == '-') { 6907 s++; 6908 numtype = IS_NUMBER_NEG; 6909 } 6910 else if (*s == '+') 6911 s++; 6912 6913 if (s == send) 6914 return 0; 6915 6916 /* next must be digit or the radix separator or beginning of infinity */ 6917 if (isDIGIT(*s)) { 6918 /* UVs are at least 32 bits, so the first 9 decimal digits cannot 6919 overflow. */ 6920 UV value = *s - '0'; 6921 /* This construction seems to be more optimiser friendly. 6922 (without it gcc does the isDIGIT test and the *s - '0' separately) 6923 With it gcc on arm is managing 6 instructions (6 cycles) per digit. 6924 In theory the optimiser could deduce how far to unroll the loop 6925 before checking for overflow. */ 6926 if (++s < send) { 6927 int digit = *s - '0'; 6928 if (digit >= 0 && digit <= 9) { 6929 value = value * 10 + digit; 6930 if (++s < send) { 6931 digit = *s - '0'; 6932 if (digit >= 0 && digit <= 9) { 6933 value = value * 10 + digit; 6934 if (++s < send) { 6935 digit = *s - '0'; 6936 if (digit >= 0 && digit <= 9) { 6937 value = value * 10 + digit; 6938 if (++s < send) { 6939 digit = *s - '0'; 6940 if (digit >= 0 && digit <= 9) { 6941 value = value * 10 + digit; 6942 if (++s < send) { 6943 digit = *s - '0'; 6944 if (digit >= 0 && digit <= 9) { 6945 value = value * 10 + digit; 6946 if (++s < send) { 6947 digit = *s - '0'; 6948 if (digit >= 0 && digit <= 9) { 6949 value = value * 10 + digit; 6950 if (++s < send) { 6951 digit = *s - '0'; 6952 if (digit >= 0 && digit <= 9) { 6953 value = value * 10 + digit; 6954 if (++s < send) { 6955 digit = *s - '0'; 6956 if (digit >= 0 && digit <= 9) { 6957 value = value * 10 + digit; 6958 if (++s < send) { 6959 /* Now got 9 digits, so need to check 6960 each time for overflow. */ 6961 digit = *s - '0'; 6962 while (digit >= 0 && digit <= 9 6963 && (value < max_div_10 6964 || (value == max_div_10 6965 && digit <= max_mod_10))) { 6966 value = value * 10 + digit; 6967 if (++s < send) 6968 digit = *s - '0'; 6969 else 6970 break; 6971 } 6972 if (digit >= 0 && digit <= 9 6973 && (s < send)) { 6974 /* value overflowed. 6975 skip the remaining digits, don't 6976 worry about setting *valuep. */ 6977 do { 6978 s++; 6979 } while (s < send && isDIGIT(*s)); 6980 numtype |= 6981 IS_NUMBER_GREATER_THAN_UV_MAX; 6982 goto skip_value; 6983 } 6984 } 6985 } 6986 } 6987 } 6988 } 6989 } 6990 } 6991 } 6992 } 6993 } 6994 } 6995 } 6996 } 6997 } 6998 } 6999 } 7000 } 7001 numtype |= IS_NUMBER_IN_UV; 7002 if (valuep) 7003 *valuep = value; 7004 7005 skip_value: 7006 if (GROK_NUMERIC_RADIX(&s, send)) { 7007 numtype |= IS_NUMBER_NOT_INT; 7008 while (s < send && isDIGIT(*s)) /* optional digits after the radix */ 7009 s++; 7010 } 7011 } 7012 else if (GROK_NUMERIC_RADIX(&s, send)) { 7013 numtype |= IS_NUMBER_NOT_INT | IS_NUMBER_IN_UV; /* valuep assigned below */ 7014 /* no digits before the radix means we need digits after it */ 7015 if (s < send && isDIGIT(*s)) { 7016 do { 7017 s++; 7018 } while (s < send && isDIGIT(*s)); 7019 if (valuep) { 7020 /* integer approximation is valid - it's 0. */ 7021 *valuep = 0; 7022 } 7023 } 7024 else 7025 return 0; 7026 } else if (*s == 'I' || *s == 'i') { 7027 s++; if (s == send || (*s != 'N' && *s != 'n')) return 0; 7028 s++; if (s == send || (*s != 'F' && *s != 'f')) return 0; 7029 s++; if (s < send && (*s == 'I' || *s == 'i')) { 7030 s++; if (s == send || (*s != 'N' && *s != 'n')) return 0; 7031 s++; if (s == send || (*s != 'I' && *s != 'i')) return 0; 7032 s++; if (s == send || (*s != 'T' && *s != 't')) return 0; 7033 s++; if (s == send || (*s != 'Y' && *s != 'y')) return 0; 7034 s++; 7035 } 7036 sawinf = 1; 7037 } else if (*s == 'N' || *s == 'n') { 7038 /* XXX TODO: There are signaling NaNs and quiet NaNs. */ 7039 s++; if (s == send || (*s != 'A' && *s != 'a')) return 0; 7040 s++; if (s == send || (*s != 'N' && *s != 'n')) return 0; 7041 s++; 7042 sawnan = 1; 7043 } else 7044 return 0; 7045 7046 if (sawinf) { 7047 numtype &= IS_NUMBER_NEG; /* Keep track of sign */ 7048 numtype |= IS_NUMBER_INFINITY | IS_NUMBER_NOT_INT; 7049 } else if (sawnan) { 7050 numtype &= IS_NUMBER_NEG; /* Keep track of sign */ 7051 numtype |= IS_NUMBER_NAN | IS_NUMBER_NOT_INT; 7052 } else if (s < send) { 7053 /* we can have an optional exponent part */ 7054 if (*s == 'e' || *s == 'E') { 7055 /* The only flag we keep is sign. Blow away any "it's UV" */ 7056 numtype &= IS_NUMBER_NEG; 7057 numtype |= IS_NUMBER_NOT_INT; 7058 s++; 7059 if (s < send && (*s == '-' || *s == '+')) 7060 s++; 7061 if (s < send && isDIGIT(*s)) { 7062 do { 7063 s++; 7064 } while (s < send && isDIGIT(*s)); 7065 } 7066 else 7067 return 0; 7068 } 7069 } 7070 while (s < send && isSPACE(*s)) 7071 s++; 7072 if (s >= send) 7073 return numtype; 7074 if (len == 10 && memEQ(pv, "0 but true", 10)) { 7075 if (valuep) 7076 *valuep = 0; 7077 return IS_NUMBER_IN_UV; 7078 } 7079 return 0; 7080 } 7081 #endif 7082 #endif 7083 7084 /* 7085 * The grok_* routines have been modified to use warn() instead of 7086 * Perl_warner(). Also, 'hexdigit' was the former name of PL_hexdigit, 7087 * which is why the stack variable has been renamed to 'xdigit'. 7088 */ 7089 7090 #ifndef grok_bin 7091 #if defined(NEED_grok_bin) 7092 static UV DPPP_(my_grok_bin)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result); 7093 static 7094 #else 7095 extern UV DPPP_(my_grok_bin)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result); 7096 #endif 7097 7098 #ifdef grok_bin 7099 # undef grok_bin 7100 #endif 7101 #define grok_bin(a,b,c,d) DPPP_(my_grok_bin)(aTHX_ a,b,c,d) 7102 #define Perl_grok_bin DPPP_(my_grok_bin) 7103 7104 #if defined(NEED_grok_bin) || defined(NEED_grok_bin_GLOBAL) 7105 UV 7106 DPPP_(my_grok_bin)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result) 7107 { 7108 const char *s = start; 7109 STRLEN len = *len_p; 7110 UV value = 0; 7111 NV value_nv = 0; 7112 7113 const UV max_div_2 = UV_MAX / 2; 7114 bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES; 7115 bool overflowed = FALSE; 7116 7117 if (!(*flags & PERL_SCAN_DISALLOW_PREFIX)) { 7118 /* strip off leading b or 0b. 7119 for compatibility silently suffer "b" and "0b" as valid binary 7120 numbers. */ 7121 if (len >= 1) { 7122 if (s[0] == 'b') { 7123 s++; 7124 len--; 7125 } 7126 else if (len >= 2 && s[0] == '0' && s[1] == 'b') { 7127 s+=2; 7128 len-=2; 7129 } 7130 } 7131 } 7132 7133 for (; len-- && *s; s++) { 7134 char bit = *s; 7135 if (bit == '0' || bit == '1') { 7136 /* Write it in this wonky order with a goto to attempt to get the 7137 compiler to make the common case integer-only loop pretty tight. 7138 With gcc seems to be much straighter code than old scan_bin. */ 7139 redo: 7140 if (!overflowed) { 7141 if (value <= max_div_2) { 7142 value = (value << 1) | (bit - '0'); 7143 continue; 7144 } 7145 /* Bah. We're just overflowed. */ 7146 warn("Integer overflow in binary number"); 7147 overflowed = TRUE; 7148 value_nv = (NV) value; 7149 } 7150 value_nv *= 2.0; 7151 /* If an NV has not enough bits in its mantissa to 7152 * represent a UV this summing of small low-order numbers 7153 * is a waste of time (because the NV cannot preserve 7154 * the low-order bits anyway): we could just remember when 7155 * did we overflow and in the end just multiply value_nv by the 7156 * right amount. */ 7157 value_nv += (NV)(bit - '0'); 7158 continue; 7159 } 7160 if (bit == '_' && len && allow_underscores && (bit = s[1]) 7161 && (bit == '0' || bit == '1')) 7162 { 7163 --len; 7164 ++s; 7165 goto redo; 7166 } 7167 if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT)) 7168 warn("Illegal binary digit '%c' ignored", *s); 7169 break; 7170 } 7171 7172 if ( ( overflowed && value_nv > 4294967295.0) 7173 #if UVSIZE > 4 7174 || (!overflowed && value > 0xffffffff ) 7175 #endif 7176 ) { 7177 warn("Binary number > 0b11111111111111111111111111111111 non-portable"); 7178 } 7179 *len_p = s - start; 7180 if (!overflowed) { 7181 *flags = 0; 7182 return value; 7183 } 7184 *flags = PERL_SCAN_GREATER_THAN_UV_MAX; 7185 if (result) 7186 *result = value_nv; 7187 return UV_MAX; 7188 } 7189 #endif 7190 #endif 7191 7192 #ifndef grok_hex 7193 #if defined(NEED_grok_hex) 7194 static UV DPPP_(my_grok_hex)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result); 7195 static 7196 #else 7197 extern UV DPPP_(my_grok_hex)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result); 7198 #endif 7199 7200 #ifdef grok_hex 7201 # undef grok_hex 7202 #endif 7203 #define grok_hex(a,b,c,d) DPPP_(my_grok_hex)(aTHX_ a,b,c,d) 7204 #define Perl_grok_hex DPPP_(my_grok_hex) 7205 7206 #if defined(NEED_grok_hex) || defined(NEED_grok_hex_GLOBAL) 7207 UV 7208 DPPP_(my_grok_hex)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result) 7209 { 7210 const char *s = start; 7211 STRLEN len = *len_p; 7212 UV value = 0; 7213 NV value_nv = 0; 7214 7215 const UV max_div_16 = UV_MAX / 16; 7216 bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES; 7217 bool overflowed = FALSE; 7218 const char *xdigit; 7219 7220 if (!(*flags & PERL_SCAN_DISALLOW_PREFIX)) { 7221 /* strip off leading x or 0x. 7222 for compatibility silently suffer "x" and "0x" as valid hex numbers. 7223 */ 7224 if (len >= 1) { 7225 if (s[0] == 'x') { 7226 s++; 7227 len--; 7228 } 7229 else if (len >= 2 && s[0] == '0' && s[1] == 'x') { 7230 s+=2; 7231 len-=2; 7232 } 7233 } 7234 } 7235 7236 for (; len-- && *s; s++) { 7237 xdigit = strchr((char *) PL_hexdigit, *s); 7238 if (xdigit) { 7239 /* Write it in this wonky order with a goto to attempt to get the 7240 compiler to make the common case integer-only loop pretty tight. 7241 With gcc seems to be much straighter code than old scan_hex. */ 7242 redo: 7243 if (!overflowed) { 7244 if (value <= max_div_16) { 7245 value = (value << 4) | ((xdigit - PL_hexdigit) & 15); 7246 continue; 7247 } 7248 warn("Integer overflow in hexadecimal number"); 7249 overflowed = TRUE; 7250 value_nv = (NV) value; 7251 } 7252 value_nv *= 16.0; 7253 /* If an NV has not enough bits in its mantissa to 7254 * represent a UV this summing of small low-order numbers 7255 * is a waste of time (because the NV cannot preserve 7256 * the low-order bits anyway): we could just remember when 7257 * did we overflow and in the end just multiply value_nv by the 7258 * right amount of 16-tuples. */ 7259 value_nv += (NV)((xdigit - PL_hexdigit) & 15); 7260 continue; 7261 } 7262 if (*s == '_' && len && allow_underscores && s[1] 7263 && (xdigit = strchr((char *) PL_hexdigit, s[1]))) 7264 { 7265 --len; 7266 ++s; 7267 goto redo; 7268 } 7269 if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT)) 7270 warn("Illegal hexadecimal digit '%c' ignored", *s); 7271 break; 7272 } 7273 7274 if ( ( overflowed && value_nv > 4294967295.0) 7275 #if UVSIZE > 4 7276 || (!overflowed && value > 0xffffffff ) 7277 #endif 7278 ) { 7279 warn("Hexadecimal number > 0xffffffff non-portable"); 7280 } 7281 *len_p = s - start; 7282 if (!overflowed) { 7283 *flags = 0; 7284 return value; 7285 } 7286 *flags = PERL_SCAN_GREATER_THAN_UV_MAX; 7287 if (result) 7288 *result = value_nv; 7289 return UV_MAX; 7290 } 7291 #endif 7292 #endif 7293 7294 #ifndef grok_oct 7295 #if defined(NEED_grok_oct) 7296 static UV DPPP_(my_grok_oct)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result); 7297 static 7298 #else 7299 extern UV DPPP_(my_grok_oct)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result); 7300 #endif 7301 7302 #ifdef grok_oct 7303 # undef grok_oct 7304 #endif 7305 #define grok_oct(a,b,c,d) DPPP_(my_grok_oct)(aTHX_ a,b,c,d) 7306 #define Perl_grok_oct DPPP_(my_grok_oct) 7307 7308 #if defined(NEED_grok_oct) || defined(NEED_grok_oct_GLOBAL) 7309 UV 7310 DPPP_(my_grok_oct)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result) 7311 { 7312 const char *s = start; 7313 STRLEN len = *len_p; 7314 UV value = 0; 7315 NV value_nv = 0; 7316 7317 const UV max_div_8 = UV_MAX / 8; 7318 bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES; 7319 bool overflowed = FALSE; 7320 7321 for (; len-- && *s; s++) { 7322 /* gcc 2.95 optimiser not smart enough to figure that this subtraction 7323 out front allows slicker code. */ 7324 int digit = *s - '0'; 7325 if (digit >= 0 && digit <= 7) { 7326 /* Write it in this wonky order with a goto to attempt to get the 7327 compiler to make the common case integer-only loop pretty tight. 7328 */ 7329 redo: 7330 if (!overflowed) { 7331 if (value <= max_div_8) { 7332 value = (value << 3) | digit; 7333 continue; 7334 } 7335 /* Bah. We're just overflowed. */ 7336 warn("Integer overflow in octal number"); 7337 overflowed = TRUE; 7338 value_nv = (NV) value; 7339 } 7340 value_nv *= 8.0; 7341 /* If an NV has not enough bits in its mantissa to 7342 * represent a UV this summing of small low-order numbers 7343 * is a waste of time (because the NV cannot preserve 7344 * the low-order bits anyway): we could just remember when 7345 * did we overflow and in the end just multiply value_nv by the 7346 * right amount of 8-tuples. */ 7347 value_nv += (NV)digit; 7348 continue; 7349 } 7350 if (digit == ('_' - '0') && len && allow_underscores 7351 && (digit = s[1] - '0') && (digit >= 0 && digit <= 7)) 7352 { 7353 --len; 7354 ++s; 7355 goto redo; 7356 } 7357 /* Allow \octal to work the DWIM way (that is, stop scanning 7358 * as soon as non-octal characters are seen, complain only iff 7359 * someone seems to want to use the digits eight and nine). */ 7360 if (digit == 8 || digit == 9) { 7361 if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT)) 7362 warn("Illegal octal digit '%c' ignored", *s); 7363 } 7364 break; 7365 } 7366 7367 if ( ( overflowed && value_nv > 4294967295.0) 7368 #if UVSIZE > 4 7369 || (!overflowed && value > 0xffffffff ) 7370 #endif 7371 ) { 7372 warn("Octal number > 037777777777 non-portable"); 7373 } 7374 *len_p = s - start; 7375 if (!overflowed) { 7376 *flags = 0; 7377 return value; 7378 } 7379 *flags = PERL_SCAN_GREATER_THAN_UV_MAX; 7380 if (result) 7381 *result = value_nv; 7382 return UV_MAX; 7383 } 7384 #endif 7385 #endif 7386 7387 #if !defined(my_snprintf) 7388 #if defined(NEED_my_snprintf) 7389 static int DPPP_(my_my_snprintf)(char * buffer, const Size_t len, const char * format, ...); 7390 static 7391 #else 7392 extern int DPPP_(my_my_snprintf)(char * buffer, const Size_t len, const char * format, ...); 7393 #endif 7394 7395 #define my_snprintf DPPP_(my_my_snprintf) 7396 #define Perl_my_snprintf DPPP_(my_my_snprintf) 7397 7398 #if defined(NEED_my_snprintf) || defined(NEED_my_snprintf_GLOBAL) 7399 7400 int 7401 DPPP_(my_my_snprintf)(char *buffer, const Size_t len, const char *format, ...) 7402 { 7403 dTHX; 7404 int retval; 7405 va_list ap; 7406 va_start(ap, format); 7407 #ifdef HAS_VSNPRINTF 7408 retval = vsnprintf(buffer, len, format, ap); 7409 #else 7410 retval = vsprintf(buffer, format, ap); 7411 #endif 7412 va_end(ap); 7413 if (retval >= (int)len) 7414 Perl_croak(aTHX_ "panic: my_snprintf buffer overflow"); 7415 return retval; 7416 } 7417 7418 #endif 7419 #endif 7420 7421 #ifdef NO_XSLOCKS 7422 # ifdef dJMPENV 7423 # define dXCPT dJMPENV; int rEtV = 0 7424 # define XCPT_TRY_START JMPENV_PUSH(rEtV); if (rEtV == 0) 7425 # define XCPT_TRY_END JMPENV_POP; 7426 # define XCPT_CATCH if (rEtV != 0) 7427 # define XCPT_RETHROW JMPENV_JUMP(rEtV) 7428 # else 7429 # define dXCPT Sigjmp_buf oldTOP; int rEtV = 0 7430 # define XCPT_TRY_START Copy(top_env, oldTOP, 1, Sigjmp_buf); rEtV = Sigsetjmp(top_env, 1); if (rEtV == 0) 7431 # define XCPT_TRY_END Copy(oldTOP, top_env, 1, Sigjmp_buf); 7432 # define XCPT_CATCH if (rEtV != 0) 7433 # define XCPT_RETHROW Siglongjmp(top_env, rEtV) 7434 # endif 7435 #endif 7436 7437 #if !defined(my_strlcat) 7438 #if defined(NEED_my_strlcat) 7439 static Size_t DPPP_(my_my_strlcat)(char * dst, const char * src, Size_t size); 7440 static 7441 #else 7442 extern Size_t DPPP_(my_my_strlcat)(char * dst, const char * src, Size_t size); 7443 #endif 7444 7445 #define my_strlcat DPPP_(my_my_strlcat) 7446 #define Perl_my_strlcat DPPP_(my_my_strlcat) 7447 7448 #if defined(NEED_my_strlcat) || defined(NEED_my_strlcat_GLOBAL) 7449 7450 Size_t 7451 DPPP_(my_my_strlcat)(char *dst, const char *src, Size_t size) 7452 { 7453 Size_t used, length, copy; 7454 7455 used = strlen(dst); 7456 length = strlen(src); 7457 if (size > 0 && used < size - 1) { 7458 copy = (length >= size - used) ? size - used - 1 : length; 7459 memcpy(dst + used, src, copy); 7460 dst[used + copy] = '\0'; 7461 } 7462 return used + length; 7463 } 7464 #endif 7465 #endif 7466 7467 #if !defined(my_strlcpy) 7468 #if defined(NEED_my_strlcpy) 7469 static Size_t DPPP_(my_my_strlcpy)(char * dst, const char * src, Size_t size); 7470 static 7471 #else 7472 extern Size_t DPPP_(my_my_strlcpy)(char * dst, const char * src, Size_t size); 7473 #endif 7474 7475 #define my_strlcpy DPPP_(my_my_strlcpy) 7476 #define Perl_my_strlcpy DPPP_(my_my_strlcpy) 7477 7478 #if defined(NEED_my_strlcpy) || defined(NEED_my_strlcpy_GLOBAL) 7479 7480 Size_t 7481 DPPP_(my_my_strlcpy)(char *dst, const char *src, Size_t size) 7482 { 7483 Size_t length, copy; 7484 7485 length = strlen(src); 7486 if (size > 0) { 7487 copy = (length >= size) ? size - 1 : length; 7488 memcpy(dst, src, copy); 7489 dst[copy] = '\0'; 7490 } 7491 return length; 7492 } 7493 7494 #endif 7495 #endif 7496 7497 #endif /* _P_P_PORTABILITY_H_ */ 7498 7499 /* End of File ppport.h */
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Tue Mar 17 22:47:18 2015 | Cross-referenced by PHPXref 0.7.1 |