├── parts ├── base │ ├── 5003070 │ ├── 5004000 │ ├── 5004010 │ ├── 5004020 │ ├── 5004030 │ ├── 5004040 │ ├── 5004050 │ ├── 5005000 │ ├── 5005010 │ ├── 5005020 │ ├── 5005030 │ ├── 5005040 │ ├── 5006001 │ ├── 5006002 │ ├── 5007000 │ ├── 5007001 │ ├── 5007002 │ ├── 5007003 │ ├── 5008000 │ ├── 5008001 │ ├── 5008002 │ ├── 5008003 │ ├── 5008004 │ ├── 5008005 │ ├── 5008006 │ ├── 5008007 │ ├── 5008008 │ ├── 5008009 │ ├── 5009000 │ ├── 5009001 │ ├── 5009002 │ ├── 5009003 │ ├── 5009004 │ ├── 5009005 │ ├── 5010000 │ ├── 5010001 │ ├── 5011000 │ ├── 5011001 │ ├── 5011002 │ ├── 5011003 │ ├── 5011004 │ ├── 5011005 │ ├── 5012000 │ ├── 5012001 │ ├── 5012002 │ ├── 5012003 │ ├── 5012004 │ ├── 5012005 │ ├── 5013000 │ ├── 5013001 │ ├── 5013002 │ ├── 5013003 │ ├── 5013004 │ ├── 5013005 │ ├── 5013006 │ ├── 5013007 │ ├── 5013008 │ ├── 5013009 │ ├── 5013010 │ ├── 5013011 │ ├── 5014000 │ ├── 5014001 │ ├── 5014002 │ ├── 5014003 │ ├── 5014004 │ ├── 5015000 │ ├── 5015001 │ ├── 5015002 │ ├── 5015003 │ ├── 5015004 │ ├── 5015005 │ ├── 5015006 │ ├── 5015007 │ ├── 5015008 │ ├── 5015009 │ ├── 5016000 │ ├── 5016001 │ ├── 5016002 │ ├── 5016003 │ ├── 5017000 │ ├── 5017001 │ ├── 5017002 │ ├── 5017003 │ ├── 5017004 │ ├── 5017005 │ ├── 5017006 │ ├── 5017007 │ ├── 5017008 │ ├── 5017009 │ ├── 5017010 │ ├── 5017011 │ ├── 5018000 │ ├── 5018001 │ ├── 5018002 │ ├── 5018003 │ ├── 5018004 │ ├── 5019000 │ ├── 5019001 │ ├── 5019002 │ ├── 5019003 │ ├── 5019004 │ ├── 5019005 │ ├── 5019006 │ ├── 5019007 │ ├── 5019008 │ ├── 5019009 │ ├── 5019010 │ ├── 5019011 │ ├── 5020000 │ ├── 5020001 │ ├── 5021000 │ ├── 5021001 │ ├── 5021002 │ ├── 5021004 │ ├── 5021005 │ ├── 5021006 │ ├── 5021007 │ └── 5021008 ├── todo │ ├── 5003070 │ ├── 5004000 │ ├── 5004010 │ ├── 5004020 │ ├── 5004030 │ ├── 5004040 │ ├── 5004050 │ ├── 5005000 │ ├── 5005010 │ ├── 5005020 │ ├── 5005030 │ ├── 5005040 │ ├── 5006000 │ ├── 5006001 │ ├── 5006002 │ ├── 5007000 │ ├── 5007001 │ ├── 5007002 │ ├── 5007003 │ ├── 5008000 │ ├── 5008001 │ ├── 5008002 │ ├── 5008003 │ ├── 5008004 │ ├── 5008005 │ ├── 5008006 │ ├── 5008007 │ ├── 5008008 │ ├── 5008009 │ ├── 5009000 │ ├── 5009001 │ ├── 5009002 │ ├── 5009003 │ ├── 5009004 │ ├── 5009005 │ ├── 5010000 │ ├── 5010001 │ ├── 5011000 │ ├── 5011001 │ ├── 5011002 │ ├── 5011003 │ ├── 5011004 │ ├── 5011005 │ ├── 5012000 │ ├── 5012001 │ ├── 5012002 │ ├── 5012003 │ ├── 5012004 │ ├── 5012005 │ ├── 5013000 │ ├── 5013001 │ ├── 5013002 │ ├── 5013003 │ ├── 5013004 │ ├── 5013005 │ ├── 5013006 │ ├── 5013007 │ ├── 5013008 │ ├── 5013009 │ ├── 5013010 │ ├── 5013011 │ ├── 5014000 │ ├── 5014001 │ ├── 5014002 │ ├── 5014003 │ ├── 5014004 │ ├── 5015000 │ ├── 5015001 │ ├── 5015002 │ ├── 5015003 │ ├── 5015004 │ ├── 5015005 │ ├── 5015006 │ ├── 5015007 │ ├── 5015008 │ ├── 5015009 │ ├── 5016000 │ ├── 5016001 │ ├── 5016002 │ ├── 5016003 │ ├── 5017000 │ ├── 5017001 │ ├── 5017002 │ ├── 5017003 │ ├── 5017004 │ ├── 5017005 │ ├── 5017006 │ ├── 5017007 │ ├── 5017008 │ ├── 5017009 │ ├── 5017010 │ ├── 5017011 │ ├── 5018000 │ ├── 5018001 │ ├── 5018002 │ ├── 5018003 │ ├── 5018004 │ ├── 5019000 │ ├── 5019001 │ ├── 5019002 │ ├── 5019003 │ ├── 5019004 │ ├── 5019005 │ ├── 5019006 │ ├── 5019007 │ ├── 5019008 │ ├── 5019009 │ ├── 5019010 │ ├── 5019011 │ ├── 5020000 │ ├── 5020001 │ ├── 5021000 │ ├── 5021001 │ ├── 5021002 │ ├── 5021004 │ ├── 5021005 │ ├── 5021006 │ ├── 5021007 │ └── 5021008 ├── ppport.fnc └── inc │ ├── HvNAME │ ├── podtest │ ├── sprintf │ ├── threads │ ├── snprintf │ ├── newRV │ ├── version │ ├── format │ ├── exception │ ├── newSV_type │ ├── shared_pv │ ├── memory │ ├── strlfuncs │ ├── newCONSTSUB │ ├── newSVpv │ ├── gv │ ├── Sv_set │ ├── uv │ ├── mPUSH │ ├── SvREFCNT │ ├── pvs │ ├── warn │ └── MY_CXT ├── README.md ├── .whitesource ├── .gitignore ├── PPPort.xs ├── MANIFEST.SKIP ├── ppport_h.PL ├── apicheck_c.PL ├── t └── testutil.pl ├── typemap ├── module2.c ├── module3.c ├── devel ├── mktodo ├── mkapidoc.sh ├── scanprov ├── devtools.pl └── regenerate ├── README ├── mktests.PL ├── PPPort_xs.PL └── Makefile.PL /parts/base/5004010: -------------------------------------------------------------------------------- 1 | 5.004010 2 | -------------------------------------------------------------------------------- /parts/base/5004020: -------------------------------------------------------------------------------- 1 | 5.004020 2 | -------------------------------------------------------------------------------- /parts/base/5004030: -------------------------------------------------------------------------------- 1 | 5.004030 2 | -------------------------------------------------------------------------------- /parts/base/5004040: -------------------------------------------------------------------------------- 1 | 5.004040 2 | -------------------------------------------------------------------------------- /parts/base/5005010: -------------------------------------------------------------------------------- 1 | 5.005010 2 | -------------------------------------------------------------------------------- /parts/base/5005020: -------------------------------------------------------------------------------- 1 | 5.005020 2 | -------------------------------------------------------------------------------- /parts/base/5005040: -------------------------------------------------------------------------------- 1 | 5.005040 2 | -------------------------------------------------------------------------------- /parts/base/5006002: -------------------------------------------------------------------------------- 1 | 5.006002 2 | -------------------------------------------------------------------------------- /parts/base/5007000: -------------------------------------------------------------------------------- 1 | 5.007000 2 | -------------------------------------------------------------------------------- /parts/base/5008002: -------------------------------------------------------------------------------- 1 | 5.008002 2 | -------------------------------------------------------------------------------- /parts/base/5008004: -------------------------------------------------------------------------------- 1 | 5.008004 2 | -------------------------------------------------------------------------------- /parts/base/5008005: -------------------------------------------------------------------------------- 1 | 5.008005 2 | -------------------------------------------------------------------------------- /parts/base/5008006: -------------------------------------------------------------------------------- 1 | 5.008006 2 | -------------------------------------------------------------------------------- /parts/base/5008007: -------------------------------------------------------------------------------- 1 | 5.008007 2 | -------------------------------------------------------------------------------- /parts/base/5008008: -------------------------------------------------------------------------------- 1 | 5.008008 2 | -------------------------------------------------------------------------------- /parts/base/5008009: -------------------------------------------------------------------------------- 1 | 5.008009 2 | -------------------------------------------------------------------------------- /parts/base/5011003: -------------------------------------------------------------------------------- 1 | 5.011003 2 | -------------------------------------------------------------------------------- /parts/base/5012000: -------------------------------------------------------------------------------- 1 | 5.012000 2 | -------------------------------------------------------------------------------- /parts/base/5012001: -------------------------------------------------------------------------------- 1 | 5.012001 2 | -------------------------------------------------------------------------------- /parts/base/5012002: -------------------------------------------------------------------------------- 1 | 5.012002 2 | -------------------------------------------------------------------------------- /parts/base/5012003: -------------------------------------------------------------------------------- 1 | 5.012003 2 | -------------------------------------------------------------------------------- /parts/base/5012004: -------------------------------------------------------------------------------- 1 | 5.012004 2 | -------------------------------------------------------------------------------- /parts/base/5012005: -------------------------------------------------------------------------------- 1 | 5.012005 2 | -------------------------------------------------------------------------------- /parts/base/5013000: -------------------------------------------------------------------------------- 1 | 5.013000 2 | -------------------------------------------------------------------------------- /parts/base/5013004: -------------------------------------------------------------------------------- 1 | 5.013004 2 | -------------------------------------------------------------------------------- /parts/base/5013009: -------------------------------------------------------------------------------- 1 | 5.013009 2 | -------------------------------------------------------------------------------- /parts/base/5013011: -------------------------------------------------------------------------------- 1 | 5.013011 2 | -------------------------------------------------------------------------------- /parts/base/5014001: -------------------------------------------------------------------------------- 1 | 5.014001 2 | -------------------------------------------------------------------------------- /parts/base/5014002: -------------------------------------------------------------------------------- 1 | 5.014002 2 | -------------------------------------------------------------------------------- /parts/base/5014003: -------------------------------------------------------------------------------- 1 | 5.014003 2 | -------------------------------------------------------------------------------- /parts/base/5014004: -------------------------------------------------------------------------------- 1 | 5.014004 2 | -------------------------------------------------------------------------------- /parts/base/5015000: -------------------------------------------------------------------------------- 1 | 5.015000 2 | -------------------------------------------------------------------------------- /parts/base/5015002: -------------------------------------------------------------------------------- 1 | 5.015002 2 | -------------------------------------------------------------------------------- /parts/base/5015003: -------------------------------------------------------------------------------- 1 | 5.015003 2 | -------------------------------------------------------------------------------- /parts/base/5015005: -------------------------------------------------------------------------------- 1 | 5.015005 2 | -------------------------------------------------------------------------------- /parts/base/5016000: -------------------------------------------------------------------------------- 1 | 5.016000 2 | -------------------------------------------------------------------------------- /parts/base/5016001: -------------------------------------------------------------------------------- 1 | 5.016001 2 | -------------------------------------------------------------------------------- /parts/base/5016002: -------------------------------------------------------------------------------- 1 | 5.016002 2 | -------------------------------------------------------------------------------- /parts/base/5016003: -------------------------------------------------------------------------------- 1 | 5.016003 2 | -------------------------------------------------------------------------------- /parts/base/5017000: -------------------------------------------------------------------------------- 1 | 5.017000 2 | -------------------------------------------------------------------------------- /parts/base/5017001: -------------------------------------------------------------------------------- 1 | 5.017001 2 | -------------------------------------------------------------------------------- /parts/base/5017003: -------------------------------------------------------------------------------- 1 | 5.017003 2 | -------------------------------------------------------------------------------- /parts/base/5017005: -------------------------------------------------------------------------------- 1 | 5.017005 2 | -------------------------------------------------------------------------------- /parts/base/5017010: -------------------------------------------------------------------------------- 1 | 5.017010 2 | -------------------------------------------------------------------------------- /parts/base/5017011: -------------------------------------------------------------------------------- 1 | 5.017011 2 | -------------------------------------------------------------------------------- /parts/base/5018001: -------------------------------------------------------------------------------- 1 | 5.018001 2 | -------------------------------------------------------------------------------- /parts/base/5018002: -------------------------------------------------------------------------------- 1 | 5.018002 2 | -------------------------------------------------------------------------------- /parts/base/5018003: -------------------------------------------------------------------------------- 1 | 5.018003 2 | -------------------------------------------------------------------------------- /parts/base/5018004: -------------------------------------------------------------------------------- 1 | 5.018004 2 | -------------------------------------------------------------------------------- /parts/base/5019000: -------------------------------------------------------------------------------- 1 | 5.019000 2 | -------------------------------------------------------------------------------- /parts/base/5019005: -------------------------------------------------------------------------------- 1 | 5.019005 2 | -------------------------------------------------------------------------------- /parts/base/5019006: -------------------------------------------------------------------------------- 1 | 5.019006 2 | -------------------------------------------------------------------------------- /parts/base/5019008: -------------------------------------------------------------------------------- 1 | 5.019008 2 | -------------------------------------------------------------------------------- /parts/base/5019011: -------------------------------------------------------------------------------- 1 | 5.019011 2 | -------------------------------------------------------------------------------- /parts/base/5020000: -------------------------------------------------------------------------------- 1 | 5.020000 2 | -------------------------------------------------------------------------------- /parts/base/5020001: -------------------------------------------------------------------------------- 1 | 5.020001 2 | -------------------------------------------------------------------------------- /parts/base/5021000: -------------------------------------------------------------------------------- 1 | 5.021000 2 | -------------------------------------------------------------------------------- /parts/todo/5004010: -------------------------------------------------------------------------------- 1 | 5.004010 2 | -------------------------------------------------------------------------------- /parts/todo/5004020: -------------------------------------------------------------------------------- 1 | 5.004020 2 | -------------------------------------------------------------------------------- /parts/todo/5004030: -------------------------------------------------------------------------------- 1 | 5.004030 2 | -------------------------------------------------------------------------------- /parts/todo/5004040: -------------------------------------------------------------------------------- 1 | 5.004040 2 | -------------------------------------------------------------------------------- /parts/todo/5005010: -------------------------------------------------------------------------------- 1 | 5.005010 2 | -------------------------------------------------------------------------------- /parts/todo/5005020: -------------------------------------------------------------------------------- 1 | 5.005020 2 | -------------------------------------------------------------------------------- /parts/todo/5005040: -------------------------------------------------------------------------------- 1 | 5.005040 2 | -------------------------------------------------------------------------------- /parts/todo/5006002: -------------------------------------------------------------------------------- 1 | 5.006002 2 | -------------------------------------------------------------------------------- /parts/todo/5007000: -------------------------------------------------------------------------------- 1 | 5.007000 2 | -------------------------------------------------------------------------------- /parts/todo/5008002: -------------------------------------------------------------------------------- 1 | 5.008002 2 | -------------------------------------------------------------------------------- /parts/todo/5008004: -------------------------------------------------------------------------------- 1 | 5.008004 2 | -------------------------------------------------------------------------------- /parts/todo/5008005: -------------------------------------------------------------------------------- 1 | 5.008005 2 | -------------------------------------------------------------------------------- /parts/todo/5008006: -------------------------------------------------------------------------------- 1 | 5.008006 2 | -------------------------------------------------------------------------------- /parts/todo/5008007: -------------------------------------------------------------------------------- 1 | 5.008007 2 | -------------------------------------------------------------------------------- /parts/todo/5008008: -------------------------------------------------------------------------------- 1 | 5.008008 2 | -------------------------------------------------------------------------------- /parts/todo/5008009: -------------------------------------------------------------------------------- 1 | 5.008009 2 | -------------------------------------------------------------------------------- /parts/todo/5011003: -------------------------------------------------------------------------------- 1 | 5.011003 2 | -------------------------------------------------------------------------------- /parts/todo/5012000: -------------------------------------------------------------------------------- 1 | 5.012000 2 | -------------------------------------------------------------------------------- /parts/todo/5012001: -------------------------------------------------------------------------------- 1 | 5.012001 2 | -------------------------------------------------------------------------------- /parts/todo/5012002: -------------------------------------------------------------------------------- 1 | 5.012002 2 | -------------------------------------------------------------------------------- /parts/todo/5012003: -------------------------------------------------------------------------------- 1 | 5.012003 2 | -------------------------------------------------------------------------------- /parts/todo/5012004: -------------------------------------------------------------------------------- 1 | 5.012004 2 | -------------------------------------------------------------------------------- /parts/todo/5012005: -------------------------------------------------------------------------------- 1 | 5.012005 2 | -------------------------------------------------------------------------------- /parts/todo/5013000: -------------------------------------------------------------------------------- 1 | 5.013000 2 | -------------------------------------------------------------------------------- /parts/todo/5013004: -------------------------------------------------------------------------------- 1 | 5.013004 2 | -------------------------------------------------------------------------------- /parts/todo/5013009: -------------------------------------------------------------------------------- 1 | 5.013009 2 | -------------------------------------------------------------------------------- /parts/todo/5013011: -------------------------------------------------------------------------------- 1 | 5.013011 2 | -------------------------------------------------------------------------------- /parts/todo/5014001: -------------------------------------------------------------------------------- 1 | 5.014001 2 | -------------------------------------------------------------------------------- /parts/todo/5014002: -------------------------------------------------------------------------------- 1 | 5.014002 2 | -------------------------------------------------------------------------------- /parts/todo/5014003: -------------------------------------------------------------------------------- 1 | 5.014003 2 | -------------------------------------------------------------------------------- /parts/todo/5014004: -------------------------------------------------------------------------------- 1 | 5.014004 2 | -------------------------------------------------------------------------------- /parts/todo/5015000: -------------------------------------------------------------------------------- 1 | 5.015000 2 | -------------------------------------------------------------------------------- /parts/todo/5015002: -------------------------------------------------------------------------------- 1 | 5.015002 2 | -------------------------------------------------------------------------------- /parts/todo/5015003: -------------------------------------------------------------------------------- 1 | 5.015003 2 | -------------------------------------------------------------------------------- /parts/todo/5015005: -------------------------------------------------------------------------------- 1 | 5.015005 2 | -------------------------------------------------------------------------------- /parts/todo/5016000: -------------------------------------------------------------------------------- 1 | 5.016000 2 | -------------------------------------------------------------------------------- /parts/todo/5016001: -------------------------------------------------------------------------------- 1 | 5.016001 2 | -------------------------------------------------------------------------------- /parts/todo/5016002: -------------------------------------------------------------------------------- 1 | 5.016002 2 | -------------------------------------------------------------------------------- /parts/todo/5016003: -------------------------------------------------------------------------------- 1 | 5.016003 2 | -------------------------------------------------------------------------------- /parts/todo/5017000: -------------------------------------------------------------------------------- 1 | 5.017000 2 | -------------------------------------------------------------------------------- /parts/todo/5017001: -------------------------------------------------------------------------------- 1 | 5.017001 2 | -------------------------------------------------------------------------------- /parts/todo/5017003: -------------------------------------------------------------------------------- 1 | 5.017003 2 | -------------------------------------------------------------------------------- /parts/todo/5017005: -------------------------------------------------------------------------------- 1 | 5.017005 2 | -------------------------------------------------------------------------------- /parts/todo/5017010: -------------------------------------------------------------------------------- 1 | 5.017010 2 | -------------------------------------------------------------------------------- /parts/todo/5017011: -------------------------------------------------------------------------------- 1 | 5.017011 2 | -------------------------------------------------------------------------------- /parts/todo/5018001: -------------------------------------------------------------------------------- 1 | 5.018001 2 | -------------------------------------------------------------------------------- /parts/todo/5018002: -------------------------------------------------------------------------------- 1 | 5.018002 2 | -------------------------------------------------------------------------------- /parts/todo/5018003: -------------------------------------------------------------------------------- 1 | 5.018003 2 | -------------------------------------------------------------------------------- /parts/todo/5018004: -------------------------------------------------------------------------------- 1 | 5.018004 2 | -------------------------------------------------------------------------------- /parts/todo/5019000: -------------------------------------------------------------------------------- 1 | 5.019000 2 | -------------------------------------------------------------------------------- /parts/todo/5019005: -------------------------------------------------------------------------------- 1 | 5.019005 2 | -------------------------------------------------------------------------------- /parts/todo/5019006: -------------------------------------------------------------------------------- 1 | 5.019006 2 | -------------------------------------------------------------------------------- /parts/todo/5019008: -------------------------------------------------------------------------------- 1 | 5.019008 2 | -------------------------------------------------------------------------------- /parts/todo/5019011: -------------------------------------------------------------------------------- 1 | 5.019011 2 | -------------------------------------------------------------------------------- /parts/todo/5020000: -------------------------------------------------------------------------------- 1 | 5.020000 2 | -------------------------------------------------------------------------------- /parts/todo/5020001: -------------------------------------------------------------------------------- 1 | 5.020001 2 | -------------------------------------------------------------------------------- /parts/todo/5021000: -------------------------------------------------------------------------------- 1 | 5.021000 2 | -------------------------------------------------------------------------------- /parts/base/5011004: -------------------------------------------------------------------------------- 1 | 5.011004 2 | prescan_version # U 3 | -------------------------------------------------------------------------------- /parts/base/5011005: -------------------------------------------------------------------------------- 1 | 5.011005 2 | sv_pos_u2b_flags # U 3 | -------------------------------------------------------------------------------- /parts/base/5014000: -------------------------------------------------------------------------------- 1 | 5.014000 2 | _to_uni_fold_flags # U 3 | -------------------------------------------------------------------------------- /parts/base/5015006: -------------------------------------------------------------------------------- 1 | 5.015006 2 | newCONSTSUB_flags # A 3 | -------------------------------------------------------------------------------- /parts/base/5017006: -------------------------------------------------------------------------------- 1 | 5.017006 2 | READ_XDIGIT # U 3 | -------------------------------------------------------------------------------- /parts/base/5018000: -------------------------------------------------------------------------------- 1 | 5.018000 2 | hv_rand_set # U 3 | -------------------------------------------------------------------------------- /parts/base/5019002: -------------------------------------------------------------------------------- 1 | 5.019002 2 | SVt_INVLIST # E 3 | -------------------------------------------------------------------------------- /parts/base/5019007: -------------------------------------------------------------------------------- 1 | 5.019007 2 | OP_TYPE_IS # U 3 | -------------------------------------------------------------------------------- /parts/base/5019010: -------------------------------------------------------------------------------- 1 | 5.019010 2 | OP_TYPE_IS_OR_WAS # U 3 | -------------------------------------------------------------------------------- /parts/todo/5011004: -------------------------------------------------------------------------------- 1 | 5.011004 2 | prescan_version # U 3 | -------------------------------------------------------------------------------- /parts/todo/5011005: -------------------------------------------------------------------------------- 1 | 5.011005 2 | sv_pos_u2b_flags # U 3 | -------------------------------------------------------------------------------- /parts/todo/5014000: -------------------------------------------------------------------------------- 1 | 5.014000 2 | _to_uni_fold_flags # U 3 | -------------------------------------------------------------------------------- /parts/todo/5015006: -------------------------------------------------------------------------------- 1 | 5.015006 2 | newCONSTSUB_flags # A 3 | -------------------------------------------------------------------------------- /parts/todo/5017006: -------------------------------------------------------------------------------- 1 | 5.017006 2 | READ_XDIGIT # U 3 | -------------------------------------------------------------------------------- /parts/todo/5018000: -------------------------------------------------------------------------------- 1 | 5.018000 2 | hv_rand_set # U 3 | -------------------------------------------------------------------------------- /parts/todo/5019002: -------------------------------------------------------------------------------- 1 | 5.019002 2 | SVt_INVLIST # E 3 | -------------------------------------------------------------------------------- /parts/todo/5019007: -------------------------------------------------------------------------------- 1 | 5.019007 2 | OP_TYPE_IS # U 3 | -------------------------------------------------------------------------------- /parts/todo/5019010: -------------------------------------------------------------------------------- 1 | 5.019010 2 | OP_TYPE_IS_OR_WAS # U 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Devel-PPPort 2 | ============ 3 | 4 | Perl/Pollution/Portability 5 | -------------------------------------------------------------------------------- /parts/base/5008003: -------------------------------------------------------------------------------- 1 | 5.008003 2 | SvIsCOW # U 3 | SvIsCOW_shared_hash # U 4 | -------------------------------------------------------------------------------- /parts/base/5013003: -------------------------------------------------------------------------------- 1 | 5.013003 2 | blockhook_register # E 3 | croak_no_modify # U 4 | -------------------------------------------------------------------------------- /parts/base/5015008: -------------------------------------------------------------------------------- 1 | 5.015008 2 | is_utf8_char_buf # U 3 | wrap_op_checker # U 4 | -------------------------------------------------------------------------------- /parts/base/5017009: -------------------------------------------------------------------------------- 1 | 5.017009 2 | av_tindex # U 3 | av_top_index # U 4 | -------------------------------------------------------------------------------- /parts/base/5021006: -------------------------------------------------------------------------------- 1 | 5.021006 2 | newDEFSVOP # U 3 | op_convert_list # U 4 | -------------------------------------------------------------------------------- /parts/todo/5008003: -------------------------------------------------------------------------------- 1 | 5.008003 2 | SvIsCOW # U 3 | SvIsCOW_shared_hash # U 4 | -------------------------------------------------------------------------------- /parts/todo/5013003: -------------------------------------------------------------------------------- 1 | 5.013003 2 | blockhook_register # E 3 | croak_no_modify # U 4 | -------------------------------------------------------------------------------- /parts/todo/5015008: -------------------------------------------------------------------------------- 1 | 5.015008 2 | is_utf8_char_buf # U 3 | wrap_op_checker # U 4 | -------------------------------------------------------------------------------- /parts/todo/5017009: -------------------------------------------------------------------------------- 1 | 5.017009 2 | av_tindex # U 3 | av_top_index # U 4 | -------------------------------------------------------------------------------- /parts/todo/5021006: -------------------------------------------------------------------------------- 1 | 5.021006 2 | newDEFSVOP # U 3 | op_convert_list # U 4 | -------------------------------------------------------------------------------- /parts/base/5019003: -------------------------------------------------------------------------------- 1 | 5.019003 2 | croak_memory_wrap # U (Perl_croak_memory_wrap) 3 | sv_pos_b2u_flags # U 4 | -------------------------------------------------------------------------------- /parts/todo/5019003: -------------------------------------------------------------------------------- 1 | 5.019003 2 | croak_memory_wrap # U (Perl_croak_memory_wrap) 3 | sv_pos_b2u_flags # U 4 | -------------------------------------------------------------------------------- /parts/base/5005030: -------------------------------------------------------------------------------- 1 | 5.005030 2 | POPpx # E 3 | get_vtbl # E 4 | save_generic_svref # E 5 | -------------------------------------------------------------------------------- /parts/base/5013010: -------------------------------------------------------------------------------- 1 | 5.013010 2 | foldEQ_utf8_flags # U 3 | is_utf8_xidcont # U 4 | is_utf8_xidfirst # U 5 | -------------------------------------------------------------------------------- /parts/base/5019004: -------------------------------------------------------------------------------- 1 | 5.019004 2 | append_utf8_from_native_byte # U 3 | is_safe_syscall # U 4 | uvoffuni_to_utf8_flags # U 5 | -------------------------------------------------------------------------------- /parts/base/5021002: -------------------------------------------------------------------------------- 1 | 5.021002 2 | grok_number_flags # U 3 | op_parent # U 4 | op_sibling_splice # U 5 | -------------------------------------------------------------------------------- /parts/base/5021005: -------------------------------------------------------------------------------- 1 | 5.021005 2 | cv_name # A 3 | newMETHOP # U 4 | newMETHOP_named # U 5 | -------------------------------------------------------------------------------- /parts/todo/5005030: -------------------------------------------------------------------------------- 1 | 5.005030 2 | POPpx # E 3 | get_vtbl # U 4 | save_generic_svref # U 5 | -------------------------------------------------------------------------------- /parts/todo/5013010: -------------------------------------------------------------------------------- 1 | 5.013010 2 | foldEQ_utf8_flags # U 3 | is_utf8_xidcont # U 4 | is_utf8_xidfirst # U 5 | -------------------------------------------------------------------------------- /parts/todo/5019004: -------------------------------------------------------------------------------- 1 | 5.019004 2 | append_utf8_from_native_byte # U 3 | is_safe_syscall # U 4 | uvoffuni_to_utf8_flags # U 5 | -------------------------------------------------------------------------------- /parts/todo/5021002: -------------------------------------------------------------------------------- 1 | 5.021002 2 | grok_number_flags # U 3 | op_parent # U 4 | op_sibling_splice # U 5 | -------------------------------------------------------------------------------- /parts/todo/5021005: -------------------------------------------------------------------------------- 1 | 5.021005 2 | cv_name # A 3 | newMETHOP # U 4 | newMETHOP_named # U 5 | -------------------------------------------------------------------------------- /.whitesource: -------------------------------------------------------------------------------- 1 | { 2 | "generalSettings": { 3 | "shouldScanRepo": true 4 | }, 5 | "checkRunSettings": { 6 | "vulnerableCheckRunConclusionLevel": "failure" 7 | } 8 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /blib/ 2 | /Makefile 3 | /Makefile.old 4 | /MANIFEST.bak 5 | /META.yml 6 | /MYMETA.* 7 | pm_to_blib 8 | /PPPort.pm 9 | /RealPPPort.* 10 | /ppport.h 11 | /t/*.t 12 | -------------------------------------------------------------------------------- /parts/base/5015009: -------------------------------------------------------------------------------- 1 | 5.015009 2 | utf8_to_uvchr_buf # U 3 | utf8_to_uvuni_buf # U 4 | valid_utf8_to_uvchr # U 5 | valid_utf8_to_uvuni # U 6 | -------------------------------------------------------------------------------- /parts/base/5019009: -------------------------------------------------------------------------------- 1 | 5.019009 2 | _to_utf8_fold_flags # A 3 | _to_utf8_lower_flags # A 4 | _to_utf8_title_flags # A 5 | _to_utf8_upper_flags # A 6 | -------------------------------------------------------------------------------- /parts/base/5021004: -------------------------------------------------------------------------------- 1 | 5.021004 2 | cv_set_call_checker_flags # U 3 | grok_infnan # U 4 | isinfnan # U 5 | sync_locale # U 6 | -------------------------------------------------------------------------------- /parts/todo/5013005: -------------------------------------------------------------------------------- 1 | 5.013005 2 | PL_rpeepp # E 3 | isOCTAL # U 4 | lex_stuff_pvs # U 5 | parse_fullstmt # U 6 | -------------------------------------------------------------------------------- /parts/todo/5015009: -------------------------------------------------------------------------------- 1 | 5.015009 2 | utf8_to_uvchr_buf # U 3 | utf8_to_uvuni_buf # U 4 | valid_utf8_to_uvchr # U 5 | valid_utf8_to_uvuni # U 6 | -------------------------------------------------------------------------------- /parts/todo/5019009: -------------------------------------------------------------------------------- 1 | 5.019009 2 | _to_utf8_fold_flags # A 3 | _to_utf8_lower_flags # A 4 | _to_utf8_title_flags # A 5 | _to_utf8_upper_flags # A 6 | -------------------------------------------------------------------------------- /parts/todo/5021004: -------------------------------------------------------------------------------- 1 | 5.021004 2 | cv_set_call_checker_flags # U 3 | grok_infnan # U 4 | isinfnan # U 5 | sync_locale # U 6 | -------------------------------------------------------------------------------- /parts/base/5017004: -------------------------------------------------------------------------------- 1 | 5.017004 2 | PL_comppad_name # E 3 | PadlistREFCNT # U 4 | newMYSUB # E (Perl_newMYSUB) 5 | newSVpadname # E 6 | -------------------------------------------------------------------------------- /parts/todo/5017004: -------------------------------------------------------------------------------- 1 | 5.017004 2 | PL_comppad_name # E 3 | PadlistREFCNT # U 4 | newMYSUB # E (Perl_newMYSUB) 5 | newSVpadname # E 6 | -------------------------------------------------------------------------------- /PPPort.xs: -------------------------------------------------------------------------------- 1 | This is just a dummy file to let Configure know that Devel::PPPort 2 | is an XS module. The real XS code is autogenerated from PPPort_xs.PL 3 | when this module is built and will go to RealPPPort.xs. 4 | -------------------------------------------------------------------------------- /parts/base/5009000: -------------------------------------------------------------------------------- 1 | 5.009000 2 | new_version # U 3 | save_set_svflags # U 4 | vcmp # U 5 | vnumify # U 6 | vstringify # U 7 | -------------------------------------------------------------------------------- /parts/base/5011001: -------------------------------------------------------------------------------- 1 | 5.011001 2 | ck_warner # U 3 | ck_warner_d # U 4 | is_utf8_perl_space # U 5 | is_utf8_perl_word # U 6 | is_utf8_posix_digit # U 7 | -------------------------------------------------------------------------------- /parts/base/5013001: -------------------------------------------------------------------------------- 1 | 5.013001 2 | croak_sv # U 3 | die_sv # U 4 | mess_sv # U 5 | sv_2nv_flags # U 6 | warn_sv # U 7 | -------------------------------------------------------------------------------- /parts/base/5013005: -------------------------------------------------------------------------------- 1 | 5.013005 2 | PL_rpeepp # E 3 | caller_cx # U 4 | isOCTAL # U 5 | lex_stuff_pvs # U 6 | parse_fullstmt # U 7 | -------------------------------------------------------------------------------- /parts/base/5019001: -------------------------------------------------------------------------------- 1 | 5.019001 2 | re_intuit_start # A 3 | toFOLD # U 4 | toFOLD_utf8 # U 5 | toLOWER_L1 # U 6 | toTITLE # U 7 | -------------------------------------------------------------------------------- /parts/todo/5004050: -------------------------------------------------------------------------------- 1 | 5.004050 2 | CopyD # E 3 | MoveD # E 4 | do_binmode # U 5 | save_aelem # U 6 | save_helem # U 7 | -------------------------------------------------------------------------------- /parts/todo/5008000: -------------------------------------------------------------------------------- 1 | 5.008000 2 | HeUTF8 # U 3 | hv_iternext_flags # U 4 | hv_store_flags # U 5 | is_utf8_idcont # U 6 | nothreadhook # U 7 | -------------------------------------------------------------------------------- /parts/todo/5009000: -------------------------------------------------------------------------------- 1 | 5.009000 2 | new_version # U 3 | save_set_svflags # U 4 | vcmp # U 5 | vnumify # U 6 | vstringify # U 7 | -------------------------------------------------------------------------------- /parts/todo/5011001: -------------------------------------------------------------------------------- 1 | 5.011001 2 | ck_warner # U 3 | ck_warner_d # U 4 | is_utf8_perl_space # U 5 | is_utf8_perl_word # U 6 | is_utf8_posix_digit # U 7 | -------------------------------------------------------------------------------- /parts/todo/5013001: -------------------------------------------------------------------------------- 1 | 5.013001 2 | croak_sv # U 3 | die_sv # U 4 | mess_sv # U 5 | sv_2nv_flags # U 6 | warn_sv # U 7 | -------------------------------------------------------------------------------- /parts/todo/5013008: -------------------------------------------------------------------------------- 1 | 5.013008 2 | foldEQ_latin1 # U 3 | parse_arithexpr # U 4 | parse_fullexpr # U 5 | parse_listexpr # U 6 | parse_termexpr # U 7 | -------------------------------------------------------------------------------- /parts/todo/5019001: -------------------------------------------------------------------------------- 1 | 5.019001 2 | re_intuit_start # A 3 | toFOLD # U 4 | toFOLD_utf8 # U 5 | toLOWER_L1 # U 6 | toTITLE # U 7 | -------------------------------------------------------------------------------- /parts/todo/5009001: -------------------------------------------------------------------------------- 1 | 5.009001 2 | hv_clear_placeholders # U 3 | hv_scalar # U 4 | scan_version # E (Perl_scan_version) 5 | sv_2iv_flags # U 6 | sv_2uv_flags # U 7 | -------------------------------------------------------------------------------- /parts/base/5017002: -------------------------------------------------------------------------------- 1 | 5.017002 2 | is_uni_blank # U 3 | is_uni_blank_lc # U 4 | is_utf8_blank # U 5 | sv_copypv_flags # U 6 | sv_copypv_nomg # U 7 | sv_vcatpvfn_flags # U 8 | -------------------------------------------------------------------------------- /parts/base/5017007: -------------------------------------------------------------------------------- 1 | 5.017007 2 | SvREFCNT_dec_NN # U 3 | _is_uni_perl_idstart # U 4 | _is_utf8_perl_idstart # U 5 | is_uni_alnumc # U 6 | is_uni_alnumc_lc # U 7 | is_utf8_alnumc # U 8 | -------------------------------------------------------------------------------- /parts/todo/5009002: -------------------------------------------------------------------------------- 1 | 5.009002 2 | SvPVbyte_force # U 3 | find_rundefsvoffset # U 4 | op_refcnt_lock # U 5 | op_refcnt_unlock # U 6 | savesvpv # U 7 | vnormal # U 8 | -------------------------------------------------------------------------------- /parts/todo/5010000: -------------------------------------------------------------------------------- 1 | 5.010000 2 | hv_common # U 3 | hv_common_key_len # U 4 | sv_destroyable # U 5 | sys_init # U 6 | sys_init3 # U 7 | sys_term # U 8 | -------------------------------------------------------------------------------- /parts/todo/5017002: -------------------------------------------------------------------------------- 1 | 5.017002 2 | is_uni_blank # U 3 | is_uni_blank_lc # U 4 | is_utf8_blank # U 5 | sv_copypv_flags # U 6 | sv_copypv_nomg # U 7 | sv_vcatpvfn_flags # U 8 | -------------------------------------------------------------------------------- /parts/todo/5017007: -------------------------------------------------------------------------------- 1 | 5.017007 2 | SvREFCNT_dec_NN # U 3 | _is_uni_perl_idstart # U 4 | _is_utf8_perl_idstart # U 5 | is_uni_alnumc # U 6 | is_uni_alnumc_lc # U 7 | is_utf8_alnumc # U 8 | -------------------------------------------------------------------------------- /parts/base/5013008: -------------------------------------------------------------------------------- 1 | 5.013008 2 | foldEQ_latin1 # U 3 | mg_findext # U 4 | parse_arithexpr # U 5 | parse_fullexpr # U 6 | parse_listexpr # U 7 | parse_termexpr # U 8 | sv_unmagicext # U 9 | -------------------------------------------------------------------------------- /parts/base/5015007: -------------------------------------------------------------------------------- 1 | 5.015007 2 | toLOWER_utf8 # U 3 | toTITLE_utf8 # U 4 | toUPPER_utf8 # U 5 | to_utf8_fold # U 6 | to_utf8_lower # U 7 | to_utf8_title # U 8 | to_utf8_upper # U 9 | -------------------------------------------------------------------------------- /parts/base/5017008: -------------------------------------------------------------------------------- 1 | 5.017008 2 | _is_uni_FOO # U 3 | _is_uni_perl_idcont # U 4 | _is_utf8_FOO # U 5 | _is_utf8_mark # U 6 | _is_utf8_perl_idcont # U 7 | isALPHANUMERIC # U 8 | isIDCONT # U 9 | -------------------------------------------------------------------------------- /parts/todo/5015007: -------------------------------------------------------------------------------- 1 | 5.015007 2 | toLOWER_utf8 # U 3 | toTITLE_utf8 # U 4 | toUPPER_utf8 # U 5 | to_utf8_fold # U 6 | to_utf8_lower # U 7 | to_utf8_title # U 8 | to_utf8_upper # U 9 | -------------------------------------------------------------------------------- /parts/todo/5017008: -------------------------------------------------------------------------------- 1 | 5.017008 2 | _is_uni_FOO # U 3 | _is_uni_perl_idcont # U 4 | _is_utf8_FOO # U 5 | _is_utf8_mark # U 6 | _is_utf8_perl_idcont # U 7 | isALPHANUMERIC # U 8 | isIDCONT # U 9 | -------------------------------------------------------------------------------- /MANIFEST.SKIP: -------------------------------------------------------------------------------- 1 | ^\.git 2 | ^MYMETA.*$ 3 | ^Makefile$ 4 | ~$ 5 | \.old(?:\..*)?$ 6 | \.swp$ 7 | \.o$ 8 | \.bs$ 9 | \.bak$ 10 | \.orig$ 11 | \.cache\.cm$ 12 | ^blib 13 | ^pm_to_blib 14 | ^backup 15 | ^parts/todo- 16 | ^parts/base- 17 | ^ppport\.h$ 18 | ^PPPort\.c$ 19 | ^testing 20 | Devel-PPPort.*\.tar\.gz$ 21 | -------------------------------------------------------------------------------- /parts/base/5009001: -------------------------------------------------------------------------------- 1 | 5.009001 2 | SvIV_nomg # U 3 | SvUV_nomg # U 4 | hv_clear_placeholders # U 5 | hv_scalar # U 6 | scan_version # E (Perl_scan_version) 7 | sv_2iv_flags # U 8 | sv_2uv_flags # U 9 | -------------------------------------------------------------------------------- /parts/base/5008000: -------------------------------------------------------------------------------- 1 | 5.008000 2 | Poison # E 3 | hv_iternext_flags # U 4 | hv_store_flags # U 5 | is_utf8_idcont # U 6 | nothreadhook # U 7 | WARN_LAYER # added by devel/scanprov 8 | WARN_THREADS # added by devel/scanprov 9 | -------------------------------------------------------------------------------- /parts/base/5013002: -------------------------------------------------------------------------------- 1 | 5.013002 2 | SvNV_nomg # U 3 | find_rundefsv # U 4 | foldEQ # U 5 | foldEQ_locale # U 6 | foldEQ_utf8 # U 7 | hv_fill # U 8 | sv_dec_nomg # U 9 | sv_inc_nomg # U 10 | -------------------------------------------------------------------------------- /parts/todo/5013002: -------------------------------------------------------------------------------- 1 | 5.013002 2 | SvNV_nomg # U 3 | find_rundefsv # U 4 | foldEQ # U 5 | foldEQ_locale # U 6 | foldEQ_utf8 # U 7 | hv_fill # U 8 | sv_dec_nomg # U 9 | sv_inc_nomg # U 10 | -------------------------------------------------------------------------------- /parts/todo/5009004: -------------------------------------------------------------------------------- 1 | 5.009004 2 | PerlIO_context_layers # U 3 | gv_name_set # U 4 | hv_copy_hints_hv # U 5 | my_vsnprintf # U 6 | newXS_flags # U 7 | regclass_swash # E (Perl_regclass_swash) 8 | sv_does # U 9 | sv_usepvn_flags # U 10 | -------------------------------------------------------------------------------- /parts/base/5015001: -------------------------------------------------------------------------------- 1 | 5.015001 2 | cop_fetch_label # U 3 | cop_store_label # U 4 | pad_add_name_pv # U 5 | pad_add_name_pvn # U 6 | pad_add_name_pvs # U 7 | pad_add_name_sv # U 8 | pad_findmy_pv # U 9 | pad_findmy_pvn # U 10 | pad_findmy_pvs # U 11 | pad_findmy_sv # U 12 | -------------------------------------------------------------------------------- /parts/todo/5015001: -------------------------------------------------------------------------------- 1 | 5.015001 2 | cop_fetch_label # U 3 | cop_store_label # U 4 | pad_add_name_pv # U 5 | pad_add_name_pvn # U 6 | pad_add_name_pvs # U 7 | pad_add_name_sv # U 8 | pad_findmy_pv # U 9 | pad_findmy_pvn # U 10 | pad_findmy_pvs # U 11 | pad_findmy_sv # U 12 | -------------------------------------------------------------------------------- /parts/base/5010000: -------------------------------------------------------------------------------- 1 | 5.010000 2 | hv_common # U 3 | hv_common_key_len # U 4 | sv_destroyable # U 5 | sys_init # U 6 | sys_init3 # U 7 | sys_term # U 8 | PERL_PV_PRETTY_ELLIPSES # added by devel/scanprov 9 | PERL_PV_PRETTY_NOCLEAR # added by devel/scanprov 10 | XSPROTO # added by devel/scanprov 11 | -------------------------------------------------------------------------------- /parts/base/5021007: -------------------------------------------------------------------------------- 1 | 5.021007 2 | OpHAS_SIBLING # U 3 | OpSIBLING # U 4 | OpSIBLING_set # U 5 | PadnameUTF8 # E 6 | is_invariant_string # U 7 | newPADNAMELIST # U 8 | newPADNAMEouter # U 9 | newPADNAMEpvn # U 10 | newUNOP_AUX # E 11 | padnamelist_fetch # U 12 | padnamelist_store # U 13 | -------------------------------------------------------------------------------- /parts/todo/5021007: -------------------------------------------------------------------------------- 1 | 5.021007 2 | OpHAS_SIBLING # U 3 | OpSIBLING # U 4 | OpSIBLING_set # U 5 | PadnameUTF8 # E 6 | is_invariant_string # U 7 | newPADNAMELIST # U 8 | newPADNAMEouter # U 9 | newPADNAMEpvn # U 10 | newUNOP_AUX # E 11 | padnamelist_fetch # U 12 | padnamelist_store # U 13 | -------------------------------------------------------------------------------- /parts/todo/5006001: -------------------------------------------------------------------------------- 1 | 5.006001 2 | SvGAMAGIC # U 3 | apply_attrs_string # U 4 | bytes_to_utf8 # U 5 | gv_efullname4 # U 6 | gv_fullname4 # U 7 | is_utf8_string # U 8 | save_generic_pvref # U 9 | utf16_to_utf8 # E (Perl_utf16_to_utf8) 10 | utf16_to_utf8_reversed # E (Perl_utf16_to_utf8_reversed) 11 | utf8_to_bytes # U 12 | -------------------------------------------------------------------------------- /parts/base/5021001: -------------------------------------------------------------------------------- 1 | 5.021001 2 | _is_in_locale_category # U 3 | _is_utf8_char_slow # U 4 | _is_utf8_idcont # U 5 | _is_utf8_idstart # U 6 | _is_utf8_xidcont # U 7 | _is_utf8_xidstart # U 8 | isALNUM_lazy # U 9 | isIDFIRST_lazy # U 10 | isUTF8_CHAR # U 11 | markstack_grow # E (Perl_markstack_grow) 12 | my_strerror # U 13 | -------------------------------------------------------------------------------- /parts/todo/5021001: -------------------------------------------------------------------------------- 1 | 5.021001 2 | _is_in_locale_category # U 3 | _is_utf8_char_slow # U 4 | _is_utf8_idcont # U 5 | _is_utf8_idstart # U 6 | _is_utf8_xidcont # U 7 | _is_utf8_xidstart # U 8 | isALNUM_lazy # U 9 | isIDFIRST_lazy # U 10 | isUTF8_CHAR # U 11 | markstack_grow # E (Perl_markstack_grow) 12 | my_strerror # U 13 | -------------------------------------------------------------------------------- /parts/base/5011002: -------------------------------------------------------------------------------- 1 | 5.011002 2 | PL_keyword_plugin # E 3 | lex_bufutf8 # U 4 | lex_discard_to # U 5 | lex_grow_linestr # U 6 | lex_next_chunk # U 7 | lex_peek_unichar # U 8 | lex_read_space # U 9 | lex_read_to # U 10 | lex_read_unichar # U 11 | lex_stuff_pvn # U 12 | lex_stuff_sv # U 13 | lex_unstuff # U 14 | -------------------------------------------------------------------------------- /parts/todo/5010001: -------------------------------------------------------------------------------- 1 | 5.010001 2 | croak_xs_usage # U 3 | mro_get_from_name # U 4 | mro_get_private_data # U 5 | mro_register # U 6 | mro_set_mro # U 7 | mro_set_private_data # U 8 | save_hints # U 9 | save_padsv_and_mortalize # U 10 | save_pushi32ptr # U 11 | save_pushptr # U 12 | save_pushptrptr # U 13 | sv_insert_flags # U 14 | -------------------------------------------------------------------------------- /parts/todo/5011002: -------------------------------------------------------------------------------- 1 | 5.011002 2 | PL_keyword_plugin # E 3 | lex_bufutf8 # U 4 | lex_discard_to # U 5 | lex_grow_linestr # U 6 | lex_next_chunk # U 7 | lex_peek_unichar # U 8 | lex_read_space # U 9 | lex_read_to # U 10 | lex_read_unichar # U 11 | lex_stuff_pvn # U 12 | lex_stuff_sv # U 13 | lex_unstuff # U 14 | -------------------------------------------------------------------------------- /parts/todo/5011000: -------------------------------------------------------------------------------- 1 | 5.011000 2 | Gv_AMupdate # E (Perl_Gv_AMupdate) 3 | PL_opfreehook # E 4 | SVt_REGEXP # E 5 | SvOOK_offset # U 6 | av_iter_p # U 7 | gv_add_by_type # U 8 | is_ascii_string # U 9 | pregfree2 # U 10 | save_adelete # U 11 | save_aelem_flags # U 12 | save_hdelete # U 13 | save_helem_flags # U 14 | sv_utf8_upgrade_flags_grow # U 15 | -------------------------------------------------------------------------------- /parts/base/5011000: -------------------------------------------------------------------------------- 1 | 5.011000 2 | Gv_AMupdate # E (Perl_Gv_AMupdate) 3 | PL_opfreehook # E 4 | SVt_REGEXP # E 5 | SvOOK_offset # U 6 | av_iter_p # U 7 | gv_add_by_type # U 8 | is_ascii_string # U 9 | pregfree2 # U 10 | save_adelete # U 11 | save_aelem_flags # U 12 | save_hdelete # U 13 | save_helem_flags # U 14 | sv_utf8_upgrade_flags_grow # U 15 | get_cvs # added by devel/scanprov 16 | -------------------------------------------------------------------------------- /parts/todo/5007002: -------------------------------------------------------------------------------- 1 | 5.007002 2 | calloc # U 3 | getcwd_sv # U 4 | init_tm # U 5 | malloc # U 6 | mfree # U 7 | mini_mktime # U 8 | my_atof2 # U 9 | my_strftime # U 10 | op_null # U 11 | realloc # U 12 | sv_catpvn_flags # U 13 | sv_catsv_flags # U 14 | sv_setsv_flags # U 15 | sv_utf8_upgrade_flags # U 16 | sv_utf8_upgrade_nomg # U 17 | swash_fetch # E (Perl_swash_fetch) 18 | -------------------------------------------------------------------------------- /parts/todo/5008001: -------------------------------------------------------------------------------- 1 | 5.008001 2 | CvPADLIST # E 3 | PL_comppad # E 4 | SvVOK # U 5 | doing_taint # U 6 | find_runcv # U 7 | is_utf8_string_loc # U 8 | packlist # U 9 | pad_add_anon # U 10 | pad_new # E 11 | pad_tidy # E 12 | save_bool # U 13 | savestack_grow_cnt # U 14 | seed # U 15 | sv_cat_decode # U 16 | sv_setpviv # U 17 | sv_setpviv_mg # U 18 | unpackstring # U 19 | -------------------------------------------------------------------------------- /parts/base/5006001: -------------------------------------------------------------------------------- 1 | 5.006001 2 | SvGAMAGIC # U 3 | apply_attrs_string # U 4 | bytes_to_utf8 # U 5 | gv_efullname4 # U 6 | gv_fullname4 # U 7 | isBLANK # U 8 | isPSXSPC # U 9 | is_utf8_string # U 10 | save_generic_pvref # U 11 | utf16_to_utf8 # E (Perl_utf16_to_utf8) 12 | utf16_to_utf8_reversed # E (Perl_utf16_to_utf8_reversed) 13 | utf8_to_bytes # U 14 | G_METHOD # added by devel/scanprov 15 | NVef # added by devel/scanprov 16 | NVff # added by devel/scanprov 17 | NVgf # added by devel/scanprov 18 | -------------------------------------------------------------------------------- /ppport_h.PL: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # ppport_h.PL -- generate ppport.h 4 | # 5 | ################################################################################ 6 | # 7 | # Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz. 8 | # Version 2.x, Copyright (C) 2001, Paul Marquess. 9 | # Version 1.x, Copyright (C) 1999, Kenneth Albanowski. 10 | # 11 | # This program is free software; you can redistribute it and/or 12 | # modify it under the same terms as Perl itself. 13 | # 14 | ################################################################################ 15 | 16 | package Devel::PPPort; 17 | require "PPPort.pm"; 18 | rename 'ppport.h', 'ppport.old' if -f 'ppport.h'; 19 | unlink "ppport.old" if WriteFile("ppport.h") && -f 'ppport.h'; 20 | -------------------------------------------------------------------------------- /parts/todo/5003070: -------------------------------------------------------------------------------- 1 | 5.003070 2 | HeHASH # U 3 | HeKEY # U 4 | HeKLEN # U 5 | HeSVKEY # U 6 | HeSVKEY_force # U 7 | HeVAL # U 8 | cv_const_sv # U 9 | do_open # E (Perl_do_open) 10 | gv_efullname3 # U 11 | gv_fullname3 # U 12 | hv_delete_ent # U 13 | hv_exists_ent # U 14 | hv_fetch_ent # U 15 | hv_iterkeysv # U 16 | hv_ksplit # U 17 | hv_store_ent # U 18 | my_pclose # E (Perl_my_pclose) 19 | my_popen # E (Perl_my_popen) 20 | sv_gets # E (Perl_sv_gets) 21 | unsharepvn # U 22 | -------------------------------------------------------------------------------- /apicheck_c.PL: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # apicheck_c.PL -- generate apicheck.c 4 | # 5 | ################################################################################ 6 | # 7 | # Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz. 8 | # Version 2.x, Copyright (C) 2001, Paul Marquess. 9 | # Version 1.x, Copyright (C) 1999, Kenneth Albanowski. 10 | # 11 | # This program is free software; you can redistribute it and/or 12 | # modify it under the same terms as Perl itself. 13 | # 14 | ################################################################################ 15 | 16 | use strict; 17 | 18 | my $out = 'apicheck.c'; 19 | my @api = map { /^--api=(\w+)$/ ? ($1) : () } @ARGV; 20 | print "creating $out", (@api ? " (@api)" : ''), "\n"; 21 | system $^X, 'parts/apicheck.pl', @api, $out 22 | and die "couldn't create $out\n"; 23 | -------------------------------------------------------------------------------- /parts/todo/5009003: -------------------------------------------------------------------------------- 1 | 5.009003 2 | av_arylen_p # U 3 | ckwarn # U 4 | ckwarn_d # U 5 | csighandler # E (Perl_csighandler) 6 | dMULTICALL # E 7 | doref # U 8 | gv_const_sv # U 9 | hv_eiter_p # U 10 | hv_eiter_set # U 11 | hv_name_set # U 12 | hv_placeholders_get # U 13 | hv_placeholders_set # U 14 | hv_riter_p # U 15 | hv_riter_set # U 16 | is_utf8_string_loclen # U 17 | newGIVENOP # U 18 | newSVhek # U 19 | newWHENOP # U 20 | pad_compname_type # U 21 | savepvs # U 22 | sortsv_flags # U 23 | vverify # U 24 | -------------------------------------------------------------------------------- /parts/base/5010001: -------------------------------------------------------------------------------- 1 | 5.010001 2 | HeUTF8 # U 3 | croak_xs_usage # U 4 | mPUSHs # U 5 | mXPUSHs # U 6 | mro_get_from_name # U 7 | mro_get_private_data # U 8 | mro_register # U 9 | mro_set_mro # U 10 | mro_set_private_data # U 11 | newSVpvn_flags # U 12 | newSVpvn_utf8 # U 13 | newSVpvs_flags # U 14 | save_hints # U 15 | save_padsv_and_mortalize # U 16 | save_pushi32ptr # U 17 | save_pushptr # U 18 | save_pushptrptr # U 19 | sv_insert_flags # U 20 | DEFSV_set # added by devel/scanprov 21 | MUTABLE_PTR # added by devel/scanprov 22 | MUTABLE_SV # added by devel/scanprov 23 | -------------------------------------------------------------------------------- /parts/todo/5007001: -------------------------------------------------------------------------------- 1 | 5.007001 2 | ASCII_TO_NEED # U 3 | NATIVE_TO_NEED # U 4 | POPpbytex # E 5 | bytes_from_utf8 # U 6 | despatch_signals # U 7 | do_openn # U 8 | gv_handler # U 9 | is_lvalue_sub # U 10 | my_popen_list # U 11 | save_mortalizesv # U 12 | scan_num # E (Perl_scan_num) 13 | sv_force_normal_flags # U 14 | sv_setref_uv # U 15 | sv_unref_flags # U 16 | sv_utf8_upgrade # E (Perl_sv_utf8_upgrade) 17 | utf8_length # U 18 | utf8_to_uvchr # U 19 | utf8_to_uvuni # U 20 | utf8n_to_uvchr # U 21 | utf8n_to_uvuni # U 22 | uvchr_to_utf8 # U 23 | uvuni_to_utf8 # U 24 | -------------------------------------------------------------------------------- /parts/ppport.fnc: -------------------------------------------------------------------------------- 1 | :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 2 | : 3 | : Perl/Pollution/Portability 4 | : 5 | :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 6 | : 7 | : Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz. 8 | : Version 2.x, Copyright (C) 2001, Paul Marquess. 9 | : Version 1.x, Copyright (C) 1999, Kenneth Albanowski. 10 | : 11 | : This program is free software; you can redistribute it and/or 12 | : modify it under the same terms as Perl itself. 13 | : 14 | :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 15 | 16 | : 17 | : This file lists all API functions/macros that are provided purely 18 | : by Devel::PPPort. It is in the same format as the F that 19 | : ships with the Perl source code. 20 | : 21 | 22 | Am |void |sv_magic_portable|NN SV* sv|NULLOK SV* obj|int how|NULLOK const char* name \ 23 | |I32 namlen 24 | -------------------------------------------------------------------------------- /parts/inc/HvNAME: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | ## 3 | ## Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz. 4 | ## Version 2.x, Copyright (C) 2001, Paul Marquess. 5 | ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski. 6 | ## 7 | ## This program is free software; you can redistribute it and/or 8 | ## modify it under the same terms as Perl itself. 9 | ## 10 | ################################################################################ 11 | 12 | =provides 13 | 14 | __UNDEFINED__ 15 | 16 | =implementation 17 | 18 | __UNDEFINED__ HvNAME_get(hv) HvNAME(hv) 19 | 20 | __UNDEFINED__ HvNAMELEN_get(hv) (HvNAME_get(hv) ? (I32)strlen(HvNAME_get(hv)) : 0) 21 | 22 | =xsubs 23 | 24 | char* 25 | HvNAME_get(hv) 26 | HV *hv 27 | 28 | int 29 | HvNAMELEN_get(hv) 30 | HV *hv 31 | 32 | =tests plan => 4 33 | 34 | ok(Devel::PPPort::HvNAME_get(\%Devel::PPPort::), 'Devel::PPPort'); 35 | ok(Devel::PPPort::HvNAME_get({}), undef); 36 | 37 | ok(Devel::PPPort::HvNAMELEN_get(\%Devel::PPPort::), length('Devel::PPPort')); 38 | ok(Devel::PPPort::HvNAMELEN_get({}), 0); 39 | -------------------------------------------------------------------------------- /parts/todo/5005000: -------------------------------------------------------------------------------- 1 | 5.005000 2 | PL_curpad # E 3 | PL_modglobal # E 4 | cx_dump # U 5 | debop # U 6 | debprofdump # U 7 | fbm_compile # E (Perl_fbm_compile) 8 | fbm_instr # E (Perl_fbm_instr) 9 | get_op_descs # U 10 | get_op_names # U 11 | init_stacks # U 12 | mg_length # U 13 | mg_size # U 14 | newHVhv # U 15 | new_stackinfo # E 16 | regdump # U 17 | regexec_flags # U 18 | regnext # E (Perl_regnext) 19 | runops_debug # U 20 | runops_standard # U 21 | save_iv # U (save_iv) 22 | save_op # U 23 | sv_iv # U 24 | sv_nv # U 25 | sv_peek # U 26 | sv_pvn # U 27 | sv_pvn_nomg # U 28 | sv_true # U 29 | -------------------------------------------------------------------------------- /parts/todo/5015004: -------------------------------------------------------------------------------- 1 | 5.015004 2 | HvENAMELEN # U 3 | HvENAMEUTF8 # U 4 | HvNAMELEN # U 5 | HvNAMEUTF8 # U 6 | gv_autoload_pv # U 7 | gv_autoload_pvn # U 8 | gv_autoload_sv # U 9 | gv_fetchmeth_pv # U 10 | gv_fetchmeth_pv_autoload # U 11 | gv_fetchmeth_pvn # U 12 | gv_fetchmeth_pvn_autoload # U 13 | gv_fetchmeth_sv # U 14 | gv_fetchmeth_sv_autoload # U 15 | gv_fetchmethod_pv_flags # U 16 | gv_fetchmethod_pvn_flags # U 17 | gv_fetchmethod_sv_flags # U 18 | gv_init_pv # U 19 | gv_init_pvn # U 20 | gv_init_sv # U 21 | newGVgen_flags # U 22 | sv_derived_from_pv # U 23 | sv_derived_from_pvn # U 24 | sv_derived_from_sv # U 25 | sv_does_pv # U 26 | sv_does_pvn # U 27 | sv_does_sv # U 28 | whichsig_pv # U 29 | whichsig_pvn # U 30 | whichsig_sv # U 31 | -------------------------------------------------------------------------------- /parts/base/5007001: -------------------------------------------------------------------------------- 1 | 5.007001 2 | ASCII_TO_NEED # U 3 | NATIVE_TO_NEED # U 4 | POPpbytex # E 5 | SvUOK # U 6 | bytes_from_utf8 # U 7 | despatch_signals # U 8 | do_openn # U 9 | gv_handler # U 10 | is_lvalue_sub # U 11 | my_popen_list # U 12 | newSVpvn_share # U 13 | save_mortalizesv # U 14 | scan_num # E (Perl_scan_num) 15 | sv_force_normal_flags # U 16 | sv_setref_uv # U 17 | sv_unref_flags # U 18 | sv_utf8_upgrade # E (Perl_sv_utf8_upgrade) 19 | utf8_length # U 20 | utf8_to_uvchr # U 21 | utf8_to_uvuni # U 22 | utf8n_to_uvchr # U 23 | utf8n_to_uvuni # U 24 | uvchr_to_utf8 # U 25 | uvuni_to_utf8 # U 26 | PTR2ul # added by devel/scanprov 27 | SV_IMMEDIATE_UNREF # added by devel/scanprov 28 | UVXf # added by devel/scanprov 29 | -------------------------------------------------------------------------------- /parts/todo/5009005: -------------------------------------------------------------------------------- 1 | 5.009005 2 | Perl_signbit # U 3 | SvRX # U 4 | SvRXOK # U 5 | av_create_and_push # U 6 | av_create_and_unshift_one # U 7 | gv_fetchfile_flags # U 8 | lex_start # E (Perl_lex_start) 9 | mro_get_linear_isa # U 10 | mro_method_changed_in # U 11 | my_dirfd # U 12 | pregcomp # E (Perl_pregcomp) 13 | ptr_table_clear # U 14 | ptr_table_fetch # U 15 | ptr_table_free # U 16 | ptr_table_new # U 17 | ptr_table_split # U 18 | ptr_table_store # U 19 | re_compile # U 20 | reg_named_buff_all # U 21 | reg_named_buff_exists # U 22 | reg_named_buff_fetch # U 23 | reg_named_buff_firstkey # U 24 | reg_named_buff_nextkey # U 25 | reg_named_buff_scalar # U 26 | regfree_internal # U 27 | savesharedpvn # U 28 | scan_vstring # E (Perl_scan_vstring) 29 | upg_version # E (Perl_upg_version) 30 | -------------------------------------------------------------------------------- /t/testutil.pl: -------------------------------------------------------------------------------- 1 | { 2 | my $__ntest; 3 | my $__total; 4 | 5 | sub plan { 6 | @_ == 2 or die "usage: plan(tests => count)"; 7 | my $what = shift; 8 | $what eq 'tests' or die "cannot plan anything but tests"; 9 | $__total = shift; 10 | defined $__total && $__total > 0 or die "need a positive number of tests"; 11 | print "1..$__total\n"; 12 | } 13 | 14 | sub skip { 15 | my $reason = shift; 16 | ++$__ntest; 17 | print "ok $__ntest # skip: $reason\n" 18 | } 19 | 20 | sub ok ($;$$) { 21 | local($\,$,); 22 | my $ok = 0; 23 | my $result = shift; 24 | if (@_ == 0) { 25 | $ok = $result; 26 | } else { 27 | $expected = shift; 28 | if (!defined $expected) { 29 | $ok = !defined $result; 30 | } elsif (!defined $result) { 31 | $ok = 0; 32 | } elsif (ref($expected) eq 'Regexp') { 33 | die "using regular expression objects is not backwards compatible"; 34 | } else { 35 | $ok = $result eq $expected; 36 | } 37 | } 38 | ++$__ntest; 39 | if ($ok) { 40 | print "ok $__ntest\n" 41 | } 42 | else { 43 | print "not ok $__ntest\n" 44 | } 45 | } 46 | } 47 | 48 | 1; 49 | -------------------------------------------------------------------------------- /typemap: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # typemap -- XS type mappings not present in early perls 4 | # 5 | ################################################################################ 6 | # 7 | # Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz. 8 | # Version 2.x, Copyright (C) 2001, Paul Marquess. 9 | # Version 1.x, Copyright (C) 1999, Kenneth Albanowski. 10 | # 11 | # This program is free software; you can redistribute it and/or 12 | # modify it under the same terms as Perl itself. 13 | # 14 | ################################################################################ 15 | 16 | UV T_UV 17 | NV T_NV 18 | HV * T_HVREF 19 | STRLEN T_UV 20 | 21 | INPUT 22 | T_UV 23 | $var = ($type)SvUV($arg) 24 | T_NV 25 | $var = ($type)SvNV($arg) 26 | T_HVREF 27 | if (SvROK($arg) && SvTYPE(SvRV($arg))==SVt_PVHV) 28 | $var = (HV*)SvRV($arg); 29 | else 30 | Perl_croak(aTHX_ \"$var is not a hash reference\") 31 | 32 | OUTPUT 33 | T_UV 34 | sv_setuv($arg, (UV)$var); 35 | T_NV 36 | sv_setnv($arg, (NV)$var); 37 | -------------------------------------------------------------------------------- /parts/base/5015004: -------------------------------------------------------------------------------- 1 | 5.015004 2 | HvENAMELEN # U 3 | HvENAMEUTF8 # U 4 | HvNAMELEN # U 5 | HvNAMEUTF8 # U 6 | gv_autoload_pv # U 7 | gv_autoload_pvn # U 8 | gv_autoload_sv # U 9 | gv_fetchmeth_pv # U 10 | gv_fetchmeth_pv_autoload # U 11 | gv_fetchmeth_pvn # U 12 | gv_fetchmeth_pvn_autoload # U 13 | gv_fetchmeth_sv # U 14 | gv_fetchmeth_sv_autoload # U 15 | gv_fetchmethod_pv_flags # U 16 | gv_fetchmethod_pvn_flags # U 17 | gv_fetchmethod_sv_flags # U 18 | gv_init_pv # U 19 | gv_init_pvn # U 20 | gv_init_sv # U 21 | newGVgen_flags # U 22 | sv_derived_from_pv # U 23 | sv_derived_from_pvn # U 24 | sv_derived_from_sv # U 25 | sv_does_pv # U 26 | sv_does_pvn # U 27 | sv_does_sv # U 28 | whichsig_pv # U 29 | whichsig_pvn # U 30 | whichsig_sv # U 31 | WIDEST_UTYPE # added by devel/scanprov 32 | -------------------------------------------------------------------------------- /parts/base/5013006: -------------------------------------------------------------------------------- 1 | 5.013006 2 | LINKLIST # U 3 | SvTRUE_nomg # U 4 | ck_entersub_args_list # U 5 | ck_entersub_args_proto # U 6 | ck_entersub_args_proto_or_list # U 7 | cv_get_call_checker # E 8 | cv_set_call_checker # E 9 | isWORDCHAR # U 10 | lex_stuff_pv # U 11 | mg_free_type # U 12 | newSVpv_share # U 13 | op_append_elem # U 14 | op_append_list # U 15 | op_contextualize # U 16 | op_linklist # U 17 | op_prepend_elem # U 18 | parse_stmtseq # U 19 | rv2cv_op_cv # U 20 | savesharedpvs # U 21 | savesharedsvpv # U 22 | sv_2bool_flags # U 23 | sv_catpv_flags # U 24 | sv_catpv_nomg # U 25 | sv_catpvs_flags # U 26 | sv_catpvs_mg # U 27 | sv_catpvs_nomg # U 28 | sv_cmp_flags # U 29 | sv_cmp_locale_flags # U 30 | sv_collxfrm_flags # U 31 | sv_eq_flags # U 32 | sv_setpvs_mg # U 33 | -------------------------------------------------------------------------------- /parts/todo/5013006: -------------------------------------------------------------------------------- 1 | 5.013006 2 | LINKLIST # U 3 | SvTRUE_nomg # U 4 | ck_entersub_args_list # U 5 | ck_entersub_args_proto # U 6 | ck_entersub_args_proto_or_list # U 7 | cv_get_call_checker # E 8 | cv_set_call_checker # E 9 | isWORDCHAR # U 10 | lex_stuff_pv # U 11 | mg_free_type # U 12 | newSVpv_share # U 13 | op_append_elem # U 14 | op_append_list # U 15 | op_contextualize # U 16 | op_linklist # U 17 | op_prepend_elem # U 18 | parse_stmtseq # U 19 | rv2cv_op_cv # U 20 | savesharedpvs # U 21 | savesharedsvpv # U 22 | sv_2bool_flags # U 23 | sv_catpv_flags # U 24 | sv_catpv_nomg # U 25 | sv_catpvs_flags # U 26 | sv_catpvs_mg # U 27 | sv_catpvs_nomg # U 28 | sv_cmp_flags # U 29 | sv_cmp_locale_flags # U 30 | sv_collxfrm_flags # U 31 | sv_eq_flags # U 32 | sv_setpvs_mg # U 33 | -------------------------------------------------------------------------------- /parts/inc/podtest: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | ## 3 | ## Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz. 4 | ## Version 2.x, Copyright (C) 2001, Paul Marquess. 5 | ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski. 6 | ## 7 | ## This program is free software; you can redistribute it and/or 8 | ## modify it under the same terms as Perl itself. 9 | ## 10 | ################################################################################ 11 | 12 | =tests plan => 0 13 | 14 | my @pods = qw( HACKERS PPPort.pm ppport.h soak devel/regenerate devel/buildperl.pl ); 15 | 16 | my $reason = ''; 17 | 18 | if ($ENV{'SKIP_SLOW_TESTS'}) { 19 | $reason = 'SKIP_SLOW_TESTS'; 20 | } 21 | else { 22 | # Try loading Test::Pod 23 | eval q{ 24 | use Test::Pod; 25 | $Test::Pod::VERSION >= 0.95 26 | or die "Test::Pod version only $Test::Pod::VERSION"; 27 | import Test::Pod tests => scalar @pods; 28 | }; 29 | $reason = 'Test::Pod >= 0.95 required' if $@; 30 | } 31 | 32 | if ($reason) { 33 | load(); 34 | plan(tests => scalar @pods); 35 | } 36 | 37 | for (@pods) { 38 | print "# checking $_\n"; 39 | if ($reason) { 40 | skip("skip: $reason", 0); 41 | } 42 | else { 43 | pod_file_ok($_); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /parts/base/5009002: -------------------------------------------------------------------------------- 1 | 5.009002 2 | CopyD # E 3 | MoveD # E 4 | PUSHmortal # E 5 | SvPVbyte_force # U 6 | UNDERBAR # E 7 | XCPT_CATCH # E 8 | XCPT_RETHROW # E 9 | XCPT_TRY_END # E 10 | XCPT_TRY_START # E 11 | XPUSHmortal # E 12 | ZeroD # E 13 | dUNDERBAR # E 14 | dXCPT # E 15 | find_rundefsvoffset # U 16 | gv_fetchpvn_flags # U 17 | gv_fetchsv # U 18 | mPUSHi # U 19 | mPUSHn # U 20 | mPUSHp # U 21 | mPUSHu # U 22 | mXPUSHi # U 23 | mXPUSHn # U 24 | mXPUSHp # U 25 | mXPUSHu # U 26 | op_refcnt_lock # U 27 | op_refcnt_unlock # U 28 | savesvpv # U 29 | vnormal # U 30 | MY_CXT_CLONE # added by devel/scanprov 31 | SV_NOSTEAL # added by devel/scanprov 32 | UTF8_MAXBYTES # added by devel/scanprov 33 | -------------------------------------------------------------------------------- /parts/todo/5013007: -------------------------------------------------------------------------------- 1 | 5.013007 2 | HvENAME # U 3 | OP_CLASS # U 4 | XopFLAGS # E 5 | amagic_deref_call # U 6 | bytes_cmp_utf8 # U 7 | cop_hints_2hv # A 8 | cop_hints_fetch_pv # U 9 | cop_hints_fetch_pvn # U 10 | cop_hints_fetch_pvs # U 11 | cop_hints_fetch_sv # U 12 | cophh_2hv # E 13 | cophh_copy # E 14 | cophh_delete_pv # E 15 | cophh_delete_pvn # E 16 | cophh_delete_pvs # E 17 | cophh_delete_sv # E 18 | cophh_fetch_pv # E 19 | cophh_fetch_pvn # E 20 | cophh_fetch_pvs # E 21 | cophh_fetch_sv # E 22 | cophh_free # E 23 | cophh_store_pv # E 24 | cophh_store_pvn # E 25 | cophh_store_pvs # E 26 | cophh_store_sv # E 27 | custom_op_register # E 28 | custom_op_xop # E 29 | newFOROP # A 30 | newWHILEOP # A 31 | op_lvalue # U 32 | op_scope # U 33 | parse_barestmt # U 34 | parse_block # U 35 | parse_label # U 36 | -------------------------------------------------------------------------------- /parts/base/5013007: -------------------------------------------------------------------------------- 1 | 5.013007 2 | HvENAME # U 3 | OP_CLASS # U 4 | SvPV_nomg_nolen # U 5 | XopFLAGS # E 6 | amagic_deref_call # U 7 | bytes_cmp_utf8 # U 8 | cop_hints_2hv # A 9 | cop_hints_fetch_pv # U 10 | cop_hints_fetch_pvn # U 11 | cop_hints_fetch_pvs # U 12 | cop_hints_fetch_sv # U 13 | cophh_2hv # E 14 | cophh_copy # E 15 | cophh_delete_pv # E 16 | cophh_delete_pvn # E 17 | cophh_delete_pvs # E 18 | cophh_delete_sv # E 19 | cophh_fetch_pv # E 20 | cophh_fetch_pvn # E 21 | cophh_fetch_pvs # E 22 | cophh_fetch_sv # E 23 | cophh_free # E 24 | cophh_store_pv # E 25 | cophh_store_pvn # E 26 | cophh_store_pvs # E 27 | cophh_store_sv # E 28 | custom_op_register # E 29 | custom_op_xop # E 30 | newFOROP # A 31 | newWHILEOP # A 32 | op_lvalue # U 33 | op_scope # U 34 | parse_barestmt # U 35 | parse_block # U 36 | parse_label # U 37 | -------------------------------------------------------------------------------- /parts/base/5008001: -------------------------------------------------------------------------------- 1 | 5.008001 2 | CvPADLIST # E 3 | PL_comppad # E 4 | SvVOK # U 5 | XSRETURN_UV # U 6 | doing_taint # U 7 | find_runcv # U 8 | is_utf8_string_loc # U 9 | packlist # U 10 | pad_add_anon # U 11 | pad_new # E 12 | pad_tidy # E 13 | save_bool # U 14 | savestack_grow_cnt # U 15 | seed # U 16 | sv_cat_decode # U 17 | sv_setpviv # U 18 | sv_setpviv_mg # U 19 | unpackstring # U 20 | IN_PERL_COMPILETIME # added by devel/scanprov 21 | PERL_ABS # added by devel/scanprov 22 | PERL_GCC_BRACE_GROUPS_FORBIDDEN # added by devel/scanprov 23 | PERL_MAGIC_utf8 # added by devel/scanprov 24 | PERL_MAGIC_vstring # added by devel/scanprov 25 | PERL_SCAN_SILENT_ILLDIGIT # added by devel/scanprov 26 | PERL_SIGNALS_UNSAFE_FLAG # added by devel/scanprov 27 | PL_signals # added by devel/scanprov 28 | SV_COW_DROP_PV # added by devel/scanprov 29 | SV_UTF8_NO_ENCODING # added by devel/scanprov 30 | XST_mUV # added by devel/scanprov 31 | -------------------------------------------------------------------------------- /parts/inc/sprintf: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | ## 3 | ## Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz. 4 | ## Version 2.x, Copyright (C) 2001, Paul Marquess. 5 | ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski. 6 | ## 7 | ## This program is free software; you can redistribute it and/or 8 | ## modify it under the same terms as Perl itself. 9 | ## 10 | ################################################################################ 11 | 12 | =provides 13 | 14 | my_sprintf 15 | 16 | =implementation 17 | 18 | #if !defined(my_sprintf) 19 | #if { NEED my_sprintf } 20 | 21 | int 22 | my_sprintf(char *buffer, const char* pat, ...) 23 | { 24 | va_list args; 25 | va_start(args, pat); 26 | vsprintf(buffer, pat, args); 27 | va_end(args); 28 | return strlen(buffer); 29 | } 30 | 31 | #endif 32 | #endif 33 | 34 | =xsinit 35 | 36 | #define NEED_my_sprintf 37 | 38 | =xsubs 39 | 40 | void 41 | my_sprintf() 42 | PREINIT: 43 | char buf[128]; 44 | int len; 45 | PPCODE: 46 | len = my_sprintf(buf, "foo%s%d", "bar", 42); 47 | mXPUSHi(len); 48 | mXPUSHs(newSVpv(buf, 0)); 49 | XSRETURN(2); 50 | 51 | =tests plan => 2 52 | 53 | my($l, $s) = Devel::PPPort::my_sprintf(); 54 | ok($l, 8); 55 | ok($s, "foobar42"); 56 | -------------------------------------------------------------------------------- /module2.c: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * 3 | * Perl/Pollution/Portability 4 | * 5 | ******************************************************************************** 6 | * 7 | * Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz. 8 | * Version 2.x, Copyright (C) 2001, Paul Marquess. 9 | * Version 1.x, Copyright (C) 1999, Kenneth Albanowski. 10 | * 11 | * This program is free software; you can redistribute it and/or 12 | * modify it under the same terms as Perl itself. 13 | * 14 | *******************************************************************************/ 15 | 16 | #include "EXTERN.h" 17 | #include "perl.h" 18 | #include "XSUB.h" 19 | 20 | #ifndef PATCHLEVEL 21 | #include "patchlevel.h" 22 | #endif 23 | 24 | #define NEED_newCONSTSUB_GLOBAL 25 | #define NEED_PL_signals_GLOBAL 26 | #define NEED_PL_parser 27 | #define DPPP_PL_parser_NO_DUMMY 28 | #include "ppport.h" 29 | 30 | void call_newCONSTSUB_2(void) 31 | { 32 | newCONSTSUB(gv_stashpv("Devel::PPPort", FALSE), "test_value_2", newSViv(2)); 33 | } 34 | 35 | U32 get_PL_signals_2(void) 36 | { 37 | return PL_signals; 38 | } 39 | 40 | int no_dummy_parser_vars(int check) 41 | { 42 | if (check == 0 || PL_parser) 43 | { 44 | line_t volatile my_copline; 45 | line_t volatile *my_p_copline; 46 | my_copline = PL_copline; 47 | my_p_copline = &PL_copline; 48 | PL_copline = my_copline; 49 | PL_copline = *my_p_copline; 50 | return 1; 51 | } 52 | 53 | return 0; 54 | } 55 | -------------------------------------------------------------------------------- /parts/base/5009005: -------------------------------------------------------------------------------- 1 | 5.009005 2 | PL_parser # E 3 | Perl_signbit # U 4 | SvRX # U 5 | SvRXOK # U 6 | av_create_and_push # U 7 | av_create_and_unshift_one # U 8 | get_cvn_flags # U 9 | gv_fetchfile_flags # U 10 | lex_start # E (Perl_lex_start) 11 | mro_get_linear_isa # U 12 | mro_method_changed_in # U 13 | my_dirfd # U 14 | newSV_type # U 15 | pregcomp # E (Perl_pregcomp) 16 | ptr_table_clear # U 17 | ptr_table_fetch # U 18 | ptr_table_free # U 19 | ptr_table_new # U 20 | ptr_table_split # U 21 | ptr_table_store # U 22 | re_compile # U 23 | reg_named_buff_all # U 24 | reg_named_buff_exists # U 25 | reg_named_buff_fetch # U 26 | reg_named_buff_firstkey # U 27 | reg_named_buff_nextkey # U 28 | reg_named_buff_scalar # U 29 | regfree_internal # U 30 | savesharedpvn # U 31 | scan_vstring # E (Perl_scan_vstring) 32 | upg_version # E (Perl_upg_version) 33 | PERL_PV_ESCAPE_RE # added by devel/scanprov 34 | SV_COW_SHARED_HASH_KEYS # added by devel/scanprov 35 | SVfARG # added by devel/scanprov 36 | memEQs # added by devel/scanprov 37 | memNEs # added by devel/scanprov 38 | -------------------------------------------------------------------------------- /parts/inc/threads: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | ## 3 | ## Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz. 4 | ## Version 2.x, Copyright (C) 2001, Paul Marquess. 5 | ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski. 6 | ## 7 | ## This program is free software; you can redistribute it and/or 8 | ## modify it under the same terms as Perl itself. 9 | ## 10 | ################################################################################ 11 | 12 | =provides 13 | 14 | __UNDEFINED__ 15 | aTHXR 16 | aTHXR_ 17 | dTHXR 18 | 19 | =implementation 20 | 21 | __UNDEFINED__ dTHR dNOOP 22 | 23 | __UNDEFINED__ dTHX dNOOP 24 | __UNDEFINED__ dTHXa(x) dNOOP 25 | 26 | __UNDEFINED__ pTHX void 27 | __UNDEFINED__ pTHX_ 28 | __UNDEFINED__ aTHX 29 | __UNDEFINED__ aTHX_ 30 | 31 | #if { VERSION < 5.6.0 } 32 | # ifdef USE_THREADS 33 | # define aTHXR thr 34 | # define aTHXR_ thr, 35 | # else 36 | # define aTHXR 37 | # define aTHXR_ 38 | # endif 39 | # define dTHXR dTHR 40 | #else 41 | # define aTHXR aTHX 42 | # define aTHXR_ aTHX_ 43 | # define dTHXR dTHX 44 | #endif 45 | 46 | __UNDEFINED__ dTHXoa(x) dTHXa(x) 47 | 48 | =xsubs 49 | 50 | IV 51 | no_THX_arg(sv) 52 | SV *sv 53 | CODE: 54 | RETVAL = 1 + sv_2iv(sv); 55 | OUTPUT: 56 | RETVAL 57 | 58 | void 59 | with_THX_arg(error) 60 | char *error 61 | PPCODE: 62 | Perl_croak(aTHX_ "%s", error); 63 | 64 | =tests plan => 2 65 | 66 | ok(&Devel::PPPort::no_THX_arg("42"), 43); 67 | eval { &Devel::PPPort::with_THX_arg("yes\n"); }; 68 | ok($@ =~ /^yes/); 69 | -------------------------------------------------------------------------------- /parts/inc/snprintf: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | ## 3 | ## Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz. 4 | ## Version 2.x, Copyright (C) 2001, Paul Marquess. 5 | ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski. 6 | ## 7 | ## This program is free software; you can redistribute it and/or 8 | ## modify it under the same terms as Perl itself. 9 | ## 10 | ################################################################################ 11 | 12 | =provides 13 | 14 | my_snprintf 15 | 16 | =implementation 17 | 18 | #if !defined(my_snprintf) 19 | #if { NEED my_snprintf } 20 | 21 | int 22 | my_snprintf(char *buffer, const Size_t len, const char *format, ...) 23 | { 24 | dTHX; 25 | int retval; 26 | va_list ap; 27 | va_start(ap, format); 28 | #ifdef HAS_VSNPRINTF 29 | retval = vsnprintf(buffer, len, format, ap); 30 | #else 31 | retval = vsprintf(buffer, format, ap); 32 | #endif 33 | va_end(ap); 34 | if (retval < 0 || (len > 0 && (Size_t)retval >= len)) 35 | Perl_croak(aTHX_ "panic: my_snprintf buffer overflow"); 36 | return retval; 37 | } 38 | 39 | #endif 40 | #endif 41 | 42 | =xsinit 43 | 44 | #define NEED_my_snprintf 45 | 46 | =xsubs 47 | 48 | void 49 | my_snprintf() 50 | PREINIT: 51 | char buf[128]; 52 | int len; 53 | PPCODE: 54 | len = my_snprintf(buf, sizeof buf, "foo%s%d", "bar", 42); 55 | mXPUSHi(len); 56 | mXPUSHs(newSVpv(buf, 0)); 57 | XSRETURN(2); 58 | 59 | =tests plan => 2 60 | 61 | my($l, $s) = Devel::PPPort::my_snprintf(); 62 | ok($l, 8); 63 | ok($s, "foobar42"); 64 | -------------------------------------------------------------------------------- /parts/todo/5021008: -------------------------------------------------------------------------------- 1 | 5.021008 2 | BhkDISABLE # E 3 | BhkENABLE # E 4 | BhkENTRY_set # E 5 | MULTICALL # E 6 | PERL_SYS_TERM # E 7 | POP_MULTICALL # E 8 | PUSH_MULTICALL # E 9 | PadARRAY # E 10 | PadMAX # E 11 | PadlistARRAY # E 12 | PadlistMAX # E 13 | PadlistNAMES # E 14 | PadlistNAMESARRAY # E 15 | PadlistNAMESMAX # E 16 | PadnameLEN # E 17 | PadnamePV # E 18 | PadnameREFCNT # E 19 | PadnameREFCNT_dec # E 20 | PadnameSV # E 21 | PadnamelistARRAY # E 22 | PadnamelistMAX # E 23 | PadnamelistREFCNT # E 24 | PadnamelistREFCNT_dec # E 25 | XS_APIVERSION_BOOTCHECK # E 26 | XS_EXTERNAL # E 27 | XS_INTERNAL # E 28 | XS_VERSION_BOOTCHECK # E 29 | XopDISABLE # E 30 | XopENABLE # E 31 | XopENTRY # E 32 | XopENTRYCUSTOM # E 33 | XopENTRY_set # E 34 | cophh_new_empty # E 35 | my_lstat # U (Perl_my_lstat) 36 | my_stat # U (Perl_my_stat) 37 | reentrant_free # U 38 | reentrant_init # U 39 | reentrant_retry # U 40 | reentrant_size # U 41 | ref # U (Perl_ref) 42 | sv_get_backrefs # U 43 | sv_setref_pvs # A 44 | -------------------------------------------------------------------------------- /parts/inc/newRV: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | ## 3 | ## Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz. 4 | ## Version 2.x, Copyright (C) 2001, Paul Marquess. 5 | ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski. 6 | ## 7 | ## This program is free software; you can redistribute it and/or 8 | ## modify it under the same terms as Perl itself. 9 | ## 10 | ################################################################################ 11 | 12 | =provides 13 | 14 | newRV_inc 15 | newRV_noinc 16 | 17 | =implementation 18 | 19 | __UNDEFINED__ newRV_inc(sv) newRV(sv) /* Replace */ 20 | 21 | #ifndef newRV_noinc 22 | #if { NEED newRV_noinc } 23 | SV * 24 | newRV_noinc(SV *sv) 25 | { 26 | SV *rv = (SV *)newRV(sv); 27 | SvREFCNT_dec(sv); 28 | return rv; 29 | } 30 | #endif 31 | #endif 32 | 33 | =xsinit 34 | 35 | #define NEED_newRV_noinc 36 | 37 | =xsubs 38 | 39 | U32 40 | newRV_inc_REFCNT() 41 | PREINIT: 42 | SV *sv, *rv; 43 | CODE: 44 | sv = newSViv(42); 45 | rv = newRV_inc(sv); 46 | SvREFCNT_dec(sv); 47 | RETVAL = SvREFCNT(sv); 48 | sv_2mortal(rv); 49 | OUTPUT: 50 | RETVAL 51 | 52 | U32 53 | newRV_noinc_REFCNT() 54 | PREINIT: 55 | SV *sv, *rv; 56 | CODE: 57 | sv = newSViv(42); 58 | rv = newRV_noinc(sv); 59 | RETVAL = SvREFCNT(sv); 60 | sv_2mortal(rv); 61 | OUTPUT: 62 | RETVAL 63 | 64 | =tests plan => 2 65 | 66 | ok(&Devel::PPPort::newRV_inc_REFCNT, 1); 67 | ok(&Devel::PPPort::newRV_noinc_REFCNT, 1); 68 | -------------------------------------------------------------------------------- /module3.c: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * 3 | * Perl/Pollution/Portability 4 | * 5 | ******************************************************************************** 6 | * 7 | * Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz. 8 | * Version 2.x, Copyright (C) 2001, Paul Marquess. 9 | * Version 1.x, Copyright (C) 1999, Kenneth Albanowski. 10 | * 11 | * This program is free software; you can redistribute it and/or 12 | * modify it under the same terms as Perl itself. 13 | * 14 | *******************************************************************************/ 15 | 16 | #include "EXTERN.h" 17 | #include "perl.h" 18 | 19 | #define NEED_PL_parser 20 | #define NO_XSLOCKS 21 | #include "XSUB.h" 22 | 23 | #include "ppport.h" 24 | 25 | static void throws_exception(int throw_e) 26 | { 27 | if (throw_e) 28 | croak("boo\n"); 29 | } 30 | 31 | int exception(int throw_e) 32 | { 33 | dTHR; 34 | dXCPT; 35 | SV *caught = get_sv("Devel::PPPort::exception_caught", 0); 36 | 37 | XCPT_TRY_START { 38 | throws_exception(throw_e); 39 | } XCPT_TRY_END 40 | 41 | XCPT_CATCH 42 | { 43 | sv_setiv(caught, 1); 44 | XCPT_RETHROW; 45 | } 46 | 47 | sv_setiv(caught, 0); 48 | 49 | return 42; 50 | } 51 | 52 | void call_newCONSTSUB_3(void) 53 | { 54 | newCONSTSUB(gv_stashpv("Devel::PPPort", FALSE), "test_value_3", newSViv(3)); 55 | } 56 | 57 | U32 get_PL_signals_3(void) 58 | { 59 | return PL_signals; 60 | } 61 | 62 | int dummy_parser_warning(void) 63 | { 64 | char * volatile my_bufptr; 65 | char * volatile *my_p_bufptr; 66 | my_bufptr = PL_bufptr; 67 | my_p_bufptr = &PL_bufptr; 68 | PL_bufptr = my_bufptr; 69 | PL_bufptr = *my_p_bufptr; 70 | return &PL_bufptr != NULL; 71 | } 72 | -------------------------------------------------------------------------------- /parts/base/5005000: -------------------------------------------------------------------------------- 1 | 5.005000 2 | PL_curpad # E 3 | PL_modglobal # E 4 | cx_dump # U 5 | debop # U 6 | debprofdump # U 7 | fbm_compile # E (Perl_fbm_compile) 8 | fbm_instr # E (Perl_fbm_instr) 9 | get_op_descs # E 10 | get_op_names # E 11 | init_stacks # E 12 | mg_length # E 13 | mg_size # E 14 | newHVhv # E 15 | new_stackinfo # E 16 | regdump # U 17 | regexec_flags # E 18 | regnext # E (Perl_regnext) 19 | runops_debug # E 20 | runops_standard # E 21 | save_iv # E (save_iv) 22 | save_op # U 23 | sv_iv # E 24 | sv_peek # U 25 | sv_pvn # E 26 | sv_true # E 27 | sv_uv # E 28 | CPERLscope # added by devel/scanprov 29 | END_EXTERN_C # added by devel/scanprov 30 | EXTERN_C # added by devel/scanprov 31 | NOOP # added by devel/scanprov 32 | PL_DBsignal # added by devel/scanprov 33 | PL_Sv # added by devel/scanprov 34 | PL_hexdigit # added by devel/scanprov 35 | PL_hints # added by devel/scanprov 36 | PL_laststatval # added by devel/scanprov 37 | PL_statcache # added by devel/scanprov 38 | START_EXTERN_C # added by devel/scanprov 39 | -------------------------------------------------------------------------------- /parts/inc/version: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | ## 3 | ## Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz. 4 | ## Version 2.x, Copyright (C) 2001, Paul Marquess. 5 | ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski. 6 | ## 7 | ## This program is free software; you can redistribute it and/or 8 | ## modify it under the same terms as Perl itself. 9 | ## 10 | ################################################################################ 11 | 12 | =provides 13 | 14 | PERL_REVISION 15 | PERL_VERSION 16 | PERL_SUBVERSION 17 | PERL_BCDVERSION 18 | 19 | =dontwarn 20 | 21 | PERL_PATCHLEVEL_H_IMPLICIT 22 | _dpppDEC2BCD 23 | 24 | =implementation 25 | 26 | #ifndef PERL_REVISION 27 | # if !defined(__PATCHLEVEL_H_INCLUDED__) && !(defined(PATCHLEVEL) && defined(SUBVERSION)) 28 | # define PERL_PATCHLEVEL_H_IMPLICIT 29 | # include 30 | # endif 31 | # if !(defined(PERL_VERSION) || (defined(SUBVERSION) && defined(PATCHLEVEL))) 32 | # include 33 | # endif 34 | # ifndef PERL_REVISION 35 | # define PERL_REVISION (5) 36 | /* Replace: 1 */ 37 | # define PERL_VERSION PATCHLEVEL 38 | # define PERL_SUBVERSION SUBVERSION 39 | /* Replace PERL_PATCHLEVEL with PERL_VERSION */ 40 | /* Replace: 0 */ 41 | # endif 42 | #endif 43 | 44 | #define _dpppDEC2BCD(dec) ((((dec)/100)<<8)|((((dec)%100)/10)<<4)|((dec)%10)) 45 | #define PERL_BCDVERSION ((_dpppDEC2BCD(PERL_REVISION)<<24)|(_dpppDEC2BCD(PERL_VERSION)<<12)|_dpppDEC2BCD(PERL_SUBVERSION)) 46 | 47 | /* It is very unlikely that anyone will try to use this with Perl 6 48 | (or greater), but who knows. 49 | */ 50 | #if PERL_REVISION != 5 51 | # error ppport.h only works with Perl version 5 52 | #endif /* PERL_REVISION != 5 */ 53 | -------------------------------------------------------------------------------- /parts/inc/format: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | ## 3 | ## Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz. 4 | ## Version 2.x, Copyright (C) 2001, Paul Marquess. 5 | ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski. 6 | ## 7 | ## This program is free software; you can redistribute it and/or 8 | ## modify it under the same terms as Perl itself. 9 | ## 10 | ################################################################################ 11 | 12 | =provides 13 | 14 | /^#\s*define\s+(\w+)/ 15 | 16 | =implementation 17 | 18 | #ifndef IVdf 19 | # if IVSIZE == LONGSIZE 20 | # define IVdf "ld" 21 | # define UVuf "lu" 22 | # define UVof "lo" 23 | # define UVxf "lx" 24 | # define UVXf "lX" 25 | # elif IVSIZE == INTSIZE 26 | # define IVdf "d" 27 | # define UVuf "u" 28 | # define UVof "o" 29 | # define UVxf "x" 30 | # define UVXf "X" 31 | # else 32 | # error "cannot define IV/UV formats" 33 | # endif 34 | #endif 35 | 36 | #ifndef NVef 37 | # if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && \ 38 | defined(PERL_PRIfldbl) && { VERSION != 5.6.0 } 39 | /* Not very likely, but let's try anyway. */ 40 | # define NVef PERL_PRIeldbl 41 | # define NVff PERL_PRIfldbl 42 | # define NVgf PERL_PRIgldbl 43 | # else 44 | # define NVef "e" 45 | # define NVff "f" 46 | # define NVgf "g" 47 | # endif 48 | #endif 49 | 50 | =xsubs 51 | 52 | void 53 | croak_NVgf(num) 54 | NV num 55 | PPCODE: 56 | Perl_croak(aTHX_ "%.20" NVgf "\n", num); 57 | 58 | =tests plan => 1 59 | 60 | my $num = 1.12345678901234567890; 61 | 62 | eval { Devel::PPPort::croak_NVgf($num) }; 63 | ok($@ =~ /^1.1234567890/); 64 | -------------------------------------------------------------------------------- /devel/mktodo: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl -w 2 | ################################################################################ 3 | # 4 | # mktodo -- generate baseline and todo files by running mktodo.pl 5 | # 6 | ################################################################################ 7 | # 8 | # Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz. 9 | # Version 2.x, Copyright (C) 2001, Paul Marquess. 10 | # Version 1.x, Copyright (C) 1999, Kenneth Albanowski. 11 | # 12 | # This program is free software; you can redistribute it and/or 13 | # modify it under the same terms as Perl itself. 14 | # 15 | ################################################################################ 16 | 17 | use strict; 18 | use Getopt::Long; 19 | 20 | require 'devel/devtools.pl'; 21 | 22 | our %opt = ( 23 | base => 0, 24 | check => 1, 25 | verbose => 0, 26 | install => '/tmp/perl/install/default', 27 | blead => 'bleadperl-debug', 28 | ); 29 | 30 | GetOptions(\%opt, qw( base check! verbose install=s blead=s blead-version=s )) or die; 31 | 32 | identify(); 33 | 34 | my $outdir = 'parts/todo'; 35 | 36 | my @perls = sort { $b->{version} <=> $a->{version} } 37 | map { { version => `$_ -e 'printf "%.6f", \$]'`, path => $_ } } 38 | ($opt{blead}, grep !/-RC\d+/, glob "$opt{install}/*/bin/perl5.*"); 39 | 40 | if (exists $opt{'blead-version'}) { 41 | $perls[0]{version} = $opt{'blead-version'}; 42 | } 43 | 44 | for (1 .. $#perls) { 45 | $perls[$_]{todo} = $perls[$_-1]{version}; 46 | } 47 | 48 | shift @perls; 49 | 50 | for (@perls) { 51 | my $todo = do { my $v = $_->{todo}; $v =~ s/\D+//g; $v }; 52 | -e "$outdir/$todo" and next; 53 | my @args = ('--perl', $_->{path}, '--todo', "$outdir/$todo", '--version', "$_->{todo}"); 54 | push @args, '--base' if $opt{base}; 55 | push @args, '--verbose' if $opt{verbose}; 56 | push @args, '--nocheck' unless $opt{check}; 57 | runperl('devel/mktodo.pl', @args) or die "error running mktodo.pl [$!] [$?]\n"; 58 | } 59 | -------------------------------------------------------------------------------- /parts/todo/5004000: -------------------------------------------------------------------------------- 1 | 5.004000 2 | GIMME_V # E 3 | G_VOID # E 4 | HePV # A 5 | HeSVKEY_set # U 6 | SvSetMagicSV # U 7 | SvSetMagicSV_nosteal # U 8 | SvSetSV_nosteal # U 9 | SvTAINTED # U 10 | SvTAINTED_off # U 11 | SvTAINTED_on # U 12 | block_end # E (Perl_block_end) 13 | block_gimme # U 14 | block_start # E (Perl_block_start) 15 | call_list # U 16 | delimcpy # U 17 | form # U 18 | gv_autoload4 # U 19 | gv_fetchmethod_autoload # U 20 | hv_delayfree_ent # U 21 | hv_free_ent # U 22 | ibcmp_locale # U 23 | intro_my # U 24 | my_failure_exit # U 25 | newSVpvf # U 26 | rsignal # E 27 | rsignal_state # E 28 | save_I16 # U 29 | save_gp # U 30 | share_hek # E 31 | start_subparse # E (Perl_start_subparse) 32 | sv_catpvf # U 33 | sv_catpvf_mg # U 34 | sv_cmp_locale # U 35 | sv_derived_from # U 36 | sv_magic_portable # U 37 | sv_setpvf # U 38 | sv_setpvf_mg # U 39 | sv_taint # U 40 | sv_tainted # U 41 | sv_untaint # U 42 | sv_vcatpvf # U 43 | sv_vcatpvf_mg # U 44 | sv_vcatpvfn # U 45 | sv_vsetpvf # U 46 | sv_vsetpvf_mg # U 47 | sv_vsetpvfn # U 48 | toLOWER_LC # U 49 | vnewSVpvf # U 50 | warner # U 51 | -------------------------------------------------------------------------------- /parts/inc/exception: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | ## 3 | ## Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz. 4 | ## Version 2.x, Copyright (C) 2001, Paul Marquess. 5 | ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski. 6 | ## 7 | ## This program is free software; you can redistribute it and/or 8 | ## modify it under the same terms as Perl itself. 9 | ## 10 | ################################################################################ 11 | 12 | =provides 13 | 14 | dXCPT 15 | XCPT_TRY_START 16 | XCPT_TRY_END 17 | XCPT_CATCH 18 | XCPT_RETHROW 19 | 20 | =implementation 21 | 22 | #ifdef NO_XSLOCKS 23 | # ifdef dJMPENV 24 | # define dXCPT dJMPENV; int rEtV = 0 25 | # define XCPT_TRY_START JMPENV_PUSH(rEtV); if (rEtV == 0) 26 | # define XCPT_TRY_END JMPENV_POP; 27 | # define XCPT_CATCH if (rEtV != 0) 28 | # define XCPT_RETHROW JMPENV_JUMP(rEtV) 29 | # else 30 | # define dXCPT Sigjmp_buf oldTOP; int rEtV = 0 31 | # define XCPT_TRY_START Copy(top_env, oldTOP, 1, Sigjmp_buf); rEtV = Sigsetjmp(top_env, 1); if (rEtV == 0) 32 | # define XCPT_TRY_END Copy(oldTOP, top_env, 1, Sigjmp_buf); 33 | # define XCPT_CATCH if (rEtV != 0) 34 | # define XCPT_RETHROW Siglongjmp(top_env, rEtV) 35 | # endif 36 | #endif 37 | 38 | =xsmisc 39 | 40 | /* defined in module3.c */ 41 | int exception(int throw_e); 42 | 43 | =xsubs 44 | 45 | int 46 | exception(throw_e) 47 | int throw_e 48 | OUTPUT: 49 | RETVAL 50 | 51 | =tests plan => 7 52 | 53 | my $rv; 54 | 55 | $Devel::PPPort::exception_caught = undef; 56 | 57 | $rv = eval { &Devel::PPPort::exception(0) }; 58 | ok($@, ''); 59 | ok(defined $rv); 60 | ok($rv, 42); 61 | ok($Devel::PPPort::exception_caught, 0); 62 | 63 | $Devel::PPPort::exception_caught = undef; 64 | 65 | $rv = eval { &Devel::PPPort::exception(1) }; 66 | ok($@, "boo\n"); 67 | ok(not defined $rv); 68 | ok($Devel::PPPort::exception_caught, 1); 69 | -------------------------------------------------------------------------------- /parts/inc/newSV_type: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | ## 3 | ## Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz. 4 | ## Version 2.x, Copyright (C) 2001, Paul Marquess. 5 | ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski. 6 | ## 7 | ## This program is free software; you can redistribute it and/or 8 | ## modify it under the same terms as Perl itself. 9 | ## 10 | ################################################################################ 11 | 12 | =provides 13 | 14 | newSV_type 15 | 16 | =implementation 17 | 18 | #ifndef newSV_type 19 | 20 | #if { NEED newSV_type } 21 | 22 | SV* 23 | newSV_type(pTHX_ svtype const t) 24 | { 25 | SV* const sv = newSV(0); 26 | sv_upgrade(sv, t); 27 | return sv; 28 | } 29 | 30 | #endif 31 | 32 | #endif 33 | 34 | =xsinit 35 | 36 | #define NEED_newSV_type 37 | 38 | =xsubs 39 | 40 | int 41 | newSV_type() 42 | PREINIT: 43 | SV* sv; 44 | CODE: 45 | RETVAL = 0; 46 | sv = newSV_type(SVt_NULL); 47 | if (SvTYPE(sv) == SVt_NULL) 48 | { 49 | RETVAL++; 50 | } 51 | SvREFCNT_dec(sv); 52 | 53 | sv = newSV_type(SVt_PVIV); 54 | if (SvTYPE(sv) == SVt_PVIV) 55 | { 56 | RETVAL++; 57 | } 58 | SvREFCNT_dec(sv); 59 | 60 | sv = newSV_type(SVt_PVHV); 61 | if (SvTYPE(sv) == SVt_PVHV) 62 | { 63 | RETVAL++; 64 | } 65 | SvREFCNT_dec(sv); 66 | 67 | sv = newSV_type(SVt_PVAV); 68 | if (SvTYPE(sv) == SVt_PVAV) 69 | { 70 | RETVAL++; 71 | } 72 | SvREFCNT_dec(sv); 73 | OUTPUT: 74 | RETVAL 75 | 76 | 77 | =tests plan => 1 78 | 79 | ok(Devel::PPPort::newSV_type(), 4); 80 | -------------------------------------------------------------------------------- /parts/base/5004050: -------------------------------------------------------------------------------- 1 | 5.004050 2 | PL_na # E 3 | PL_sv_no # E 4 | PL_sv_undef # E 5 | PL_sv_yes # E 6 | SvGETMAGIC # U 7 | do_binmode # E 8 | newCONSTSUB # E 9 | newSVpvn # E 10 | save_aelem # U 11 | save_helem # U 12 | sv_catpv_mg # E 13 | sv_catpvn_mg # U 14 | sv_catsv_mg # U 15 | sv_setiv_mg # E 16 | sv_setpv_mg # E 17 | sv_setpvn_mg # E 18 | sv_setsv_mg # E 19 | sv_setuv_mg # E 20 | sv_usepvn_mg # U 21 | AvFILLp # added by devel/scanprov 22 | DEFSV # added by devel/scanprov 23 | ERRSV # added by devel/scanprov 24 | PL_compiling # added by devel/scanprov 25 | PL_curcop # added by devel/scanprov 26 | PL_curstash # added by devel/scanprov 27 | PL_debstash # added by devel/scanprov 28 | PL_defgv # added by devel/scanprov 29 | PL_diehook # added by devel/scanprov 30 | PL_dirty # added by devel/scanprov 31 | PL_errgv # added by devel/scanprov 32 | PL_perl_destruct_level # added by devel/scanprov 33 | PL_perldb # added by devel/scanprov 34 | PL_stack_base # added by devel/scanprov 35 | PL_stack_sp # added by devel/scanprov 36 | PL_stdingv # added by devel/scanprov 37 | PL_sv_arenaroot # added by devel/scanprov 38 | PL_tainted # added by devel/scanprov 39 | PL_tainting # added by devel/scanprov 40 | SAVE_DEFSV # added by devel/scanprov 41 | dTHR # added by devel/scanprov 42 | -------------------------------------------------------------------------------- /parts/base/5009004: -------------------------------------------------------------------------------- 1 | 5.009004 2 | PerlIO_context_layers # U 3 | PoisonFree # E 4 | PoisonNew # E 5 | PoisonWith # E 6 | SvREFCNT_inc_NN # U 7 | SvREFCNT_inc_simple # U 8 | SvREFCNT_inc_simple_NN # U 9 | SvREFCNT_inc_simple_void # U 10 | SvREFCNT_inc_simple_void_NN # U 11 | SvREFCNT_inc_void # U 12 | SvREFCNT_inc_void_NN # U 13 | gv_name_set # U 14 | hv_copy_hints_hv # U 15 | hv_stores # U 16 | my_snprintf # U 17 | my_strlcat # U 18 | my_strlcpy # U 19 | my_vsnprintf # U 20 | newXS_flags # U 21 | pv_escape # U 22 | pv_pretty # U 23 | regclass_swash # E (Perl_regclass_swash) 24 | sv_does # U 25 | sv_setpvs # U 26 | sv_usepvn_flags # U 27 | PERL_PV_ESCAPE_ALL # added by devel/scanprov 28 | PERL_PV_ESCAPE_FIRSTCHAR # added by devel/scanprov 29 | PERL_PV_ESCAPE_NOBACKSLASH # added by devel/scanprov 30 | PERL_PV_ESCAPE_NOCLEAR # added by devel/scanprov 31 | PERL_PV_ESCAPE_QUOTE # added by devel/scanprov 32 | PERL_PV_ESCAPE_UNI # added by devel/scanprov 33 | PERL_PV_ESCAPE_UNI_DETECT # added by devel/scanprov 34 | PERL_PV_PRETTY_DUMP # added by devel/scanprov 35 | PERL_PV_PRETTY_LTGT # added by devel/scanprov 36 | PERL_PV_PRETTY_QUOTE # added by devel/scanprov 37 | PERL_PV_PRETTY_REGPROP # added by devel/scanprov 38 | PERL_UNUSED_CONTEXT # added by devel/scanprov 39 | PERL_USE_GCC_BRACE_GROUPS # added by devel/scanprov 40 | SV_HAS_TRAILING_NUL # added by devel/scanprov 41 | SvVSTRING_mg # added by devel/scanprov 42 | gv_fetchpvs # added by devel/scanprov 43 | isGV_with_GP # added by devel/scanprov 44 | -------------------------------------------------------------------------------- /parts/base/5003070: -------------------------------------------------------------------------------- 1 | 5.003070 2 | HEf_SVKEY # E 3 | HeHASH # U 4 | HeKEY # U 5 | HeKLEN # U 6 | HeSVKEY # U 7 | HeSVKEY_force # U 8 | HeVAL # U 9 | cv_const_sv # U 10 | do_open # E (Perl_do_open) 11 | gv_efullname3 # U 12 | gv_fullname3 # U 13 | gv_stashpvn # E 14 | hv_delete_ent # U 15 | hv_exists_ent # U 16 | hv_fetch_ent # U 17 | hv_iterkeysv # E 18 | hv_ksplit # E 19 | hv_store_ent # U 20 | my_pclose # E (Perl_my_pclose) 21 | my_popen # E (Perl_my_popen) 22 | sv_gets # E (Perl_sv_gets) 23 | unsharepvn # E 24 | PERL_HASH # added by devel/scanprov 25 | PERL_INT_MAX # added by devel/scanprov 26 | PERL_INT_MIN # added by devel/scanprov 27 | PERL_LONG_MAX # added by devel/scanprov 28 | PERL_LONG_MIN # added by devel/scanprov 29 | PERL_QUAD_MAX # added by devel/scanprov 30 | PERL_QUAD_MIN # added by devel/scanprov 31 | PERL_SHORT_MAX # added by devel/scanprov 32 | PERL_SHORT_MIN # added by devel/scanprov 33 | PERL_UCHAR_MAX # added by devel/scanprov 34 | PERL_UCHAR_MIN # added by devel/scanprov 35 | PERL_UINT_MAX # added by devel/scanprov 36 | PERL_UINT_MIN # added by devel/scanprov 37 | PERL_ULONG_MAX # added by devel/scanprov 38 | PERL_ULONG_MIN # added by devel/scanprov 39 | PERL_UQUAD_MAX # added by devel/scanprov 40 | PERL_UQUAD_MIN # added by devel/scanprov 41 | PERL_USHORT_MAX # added by devel/scanprov 42 | PERL_USHORT_MIN # added by devel/scanprov 43 | -------------------------------------------------------------------------------- /parts/base/5004000: -------------------------------------------------------------------------------- 1 | 5.004000 2 | GIMME_V # E 3 | G_VOID # E 4 | HePV # A 5 | HeSVKEY_set # U 6 | PUSHu # U 7 | SvSetMagicSV # U 8 | SvSetMagicSV_nosteal # U 9 | SvSetSV_nosteal # U 10 | SvTAINTED # U 11 | SvTAINTED_off # U 12 | SvTAINTED_on # U 13 | SvUV # U 14 | SvUVX # U 15 | SvUVx # U 16 | XPUSHu # U 17 | block_end # E (Perl_block_end) 18 | block_gimme # E 19 | block_start # E (Perl_block_start) 20 | boolSV # U 21 | call_list # E 22 | delimcpy # U 23 | gv_autoload4 # U 24 | gv_fetchmethod_autoload # E 25 | hv_delayfree_ent # E 26 | hv_free_ent # E 27 | ibcmp_locale # U 28 | intro_my # E 29 | isPRINT # U 30 | my_failure_exit # E 31 | newRV_inc # U 32 | newRV_noinc # E 33 | rsignal # E 34 | rsignal_state # E 35 | save_I16 # E 36 | save_gp # E 37 | share_hek # E 38 | start_subparse # E (Perl_start_subparse) 39 | sv_2uv # U 40 | sv_cmp_locale # E 41 | sv_derived_from # E 42 | sv_setuv # E 43 | sv_taint # U 44 | sv_tainted # E 45 | sv_untaint # E 46 | sv_vcatpvfn # E 47 | sv_vsetpvfn # E 48 | toLOWER_LC # U 49 | SvUVXx # added by devel/scanprov 50 | memEQ # added by devel/scanprov 51 | memNE # added by devel/scanprov 52 | -------------------------------------------------------------------------------- /README: -------------------------------------------------------------------------------- 1 | 2 | ------------------------------------------------------ 3 | Devel::PPPort - Perl/Pollution/Portability Version 3 4 | ------------------------------------------------------ 5 | 6 | CONTENTS 7 | 8 | 1. DESCRIPTION 9 | 2. INSTALLATION 10 | 3. DOCUMENTATION 11 | 4. BUGS 12 | 5. COPYRIGHT 13 | 14 | 15 | -------------- 16 | 1. DESCRIPTION 17 | -------------- 18 | 19 | Perl's API has changed over time, gaining new features, new functions, 20 | increasing its flexibility, and reducing the impact on the C namespace 21 | environment (reduced pollution). The header file written by this module, 22 | typically F, attempts to bring some of the newer Perl API 23 | features to older versions of Perl, so that you can worry less about 24 | keeping track of old releases, but users can still reap the benefit. 25 | 26 | --------------- 27 | 2. INSTALLATION 28 | --------------- 29 | 30 | Installation of the Devel::PPPort module follows the standard Perl Way 31 | and should not be harder than: 32 | 33 | perl Makefile.PL 34 | make 35 | make test 36 | make install 37 | 38 | Note that you may need to become superuser to 'make install'. 39 | 40 | If you're building the module under Windows, you may need to use a 41 | different make program, such as 'nmake', instead of 'make'. 42 | 43 | ---------------- 44 | 3. DOCUMENTATION 45 | ---------------- 46 | 47 | To see the documentation, use the perldoc command: 48 | 49 | perldoc Devel::PPPort 50 | 51 | You can also visit CPAN Search and see the documentation online as 52 | pretty nice HTML. This is also where you will find the most recent 53 | version of this module: 54 | 55 | http://search.cpan.org/~mhx/Devel-PPPort/ 56 | 57 | ------- 58 | 4. BUGS 59 | ------- 60 | 61 | If you find any bugs, Devel::PPPort doesn't seem to build on your 62 | system, or any of its tests fail, please file an issue here: 63 | 64 | https://github.com/mhx/Devel-PPPort/issues/ 65 | 66 | to create a ticket for the module. 67 | 68 | ------------ 69 | 5. COPYRIGHT 70 | ------------ 71 | 72 | Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz. 73 | Version 2.x, Copyright (C) 2001, Paul Marquess. 74 | Version 1.x, Copyright (C) 1999, Kenneth Albanowski. 75 | 76 | This program is free software; you can redistribute it and/or 77 | modify it under the same terms as Perl itself. 78 | -------------------------------------------------------------------------------- /devel/mkapidoc.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | ################################################################################ 3 | # 4 | # mkapidoc.sh -- generate apidoc.fnc from scanning the Perl source 5 | # 6 | ################################################################################ 7 | # 8 | # Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz. 9 | # Version 2.x, Copyright (C) 2001, Paul Marquess. 10 | # Version 1.x, Copyright (C) 1999, Kenneth Albanowski. 11 | # 12 | # This program is free software; you can redistribute it and/or 13 | # modify it under the same terms as Perl itself. 14 | # 15 | ################################################################################ 16 | 17 | function isperlroot 18 | { 19 | [ -f "$1/embed.fnc" ] && [ -f "$1/perl.h" ] 20 | } 21 | 22 | function usage 23 | { 24 | echo "USAGE: $0 [perlroot] [output-file] [embed.fnc]" 25 | exit 0 26 | } 27 | 28 | if [ -z "$1" ]; then 29 | if isperlroot "../../.."; then 30 | PERLROOT=../../.. 31 | else 32 | PERLROOT=. 33 | fi 34 | else 35 | PERLROOT=$1 36 | fi 37 | 38 | if [ -z "$2" ]; then 39 | if [ -f "parts/apidoc.fnc" ]; then 40 | OUTPUT="parts/apidoc.fnc" 41 | else 42 | usage 43 | fi 44 | else 45 | OUTPUT=$2 46 | fi 47 | 48 | if [ -z "$3" ]; then 49 | if [ -f "parts/embed.fnc" ]; then 50 | EMBED="parts/embed.fnc" 51 | else 52 | usage 53 | fi 54 | else 55 | EMBED=$3 56 | fi 57 | 58 | if isperlroot $PERLROOT; then 59 | cat >$OUTPUT < file that came with this distribution. 67 | : 68 | :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 69 | 70 | : 71 | : This file lists all API functions/macros that are documented in the Perl 72 | : source code, but are not contained in F. 73 | : 74 | 75 | EOF 76 | grep -hr '^=for apidoc' $PERLROOT | sed -e 's/=for apidoc //' | grep '|' | sort | uniq \ 77 | | perl -e'$f=pop;open(F,$f)||die"$f:$!";while(){(split/\|/)[2]=~/(\w+)/;$h{$1}++} 78 | while(<>){s/[ \t]+$//;(split/\|/)[2]=~/(\w+)/;$h{$1}||print}' $EMBED >>$OUTPUT 79 | else 80 | usage 81 | fi 82 | -------------------------------------------------------------------------------- /devel/scanprov: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl -w 2 | ################################################################################ 3 | # 4 | # scanprov -- scan Perl headers for provided macros 5 | # 6 | ################################################################################ 7 | # 8 | # Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz. 9 | # Version 2.x, Copyright (C) 2001, Paul Marquess. 10 | # Version 1.x, Copyright (C) 1999, Kenneth Albanowski. 11 | # 12 | # This program is free software; you can redistribute it and/or 13 | # modify it under the same terms as Perl itself. 14 | # 15 | ################################################################################ 16 | 17 | use strict; 18 | use Getopt::Long; 19 | 20 | require 'parts/ppptools.pl'; 21 | 22 | our %opt = ( 23 | mode => 'check', 24 | install => '/tmp/perl/install/default', 25 | blead => 'bleadperl', 26 | ); 27 | 28 | GetOptions(\%opt, qw( install=s mode=s blead=s )) or die; 29 | 30 | my $write = $opt{mode} eq 'write'; 31 | 32 | my %embed = map { ( $_->{name} => 1 ) } 33 | parse_embed(qw(parts/embed.fnc parts/apidoc.fnc parts/ppport.fnc )); 34 | 35 | my @provided = grep { !exists $embed{$_} } 36 | map { /^(\w+)/ ? $1 : () } 37 | `$^X ppport.h --list-provided`; 38 | 39 | my @perls = sort { $b->{version} <=> $a->{version} } 40 | map { { version => `$_ -e 'printf "%.6f", \$]'`, path => $_ } } 41 | ($opt{blead}, glob "$opt{install}/*/bin/perl5.*"); 42 | 43 | for (1 .. $#perls) { 44 | $perls[$_]{todo} = $perls[$_-1]{version}; 45 | } 46 | 47 | shift @perls; 48 | 49 | my %v; 50 | 51 | for my $p (@perls) { 52 | print "checking perl $p->{version}...\n"; 53 | my $archlib = `$p->{path} -MConfig -l -e 'print \$Config{archlib}'`; 54 | chomp $archlib; 55 | local @ARGV = glob "$archlib/CORE/*.h"; 56 | my %sym; 57 | while (<>) { $sym{$_}++ for /(\w+)/g; } 58 | @provided = map { $sym{$_} or $v{$p->{todo}}{$_}++; $sym{$_} ? $_ : () } @provided; 59 | } 60 | 61 | my $out = 'parts/base'; 62 | my $todo = parse_todo($out); 63 | 64 | for my $v (keys %v) { 65 | my @new = sort grep { !exists $todo->{$_} } keys %{$v{$v}}; 66 | @new or next; 67 | my $file = $v; 68 | $file =~ s/\.//g; 69 | $file = "$out/$file"; 70 | -e $file or die "non-existent: $file\n"; 71 | print "-- $file --\n"; 72 | $write and (open F, ">>$file" or die "$file: $!\n"); 73 | for (@new) { 74 | print "adding $_\n"; 75 | $write and printf F "%-30s # added by $0\n", $_; 76 | } 77 | $write and close F; 78 | } 79 | -------------------------------------------------------------------------------- /parts/inc/shared_pv: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | ## 3 | ## Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz. 4 | ## Version 2.x, Copyright (C) 2001, Paul Marquess. 5 | ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski. 6 | ## 7 | ## This program is free software; you can redistribute it and/or 8 | ## modify it under the same terms as Perl itself. 9 | ## 10 | ################################################################################ 11 | 12 | =provides 13 | 14 | newSVpvn_share 15 | __UNDEFINED__ 16 | 17 | =implementation 18 | 19 | /* Hint: newSVpvn_share 20 | * The SVs created by this function only mimic the behaviour of 21 | * shared PVs without really being shared. Only use if you know 22 | * what you're doing. 23 | */ 24 | 25 | #ifndef newSVpvn_share 26 | 27 | #if { NEED newSVpvn_share } 28 | 29 | SV * 30 | newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash) 31 | { 32 | SV *sv; 33 | if (len < 0) 34 | len = -len; 35 | if (!hash) 36 | PERL_HASH(hash, (char*) src, len); 37 | sv = newSVpvn((char *) src, len); 38 | sv_upgrade(sv, SVt_PVIV); 39 | SvIVX(sv) = hash; 40 | SvREADONLY_on(sv); 41 | SvPOK_on(sv); 42 | return sv; 43 | } 44 | 45 | #endif 46 | 47 | #endif 48 | 49 | __UNDEFINED__ SvSHARED_HASH(sv) (0 + SvUVX(sv)) 50 | 51 | =xsinit 52 | 53 | #define NEED_newSVpvn_share 54 | 55 | =xsubs 56 | 57 | int 58 | newSVpvn_share() 59 | PREINIT: 60 | const char *s; 61 | SV *sv; 62 | STRLEN len; 63 | U32 hash; 64 | CODE: 65 | RETVAL = 0; 66 | s = "mhx"; 67 | len = 3; 68 | PERL_HASH(hash, (char *) s, len); 69 | sv = newSVpvn_share(s, len, 0); 70 | s = 0; 71 | RETVAL += strEQ(SvPV_nolen_const(sv), "mhx"); 72 | RETVAL += SvCUR(sv) == len; 73 | RETVAL += SvSHARED_HASH(sv) == hash; 74 | SvREFCNT_dec(sv); 75 | s = "foobar"; 76 | len = 6; 77 | PERL_HASH(hash, (char *) s, len); 78 | sv = newSVpvn_share(s, -(I32) len, hash); 79 | s = 0; 80 | RETVAL += strEQ(SvPV_nolen_const(sv), "foobar"); 81 | RETVAL += SvCUR(sv) == len; 82 | RETVAL += SvSHARED_HASH(sv) == hash; 83 | SvREFCNT_dec(sv); 84 | OUTPUT: 85 | RETVAL 86 | 87 | 88 | =tests plan => 1 89 | 90 | ok(&Devel::PPPort::newSVpvn_share(), 6); 91 | -------------------------------------------------------------------------------- /parts/inc/memory: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | ## 3 | ## Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz. 4 | ## Version 2.x, Copyright (C) 2001, Paul Marquess. 5 | ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski. 6 | ## 7 | ## This program is free software; you can redistribute it and/or 8 | ## modify it under the same terms as Perl itself. 9 | ## 10 | ################################################################################ 11 | 12 | =provides 13 | 14 | __UNDEFINED__ 15 | 16 | =implementation 17 | 18 | #ifdef HAS_MEMCMP 19 | __UNDEFINED__ memNE(s1,s2,l) (memcmp(s1,s2,l)) 20 | __UNDEFINED__ memEQ(s1,s2,l) (!memcmp(s1,s2,l)) 21 | #else 22 | __UNDEFINED__ memNE(s1,s2,l) (bcmp(s1,s2,l)) 23 | __UNDEFINED__ memEQ(s1,s2,l) (!bcmp(s1,s2,l)) 24 | #endif 25 | 26 | __UNDEFINED__ memEQs(s1, l, s2) \ 27 | (sizeof(s2)-1 == l && memEQ(s1, (s2 ""), (sizeof(s2)-1))) 28 | __UNDEFINED__ memNEs(s1, l, s2) !memEQs(s1, l, s2) 29 | 30 | __UNDEFINED__ MoveD(s,d,n,t) memmove((char*)(d),(char*)(s), (n) * sizeof(t)) 31 | __UNDEFINED__ CopyD(s,d,n,t) memcpy((char*)(d),(char*)(s), (n) * sizeof(t)) 32 | #ifdef HAS_MEMSET 33 | __UNDEFINED__ ZeroD(d,n,t) memzero((char*)(d), (n) * sizeof(t)) 34 | #else 35 | __UNDEFINED__ ZeroD(d,n,t) ((void)memzero((char*)(d), (n) * sizeof(t)), d) 36 | #endif 37 | 38 | __UNDEFINED__ PoisonWith(d,n,t,b) (void)memset((char*)(d), (U8)(b), (n) * sizeof(t)) 39 | __UNDEFINED__ PoisonNew(d,n,t) PoisonWith(d,n,t,0xAB) 40 | __UNDEFINED__ PoisonFree(d,n,t) PoisonWith(d,n,t,0xEF) 41 | __UNDEFINED__ Poison(d,n,t) PoisonFree(d,n,t) 42 | 43 | __UNDEFINED__ Newx(v,n,t) New(0,v,n,t) 44 | __UNDEFINED__ Newxc(v,n,t,c) Newc(0,v,n,t,c) 45 | __UNDEFINED__ Newxz(v,n,t) Newz(0,v,n,t) 46 | 47 | =xsubs 48 | 49 | int 50 | checkmem() 51 | PREINIT: 52 | char *p; 53 | 54 | CODE: 55 | RETVAL = 0; 56 | Newx(p, 6, char); 57 | CopyD("Hello", p, 6, char); 58 | if (memEQ(p, "Hello", 6)) 59 | RETVAL++; 60 | ZeroD(p, 6, char); 61 | if (memEQ(p, "\0\0\0\0\0\0", 6)) 62 | RETVAL++; 63 | if (memEQs(p, 6, "\0\0\0\0\0\0")) 64 | RETVAL++; 65 | Poison(p, 6, char); 66 | if (memNE(p, "\0\0\0\0\0\0", 6)) 67 | RETVAL++; 68 | if (memNEs(p, 6, "\0\0\0\0\0\0")) 69 | RETVAL++; 70 | Safefree(p); 71 | 72 | Newxz(p, 6, char); 73 | if (memEQ(p, "\0\0\0\0\0\0", 6)) 74 | RETVAL++; 75 | Safefree(p); 76 | 77 | Newxc(p, 3, short, char); 78 | Safefree(p); 79 | 80 | OUTPUT: 81 | RETVAL 82 | 83 | =tests plan => 1 84 | 85 | ok(Devel::PPPort::checkmem(), 6); 86 | -------------------------------------------------------------------------------- /parts/todo/5007003: -------------------------------------------------------------------------------- 1 | 5.007003 2 | OP_DESC # U 3 | OP_NAME # U 4 | PL_peepp # E 5 | PerlIO_clearerr # U (PerlIO_clearerr) 6 | PerlIO_close # U (PerlIO_close) 7 | PerlIO_eof # U (PerlIO_eof) 8 | PerlIO_error # U (PerlIO_error) 9 | PerlIO_fileno # U (PerlIO_fileno) 10 | PerlIO_fill # U (PerlIO_fill) 11 | PerlIO_flush # U (PerlIO_flush) 12 | PerlIO_get_base # U (PerlIO_get_base) 13 | PerlIO_get_bufsiz # U (PerlIO_get_bufsiz) 14 | PerlIO_get_cnt # U (PerlIO_get_cnt) 15 | PerlIO_get_ptr # U (PerlIO_get_ptr) 16 | PerlIO_read # U (PerlIO_read) 17 | PerlIO_seek # U (PerlIO_seek) 18 | PerlIO_set_cnt # U (PerlIO_set_cnt) 19 | PerlIO_set_ptrcnt # U (PerlIO_set_ptrcnt) 20 | PerlIO_setlinebuf # U (PerlIO_setlinebuf) 21 | PerlIO_stderr # U (PerlIO_stderr) 22 | PerlIO_stdin # U (PerlIO_stdin) 23 | PerlIO_stdout # U (PerlIO_stdout) 24 | PerlIO_tell # U (PerlIO_tell) 25 | PerlIO_unread # U (PerlIO_unread) 26 | PerlIO_write # U (PerlIO_write) 27 | SvLOCK # U 28 | SvSHARE # U 29 | SvUNLOCK # U 30 | atfork_lock # U 31 | atfork_unlock # U 32 | custom_op_desc # U 33 | custom_op_name # U 34 | deb # U 35 | debstack # U 36 | debstackptrs # U 37 | gv_fetchmeth_autoload # U 38 | ibcmp_utf8 # U 39 | my_fork # U 40 | my_socketpair # U 41 | pack_cat # U 42 | perl_destruct # E (perl_destruct) 43 | pv_uni_display # U 44 | save_shared_pvref # U 45 | savesharedpv # U 46 | sortsv # U 47 | sv_magicext # U 48 | sv_nolocking # U 49 | sv_nosharing # U 50 | sv_recode_to_utf8 # U 51 | sv_uni_display # U 52 | toFOLD_uni # U 53 | toLOWER_uni # A 54 | toTITLE_uni # A 55 | toUPPER_uni # A 56 | to_uni_fold # U 57 | to_uni_lower # E (Perl_to_uni_lower) 58 | to_uni_title # E (Perl_to_uni_title) 59 | to_uni_upper # E (Perl_to_uni_upper) 60 | to_utf8_case # U 61 | unpack_str # U 62 | uvchr_to_utf8_flags # U 63 | uvuni_to_utf8_flags # U 64 | vdeb # U 65 | -------------------------------------------------------------------------------- /parts/base/5021008: -------------------------------------------------------------------------------- 1 | 5.021008 2 | BhkDISABLE # E 3 | BhkENABLE # E 4 | BhkENTRY_set # E 5 | MULTICALL # E 6 | PERL_SYS_TERM # E 7 | POP_MULTICALL # E 8 | PUSH_MULTICALL # E 9 | PadARRAY # E 10 | PadMAX # E 11 | PadlistARRAY # E 12 | PadlistMAX # E 13 | PadlistNAMES # E 14 | PadlistNAMESARRAY # E 15 | PadlistNAMESMAX # E 16 | PadnameLEN # E 17 | PadnamePV # E 18 | PadnameREFCNT # E 19 | PadnameREFCNT_dec # E 20 | PadnameSV # E 21 | PadnamelistARRAY # E 22 | PadnamelistMAX # E 23 | PadnamelistREFCNT # E 24 | PadnamelistREFCNT_dec # E 25 | XS_APIVERSION_BOOTCHECK # E 26 | XS_EXTERNAL # E 27 | XS_INTERNAL # E 28 | XS_VERSION_BOOTCHECK # E 29 | XopDISABLE # E 30 | XopENABLE # E 31 | XopENTRY # E 32 | XopENTRYCUSTOM # E 33 | XopENTRY_set # E 34 | cophh_new_empty # E 35 | my_lstat # U (Perl_my_lstat) 36 | my_stat # U (Perl_my_stat) 37 | reentrant_free # U 38 | reentrant_init # U 39 | reentrant_retry # U 40 | reentrant_size # U 41 | ref # U (Perl_ref) 42 | sv_get_backrefs # U 43 | sv_magic_portable # U 44 | sv_setref_pvs # A 45 | PERL_BCDVERSION # added by devel/scanprov 46 | PERL_MAGIC_glob # added by devel/scanprov 47 | PERL_MAGIC_mutex # added by devel/scanprov 48 | PERL_MAGIC_overload # added by devel/scanprov 49 | PERL_MAGIC_overload_elem # added by devel/scanprov 50 | PL_bufend # added by devel/scanprov 51 | PL_bufptr # added by devel/scanprov 52 | PL_copline # added by devel/scanprov 53 | PL_error_count # added by devel/scanprov 54 | PL_expect # added by devel/scanprov 55 | PL_in_my # added by devel/scanprov 56 | PL_in_my_stash # added by devel/scanprov 57 | PL_lex_state # added by devel/scanprov 58 | PL_lex_stuff # added by devel/scanprov 59 | PL_linestr # added by devel/scanprov 60 | PL_rsfp # added by devel/scanprov 61 | PL_rsfp_filters # added by devel/scanprov 62 | PL_tokenbuf # added by devel/scanprov 63 | WARN_ASSERTIONS # added by devel/scanprov 64 | aTHXR # added by devel/scanprov 65 | aTHXR_ # added by devel/scanprov 66 | dTHXR # added by devel/scanprov 67 | -------------------------------------------------------------------------------- /parts/inc/strlfuncs: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | ## 3 | ## Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz. 4 | ## Version 2.x, Copyright (C) 2001, Paul Marquess. 5 | ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski. 6 | ## 7 | ## This program is free software; you can redistribute it and/or 8 | ## modify it under the same terms as Perl itself. 9 | ## 10 | ################################################################################ 11 | 12 | =provides 13 | 14 | my_strlcat 15 | my_strlcpy 16 | 17 | =implementation 18 | 19 | #if !defined(my_strlcat) 20 | #if { NEED my_strlcat } 21 | 22 | Size_t 23 | my_strlcat(char *dst, const char *src, Size_t size) 24 | { 25 | Size_t used, length, copy; 26 | 27 | used = strlen(dst); 28 | length = strlen(src); 29 | if (size > 0 && used < size - 1) { 30 | copy = (length >= size - used) ? size - used - 1 : length; 31 | memcpy(dst + used, src, copy); 32 | dst[used + copy] = '\0'; 33 | } 34 | return used + length; 35 | } 36 | #endif 37 | #endif 38 | 39 | #if !defined(my_strlcpy) 40 | #if { NEED my_strlcpy } 41 | 42 | Size_t 43 | my_strlcpy(char *dst, const char *src, Size_t size) 44 | { 45 | Size_t length, copy; 46 | 47 | length = strlen(src); 48 | if (size > 0) { 49 | copy = (length >= size) ? size - 1 : length; 50 | memcpy(dst, src, copy); 51 | dst[copy] = '\0'; 52 | } 53 | return length; 54 | } 55 | 56 | #endif 57 | #endif 58 | 59 | =xsinit 60 | 61 | #define NEED_my_strlcat 62 | #define NEED_my_strlcpy 63 | 64 | =xsubs 65 | 66 | void 67 | my_strlfunc() 68 | PREINIT: 69 | char buf[8]; 70 | int len; 71 | PPCODE: 72 | len = my_strlcpy(buf, "foo", sizeof(buf)); 73 | mXPUSHi(len); 74 | mXPUSHs(newSVpv(buf, 0)); 75 | len = my_strlcat(buf, "bar", sizeof(buf)); 76 | mXPUSHi(len); 77 | mXPUSHs(newSVpv(buf, 0)); 78 | len = my_strlcat(buf, "baz", sizeof(buf)); 79 | mXPUSHi(len); 80 | mXPUSHs(newSVpv(buf, 0)); 81 | len = my_strlcpy(buf, "1234567890", sizeof(buf)); 82 | mXPUSHi(len); 83 | mXPUSHs(newSVpv(buf, 0)); 84 | len = my_strlcpy(buf, "1234", sizeof(buf)); 85 | mXPUSHi(len); 86 | mXPUSHs(newSVpv(buf, 0)); 87 | len = my_strlcat(buf, "567890123456", sizeof(buf)); 88 | mXPUSHi(len); 89 | mXPUSHs(newSVpv(buf, 0)); 90 | XSRETURN(12); 91 | 92 | =tests plan => 13 93 | 94 | my @e = (3, 'foo', 95 | 6, 'foobar', 96 | 9, 'foobarb', 97 | 10, '1234567', 98 | 4, '1234', 99 | 16, '1234567', 100 | ); 101 | my @r = Devel::PPPort::my_strlfunc(); 102 | 103 | ok(@e == @r); 104 | 105 | for (0 .. $#e) { 106 | ok($r[$_], $e[$_]); 107 | } 108 | -------------------------------------------------------------------------------- /devel/devtools.pl: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # devtools.pl -- various utility functions 4 | # 5 | ################################################################################ 6 | # 7 | # Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz. 8 | # Version 2.x, Copyright (C) 2001, Paul Marquess. 9 | # Version 1.x, Copyright (C) 1999, Kenneth Albanowski. 10 | # 11 | # This program is free software; you can redistribute it and/or 12 | # modify it under the same terms as Perl itself. 13 | # 14 | ################################################################################ 15 | 16 | use IO::File; 17 | 18 | eval "use Term::ANSIColor"; 19 | $@ and eval "sub colored { pop; @_ }"; 20 | 21 | my @argvcopy = @ARGV; 22 | 23 | sub verbose 24 | { 25 | if ($opt{verbose}) { 26 | my @out = @_; 27 | s/^(.*)/colored("($0) ", 'bold blue').colored($1, 'blue')/eg for @out; 28 | print STDERR @out; 29 | } 30 | } 31 | 32 | sub ddverbose 33 | { 34 | return $opt{verbose} ? ('--verbose') : (); 35 | } 36 | 37 | sub runtool 38 | { 39 | my $opt = ref $_[0] ? shift @_ : {}; 40 | my($prog, @args) = @_; 41 | my $sysstr = join ' ', map { "'$_'" } $prog, @args; 42 | $sysstr .= " >$opt->{'out'}" if exists $opt->{'out'}; 43 | $sysstr .= " 2>$opt->{'err'}" if exists $opt->{'err'}; 44 | verbose("running $sysstr\n"); 45 | my $rv = system $sysstr; 46 | verbose("$prog => exit code $rv\n"); 47 | return not $rv; 48 | } 49 | 50 | sub runperl 51 | { 52 | my $opt = ref $_[0] ? shift @_ : {}; 53 | runtool($opt, $^X, @_); 54 | } 55 | 56 | sub run 57 | { 58 | my $prog = shift; 59 | my @args = @_; 60 | 61 | runtool({ 'out' => 'tmp.out', 'err' => 'tmp.err' }, $prog, @args); 62 | 63 | my $out = IO::File->new("tmp.out") or die "tmp.out: $!\n"; 64 | my $err = IO::File->new("tmp.err") or die "tmp.err: $!\n"; 65 | 66 | my %rval = ( 67 | status => $? >> 8, 68 | stdout => [<$out>], 69 | stderr => [<$err>], 70 | didnotrun => 0, 71 | ); 72 | 73 | unlink "tmp.out", "tmp.err"; 74 | 75 | $? & 128 and $rval{core} = 1; 76 | $? & 127 and $rval{signal} = $? & 127; 77 | 78 | return \%rval; 79 | } 80 | 81 | sub ident_str 82 | { 83 | return "$^X $0 @argvcopy"; 84 | } 85 | 86 | sub identify 87 | { 88 | verbose(ident_str() . "\n"); 89 | } 90 | 91 | sub ask($) 92 | { 93 | my $q = shift; 94 | my $a; 95 | local $| = 1; 96 | print "\n$q [y/n] "; 97 | do { $a = <>; } while ($a !~ /^\s*([yn])\s*$/i); 98 | return lc $1 eq 'y'; 99 | } 100 | 101 | sub quit_now 102 | { 103 | print "\nSorry, cannot continue.\n\n"; 104 | exit 1; 105 | } 106 | 107 | sub ask_or_quit 108 | { 109 | quit_now unless &ask; 110 | } 111 | 112 | sub eta 113 | { 114 | my($start, $i, $n) = @_; 115 | return "--:--:--" if $i < 3; 116 | my $elapsed = tv_interval($start); 117 | my $h = int($elapsed*($n-$i)/$i); 118 | my $s = $h % 60; $h /= 60; 119 | my $m = $h % 60; $h /= 60; 120 | return sprintf "%02d:%02d:%02d", $h, $m, $s; 121 | } 122 | 123 | 1; 124 | -------------------------------------------------------------------------------- /parts/inc/newCONSTSUB: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | ## 3 | ## Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz. 4 | ## Version 2.x, Copyright (C) 2001, Paul Marquess. 5 | ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski. 6 | ## 7 | ## This program is free software; you can redistribute it and/or 8 | ## modify it under the same terms as Perl itself. 9 | ## 10 | ################################################################################ 11 | 12 | =provides 13 | 14 | newCONSTSUB 15 | 16 | =implementation 17 | 18 | /* Hint: newCONSTSUB 19 | * Returns a CV* as of perl-5.7.1. This return value is not supported 20 | * by Devel::PPPort. 21 | */ 22 | 23 | /* newCONSTSUB from IO.xs is in the core starting with 5.004_63 */ 24 | #if { VERSION < 5.004_63 } && { VERSION != 5.004_05 } 25 | #if { NEED newCONSTSUB } 26 | 27 | /* This is just a trick to avoid a dependency of newCONSTSUB on PL_parser */ 28 | /* (There's no PL_parser in perl < 5.005, so this is completely safe) */ 29 | #define D_PPP_PL_copline PL_copline 30 | 31 | void 32 | newCONSTSUB(HV *stash, const char *name, SV *sv) 33 | { 34 | U32 oldhints = PL_hints; 35 | HV *old_cop_stash = PL_curcop->cop_stash; 36 | HV *old_curstash = PL_curstash; 37 | line_t oldline = PL_curcop->cop_line; 38 | PL_curcop->cop_line = D_PPP_PL_copline; 39 | 40 | PL_hints &= ~HINT_BLOCK_SCOPE; 41 | if (stash) 42 | PL_curstash = PL_curcop->cop_stash = stash; 43 | 44 | newSUB( 45 | 46 | #if { VERSION < 5.003_22 } 47 | start_subparse(), 48 | #elif { VERSION == 5.003_22 } 49 | start_subparse(0), 50 | #else /* 5.003_23 onwards */ 51 | start_subparse(FALSE, 0), 52 | #endif 53 | 54 | newSVOP(OP_CONST, 0, newSVpv((char *) name, 0)), 55 | newSVOP(OP_CONST, 0, &PL_sv_no), /* SvPV(&PL_sv_no) == "" -- GMB */ 56 | newSTATEOP(0, Nullch, newSVOP(OP_CONST, 0, sv)) 57 | ); 58 | 59 | PL_hints = oldhints; 60 | PL_curcop->cop_stash = old_cop_stash; 61 | PL_curstash = old_curstash; 62 | PL_curcop->cop_line = oldline; 63 | } 64 | #endif 65 | #endif 66 | 67 | =xsinit 68 | 69 | #define NEED_newCONSTSUB 70 | 71 | =xsmisc 72 | 73 | void call_newCONSTSUB_1(void) 74 | { 75 | #ifdef PERL_NO_GET_CONTEXT 76 | dTHX; 77 | #endif 78 | newCONSTSUB(gv_stashpv("Devel::PPPort", FALSE), "test_value_1", newSViv(1)); 79 | } 80 | 81 | extern void call_newCONSTSUB_2(void); 82 | extern void call_newCONSTSUB_3(void); 83 | 84 | =xsubs 85 | 86 | void 87 | call_newCONSTSUB_1() 88 | 89 | void 90 | call_newCONSTSUB_2() 91 | 92 | void 93 | call_newCONSTSUB_3() 94 | 95 | =tests plan => 3 96 | 97 | &Devel::PPPort::call_newCONSTSUB_1(); 98 | ok(&Devel::PPPort::test_value_1(), 1); 99 | 100 | &Devel::PPPort::call_newCONSTSUB_2(); 101 | ok(&Devel::PPPort::test_value_2(), 2); 102 | 103 | &Devel::PPPort::call_newCONSTSUB_3(); 104 | ok(&Devel::PPPort::test_value_3(), 3); 105 | -------------------------------------------------------------------------------- /parts/inc/newSVpv: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | ## 3 | ## Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz. 4 | ## Version 2.x, Copyright (C) 2001, Paul Marquess. 5 | ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski. 6 | ## 7 | ## This program is free software; you can redistribute it and/or 8 | ## modify it under the same terms as Perl itself. 9 | ## 10 | ################################################################################ 11 | 12 | =provides 13 | 14 | __UNDEFINED__ 15 | newSVpvn_flags 16 | 17 | =implementation 18 | 19 | #if { VERSION < 5.6.0 } 20 | # define D_PPP_CONSTPV_ARG(x) ((char *) (x)) 21 | #else 22 | # define D_PPP_CONSTPV_ARG(x) (x) 23 | #endif 24 | 25 | __UNDEFINED__ newSVpvn(data,len) ((data) \ 26 | ? ((len) ? newSVpv((data), (len)) : newSVpv("", 0)) \ 27 | : newSV(0)) 28 | 29 | __UNDEFINED__ newSVpvn_utf8(s, len, u) newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0) 30 | 31 | __UNDEFINED__ SVf_UTF8 0 32 | 33 | #ifndef newSVpvn_flags 34 | 35 | #if { NEED newSVpvn_flags } 36 | 37 | SV * 38 | newSVpvn_flags(pTHX_ const char *s, STRLEN len, U32 flags) 39 | { 40 | SV *sv = newSVpvn(D_PPP_CONSTPV_ARG(s), len); 41 | SvFLAGS(sv) |= (flags & SVf_UTF8); 42 | return (flags & SVs_TEMP) ? sv_2mortal(sv) : sv; 43 | } 44 | 45 | #endif 46 | 47 | #endif 48 | 49 | =xsinit 50 | 51 | #define NEED_newSVpvn_flags 52 | 53 | =xsubs 54 | 55 | void 56 | newSVpvn() 57 | PPCODE: 58 | mXPUSHs(newSVpvn("test", 4)); 59 | mXPUSHs(newSVpvn("test", 2)); 60 | mXPUSHs(newSVpvn("test", 0)); 61 | mXPUSHs(newSVpvn(NULL, 2)); 62 | mXPUSHs(newSVpvn(NULL, 0)); 63 | XSRETURN(5); 64 | 65 | void 66 | newSVpvn_flags() 67 | PPCODE: 68 | XPUSHs(newSVpvn_flags("test", 4, SVs_TEMP)); 69 | XPUSHs(newSVpvn_flags("test", 2, SVs_TEMP)); 70 | XPUSHs(newSVpvn_flags("test", 0, SVs_TEMP)); 71 | XPUSHs(newSVpvn_flags(NULL, 2, SVs_TEMP)); 72 | XPUSHs(newSVpvn_flags(NULL, 0, SVs_TEMP)); 73 | XSRETURN(5); 74 | 75 | void 76 | newSVpvn_utf8() 77 | PPCODE: 78 | XPUSHs(newSVpvn_flags("test", 4, SVs_TEMP|SVf_UTF8)); 79 | XSRETURN(1); 80 | 81 | =tests plan => 15 82 | 83 | my @s = &Devel::PPPort::newSVpvn(); 84 | ok(@s == 5); 85 | ok($s[0], "test"); 86 | ok($s[1], "te"); 87 | ok($s[2], ""); 88 | ok(!defined($s[3])); 89 | ok(!defined($s[4])); 90 | 91 | @s = &Devel::PPPort::newSVpvn_flags(); 92 | ok(@s == 5); 93 | ok($s[0], "test"); 94 | ok($s[1], "te"); 95 | ok($s[2], ""); 96 | ok(!defined($s[3])); 97 | ok(!defined($s[4])); 98 | 99 | @s = &Devel::PPPort::newSVpvn_utf8(); 100 | ok(@s == 1); 101 | ok($s[0], "test"); 102 | 103 | if ($] >= 5.008001) { 104 | require utf8; 105 | ok(utf8::is_utf8($s[0])); 106 | } 107 | else { 108 | skip("skip: no is_utf8()", 0); 109 | } 110 | -------------------------------------------------------------------------------- /parts/base/5009003: -------------------------------------------------------------------------------- 1 | 5.009003 2 | Newx # E 3 | Newxc # E 4 | Newxz # E 5 | PL_check # E 6 | SvMAGIC_set # U 7 | SvRV_set # U 8 | SvSTASH_set # U 9 | SvUV_set # U 10 | av_arylen_p # U 11 | ckwarn # U 12 | ckwarn_d # U 13 | csighandler # E (Perl_csighandler) 14 | dAXMARK # E 15 | dMULTICALL # E 16 | doref # U 17 | gv_const_sv # U 18 | gv_stashpvs # U 19 | hv_eiter_p # U 20 | hv_eiter_set # U 21 | hv_fetchs # U 22 | hv_name_set # U 23 | hv_placeholders_get # U 24 | hv_placeholders_set # U 25 | hv_riter_p # U 26 | hv_riter_set # U 27 | is_utf8_string_loclen # U 28 | my_sprintf # U 29 | newGIVENOP # U 30 | newSVhek # U 31 | newSVpvs # U 32 | newSVpvs_share # U 33 | newWHENOP # U 34 | pad_compname_type # U 35 | savepvs # U 36 | sortsv_flags # U 37 | sv_catpvs # U 38 | vverify # U 39 | GvSVn # added by devel/scanprov 40 | HvNAMELEN_get # added by devel/scanprov 41 | HvNAME_get # added by devel/scanprov 42 | PERLIO_FUNCS_CAST # added by devel/scanprov 43 | PERLIO_FUNCS_DECL # added by devel/scanprov 44 | PERL_UNUSED_ARG # added by devel/scanprov 45 | PTR2nat # added by devel/scanprov 46 | STR_WITH_LEN # added by devel/scanprov 47 | SV_CONST_RETURN # added by devel/scanprov 48 | SV_MUTABLE_RETURN # added by devel/scanprov 49 | SV_SMAGIC # added by devel/scanprov 50 | SvPVX_const # added by devel/scanprov 51 | SvPVX_mutable # added by devel/scanprov 52 | SvPV_const # added by devel/scanprov 53 | SvPV_flags_const # added by devel/scanprov 54 | SvPV_flags_const_nolen # added by devel/scanprov 55 | SvPV_flags_mutable # added by devel/scanprov 56 | SvPV_force_flags_mutable # added by devel/scanprov 57 | SvPV_force_flags_nolen # added by devel/scanprov 58 | SvPV_force_mutable # added by devel/scanprov 59 | SvPV_force_nolen # added by devel/scanprov 60 | SvPV_force_nomg_nolen # added by devel/scanprov 61 | SvPV_mutable # added by devel/scanprov 62 | SvPV_nolen_const # added by devel/scanprov 63 | SvPV_nomg_const # added by devel/scanprov 64 | SvPV_nomg_const_nolen # added by devel/scanprov 65 | SvPV_renew # added by devel/scanprov 66 | SvSHARED_HASH # added by devel/scanprov 67 | dVAR # added by devel/scanprov 68 | -------------------------------------------------------------------------------- /mktests.PL: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # mktests.PL -- generate test files for Devel::PPPort 4 | # 5 | ################################################################################ 6 | # 7 | # Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz. 8 | # Version 2.x, Copyright (C) 2001, Paul Marquess. 9 | # Version 1.x, Copyright (C) 1999, Kenneth Albanowski. 10 | # 11 | # This program is free software; you can redistribute it and/or 12 | # modify it under the same terms as Perl itself. 13 | # 14 | ################################################################################ 15 | 16 | use strict; 17 | $^W = 1; 18 | require "parts/ppptools.pl"; 19 | 20 | my $template = do { local $/; }; 21 | 22 | generate_tests(); 23 | 24 | sub generate_tests 25 | { 26 | my @tests; 27 | my $file; 28 | 29 | for $file (all_files_in_dir('parts/inc')) { 30 | my($testfile) = $file =~ /(\w+)\.?$/; # VMS has a trailing dot 31 | $testfile = "t/$testfile.t"; 32 | 33 | my $spec = parse_partspec($file); 34 | my $plan = 0; 35 | 36 | if (exists $spec->{tests}) { 37 | exists $spec->{OPTIONS}{tests} && 38 | exists $spec->{OPTIONS}{tests}{plan} 39 | or die "No plan for tests in $file\n"; 40 | 41 | print "generating $testfile\n"; 42 | 43 | my $tmpl = $template; 44 | $tmpl =~ s/__SOURCE__/$file/mg; 45 | $tmpl =~ s/__PLAN__/$spec->{OPTIONS}{tests}{plan}/mg; 46 | $tmpl =~ s/^__TESTS__$/$spec->{tests}/mg; 47 | 48 | open FH, ">$testfile" or die "$testfile: $!\n"; 49 | print FH $tmpl; 50 | close FH; 51 | 52 | push @tests, $testfile; 53 | } 54 | } 55 | 56 | return @tests; 57 | } 58 | 59 | __DATA__ 60 | ################################################################################ 61 | # 62 | # !!!!! Do NOT edit this file directly! !!!!! 63 | # 64 | # Edit mktests.PL and/or __SOURCE__ instead. 65 | # 66 | # This file was automatically generated from the definition files in the 67 | # parts/inc/ subdirectory by mktests.PL. To learn more about how all this 68 | # works, please read the F file that came with this distribution. 69 | # 70 | ################################################################################ 71 | 72 | BEGIN { 73 | if ($ENV{'PERL_CORE'}) { 74 | chdir 't' if -d 't'; 75 | @INC = ('../lib', '../ext/Devel-PPPort/t') if -d '../lib' && -d '../ext'; 76 | require Config; import Config; 77 | use vars '%Config'; 78 | if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) { 79 | print "1..0 # Skip -- Perl configured without Devel::PPPort module\n"; 80 | exit 0; 81 | } 82 | } 83 | else { 84 | unshift @INC, 't'; 85 | } 86 | 87 | sub load { 88 | eval "use Test"; 89 | require 'testutil.pl' if $@; 90 | } 91 | 92 | if (__PLAN__) { 93 | load(); 94 | plan(tests => __PLAN__); 95 | } 96 | } 97 | 98 | use Devel::PPPort; 99 | use strict; 100 | $^W = 1; 101 | 102 | package Devel::PPPort; 103 | use vars '@ISA'; 104 | require DynaLoader; 105 | @ISA = qw(DynaLoader); 106 | bootstrap Devel::PPPort; 107 | 108 | package main; 109 | 110 | __TESTS__ 111 | -------------------------------------------------------------------------------- /parts/inc/gv: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | ## 3 | ## Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz. 4 | ## Version 2.x, Copyright (C) 2001, Paul Marquess. 5 | ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski. 6 | ## 7 | ## This program is free software; you can redistribute it and/or 8 | ## modify it under the same terms as Perl itself. 9 | ## 10 | ################################################################################ 11 | 12 | =provides 13 | 14 | __UNDEFINED__ 15 | 16 | =implementation 17 | 18 | __UNDEFINED__ GvSVn(gv) GvSV(gv) 19 | __UNDEFINED__ isGV_with_GP(gv) isGV(gv) 20 | __UNDEFINED__ gv_fetchpvn_flags(name, len, flags, svt) gv_fetchpv(name, flags, svt) 21 | __UNDEFINED__ gv_fetchsv(name, flags, svt) gv_fetchpv(SvPV_nolen_const(name), flags, svt) 22 | 23 | __UNDEFINED__ get_cvn_flags(name, namelen, flags) get_cv(name, flags) 24 | 25 | =xsubs 26 | 27 | int 28 | GvSVn() 29 | PREINIT: 30 | GV* gv; 31 | CODE: 32 | RETVAL = 0; 33 | gv = gv_fetchpvs("Devel::PPPort::GvTest", GV_ADDMULTI, SVt_PVGV); 34 | if (GvSVn(gv) != NULL) 35 | { 36 | RETVAL++; 37 | } 38 | OUTPUT: 39 | RETVAL 40 | 41 | int 42 | isGV_with_GP() 43 | PREINIT: 44 | GV* gv; 45 | CODE: 46 | RETVAL = 0; 47 | gv = gv_fetchpvs("Devel::PPPort::GvTest", GV_ADDMULTI, SVt_PVGV); 48 | if (isGV_with_GP(gv)) 49 | { 50 | RETVAL++; 51 | } 52 | if (!isGV(&PL_sv_undef)) 53 | { 54 | RETVAL++; 55 | } 56 | OUTPUT: 57 | RETVAL 58 | 59 | int 60 | get_cvn_flags() 61 | PREINIT: 62 | CV* xv; 63 | CODE: 64 | RETVAL = 0; 65 | xv = get_cvn_flags("Devel::PPPort::foobar", sizeof("Devel::PPPort::foobar")-1, 0); 66 | if(xv == NULL) RETVAL++; 67 | xv = get_cvn_flags("Devel::PPPort::foobar", sizeof("Devel::PPPort::foobar")-1, GV_ADDMULTI); 68 | if(xv && SvTYPE(xv) == SVt_PVCV) RETVAL++; 69 | xv = get_cvn_flags("Devel::PPPort::get_cvn_flags", sizeof("Devel::PPPort::get_cvn_flags")-1, 0); 70 | if(xv && SvTYPE(xv) == SVt_PVCV) RETVAL++; 71 | OUTPUT: 72 | RETVAL 73 | 74 | SV* 75 | gv_fetchpvn_flags() 76 | CODE: 77 | RETVAL = newRV_inc((SV*)gv_fetchpvn_flags("Devel::PPPort::VERSION", sizeof("Devel::PPPort::VERSION")-1, 0, SVt_PV)); 78 | OUTPUT: 79 | RETVAL 80 | 81 | SV* 82 | gv_fetchsv(name) 83 | SV *name 84 | CODE: 85 | RETVAL = newRV_inc((SV*)gv_fetchsv(name, 0, SVt_PV)); 86 | OUTPUT: 87 | RETVAL 88 | 89 | =tests plan => 5 90 | 91 | ok(Devel::PPPort::GvSVn(), 1); 92 | 93 | ok(Devel::PPPort::isGV_with_GP(), 2); 94 | 95 | ok(Devel::PPPort::get_cvn_flags(), 3); 96 | 97 | ok(Devel::PPPort::gv_fetchpvn_flags(), \*Devel::PPPort::VERSION); 98 | 99 | ok(Devel::PPPort::gv_fetchsv("Devel::PPPort::VERSION"), \*Devel::PPPort::VERSION); 100 | -------------------------------------------------------------------------------- /parts/inc/Sv_set: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | ## 3 | ## Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz. 4 | ## Version 2.x, Copyright (C) 2001, Paul Marquess. 5 | ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski. 6 | ## 7 | ## This program is free software; you can redistribute it and/or 8 | ## modify it under the same terms as Perl itself. 9 | ## 10 | ################################################################################ 11 | 12 | =provides 13 | 14 | __UNDEFINED__ 15 | 16 | =implementation 17 | 18 | __UNDEFINED__ SvMAGIC_set(sv, val) \ 19 | STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \ 20 | (((XPVMG*) SvANY(sv))->xmg_magic = (val)); } STMT_END 21 | 22 | #if { VERSION < 5.9.3 } 23 | 24 | __UNDEFINED__ SvPVX_const(sv) ((const char*) (0 + SvPVX(sv))) 25 | __UNDEFINED__ SvPVX_mutable(sv) (0 + SvPVX(sv)) 26 | 27 | __UNDEFINED__ SvRV_set(sv, val) \ 28 | STMT_START { assert(SvTYPE(sv) >= SVt_RV); \ 29 | (((XRV*) SvANY(sv))->xrv_rv = (val)); } STMT_END 30 | 31 | #else 32 | 33 | __UNDEFINED__ SvPVX_const(sv) ((const char*)((sv)->sv_u.svu_pv)) 34 | __UNDEFINED__ SvPVX_mutable(sv) ((sv)->sv_u.svu_pv) 35 | 36 | __UNDEFINED__ SvRV_set(sv, val) \ 37 | STMT_START { assert(SvTYPE(sv) >= SVt_RV); \ 38 | ((sv)->sv_u.svu_rv = (val)); } STMT_END 39 | 40 | #endif 41 | 42 | __UNDEFINED__ SvSTASH_set(sv, val) \ 43 | STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \ 44 | (((XPVMG*) SvANY(sv))->xmg_stash = (val)); } STMT_END 45 | 46 | #if { VERSION < 5.004 } 47 | 48 | __UNDEFINED__ SvUV_set(sv, val) \ 49 | STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \ 50 | (((XPVIV*) SvANY(sv))->xiv_iv = (IV) (val)); } STMT_END 51 | 52 | #else 53 | 54 | __UNDEFINED__ SvUV_set(sv, val) \ 55 | STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \ 56 | (((XPVUV*) SvANY(sv))->xuv_uv = (val)); } STMT_END 57 | 58 | #endif 59 | 60 | =xsubs 61 | 62 | IV 63 | TestSvUV_set(sv, val) 64 | SV *sv 65 | UV val 66 | CODE: 67 | SvUV_set(sv, val); 68 | RETVAL = SvUVX(sv) == val ? 42 : -1; 69 | OUTPUT: 70 | RETVAL 71 | 72 | IV 73 | TestSvPVX_const(sv) 74 | SV *sv 75 | CODE: 76 | RETVAL = strEQ(SvPVX_const(sv), "mhx") ? 43 : -1; 77 | OUTPUT: 78 | RETVAL 79 | 80 | IV 81 | TestSvPVX_mutable(sv) 82 | SV *sv 83 | CODE: 84 | RETVAL = strEQ(SvPVX_mutable(sv), "mhx") ? 44 : -1; 85 | OUTPUT: 86 | RETVAL 87 | 88 | void 89 | TestSvSTASH_set(sv, name) 90 | SV *sv 91 | char *name 92 | CODE: 93 | sv = SvRV(sv); 94 | SvREFCNT_dec(SvSTASH(sv)); 95 | SvSTASH_set(sv, (HV*) SvREFCNT_inc(gv_stashpv(name, 0))); 96 | 97 | =tests plan => 5 98 | 99 | my $foo = 5; 100 | ok(&Devel::PPPort::TestSvUV_set($foo, 12345), 42); 101 | ok(&Devel::PPPort::TestSvPVX_const("mhx"), 43); 102 | ok(&Devel::PPPort::TestSvPVX_mutable("mhx"), 44); 103 | 104 | my $bar = []; 105 | 106 | bless $bar, 'foo'; 107 | ok($bar->x(), 'foobar'); 108 | 109 | Devel::PPPort::TestSvSTASH_set($bar, 'bar'); 110 | ok($bar->x(), 'hacker'); 111 | 112 | package foo; 113 | 114 | sub x { 'foobar' } 115 | 116 | package bar; 117 | 118 | sub x { 'hacker' } 119 | -------------------------------------------------------------------------------- /parts/base/5007002: -------------------------------------------------------------------------------- 1 | 5.007002 2 | SvPV_force_nomg # U 3 | SvPV_nomg # U 4 | calloc # U 5 | dAX # E 6 | dITEMS # E 7 | getcwd_sv # U 8 | grok_number # U 9 | grok_numeric_radix # U 10 | init_tm # U 11 | malloc # U 12 | mfree # U 13 | mini_mktime # U 14 | my_atof2 # U 15 | my_strftime # U 16 | op_null # U 17 | realloc # U 18 | sv_2pv_flags # U 19 | sv_catpvn_flags # U 20 | sv_catpvn_nomg # U 21 | sv_catsv_flags # U 22 | sv_catsv_nomg # U 23 | sv_pvn_force_flags # U 24 | sv_setsv_flags # U 25 | sv_setsv_nomg # U 26 | sv_utf8_upgrade_flags # U 27 | sv_utf8_upgrade_nomg # U 28 | swash_fetch # E (Perl_swash_fetch) 29 | GROK_NUMERIC_RADIX # added by devel/scanprov 30 | IN_LOCALE # added by devel/scanprov 31 | IN_LOCALE_COMPILETIME # added by devel/scanprov 32 | IN_LOCALE_RUNTIME # added by devel/scanprov 33 | IS_NUMBER_GREATER_THAN_UV_MAX # added by devel/scanprov 34 | IS_NUMBER_INFINITY # added by devel/scanprov 35 | IS_NUMBER_IN_UV # added by devel/scanprov 36 | IS_NUMBER_NEG # added by devel/scanprov 37 | IS_NUMBER_NOT_INT # added by devel/scanprov 38 | PERL_MAGIC_arylen # added by devel/scanprov 39 | PERL_MAGIC_backref # added by devel/scanprov 40 | PERL_MAGIC_bm # added by devel/scanprov 41 | PERL_MAGIC_collxfrm # added by devel/scanprov 42 | PERL_MAGIC_dbfile # added by devel/scanprov 43 | PERL_MAGIC_dbline # added by devel/scanprov 44 | PERL_MAGIC_defelem # added by devel/scanprov 45 | PERL_MAGIC_env # added by devel/scanprov 46 | PERL_MAGIC_envelem # added by devel/scanprov 47 | PERL_MAGIC_ext # added by devel/scanprov 48 | PERL_MAGIC_fm # added by devel/scanprov 49 | PERL_MAGIC_isa # added by devel/scanprov 50 | PERL_MAGIC_isaelem # added by devel/scanprov 51 | PERL_MAGIC_nkeys # added by devel/scanprov 52 | PERL_MAGIC_overload_table # added by devel/scanprov 53 | PERL_MAGIC_pos # added by devel/scanprov 54 | PERL_MAGIC_qr # added by devel/scanprov 55 | PERL_MAGIC_regdata # added by devel/scanprov 56 | PERL_MAGIC_regdatum # added by devel/scanprov 57 | PERL_MAGIC_regex_global # added by devel/scanprov 58 | PERL_MAGIC_sig # added by devel/scanprov 59 | PERL_MAGIC_sigelem # added by devel/scanprov 60 | PERL_MAGIC_substr # added by devel/scanprov 61 | PERL_MAGIC_sv # added by devel/scanprov 62 | PERL_MAGIC_taint # added by devel/scanprov 63 | PERL_MAGIC_tied # added by devel/scanprov 64 | PERL_MAGIC_tiedelem # added by devel/scanprov 65 | PERL_MAGIC_tiedscalar # added by devel/scanprov 66 | PERL_MAGIC_uvar # added by devel/scanprov 67 | PERL_MAGIC_vec # added by devel/scanprov 68 | PERL_UNUSED_DECL # added by devel/scanprov 69 | PERL_UNUSED_VAR # added by devel/scanprov 70 | SV_GMAGIC # added by devel/scanprov 71 | SvPV_flags # added by devel/scanprov 72 | SvPV_force_flags # added by devel/scanprov 73 | -------------------------------------------------------------------------------- /parts/inc/uv: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | ## 3 | ## Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz. 4 | ## Version 2.x, Copyright (C) 2001, Paul Marquess. 5 | ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski. 6 | ## 7 | ## This program is free software; you can redistribute it and/or 8 | ## modify it under the same terms as Perl itself. 9 | ## 10 | ################################################################################ 11 | 12 | =provides 13 | 14 | __UNDEFINED__ 15 | SvUOK 16 | 17 | =implementation 18 | 19 | __UNDEFINED__ sv_setuv(sv, uv) \ 20 | STMT_START { \ 21 | UV TeMpUv = uv; \ 22 | if (TeMpUv <= IV_MAX) \ 23 | sv_setiv(sv, TeMpUv); \ 24 | else \ 25 | sv_setnv(sv, (double)TeMpUv); \ 26 | } STMT_END 27 | 28 | __UNDEFINED__ newSVuv(uv) ((uv) <= IV_MAX ? newSViv((IV)uv) : newSVnv((NV)uv)) 29 | 30 | __UNDEFINED__ sv_2uv(sv) ((PL_Sv = (sv)), (UV) (SvNOK(PL_Sv) ? SvNV(PL_Sv) : sv_2nv(PL_Sv))) 31 | __UNDEFINED__ SvUVX(sv) ((UV)SvIVX(sv)) 32 | __UNDEFINED__ SvUVXx(sv) SvUVX(sv) 33 | __UNDEFINED__ SvUV(sv) (SvIOK(sv) ? SvUVX(sv) : sv_2uv(sv)) 34 | __UNDEFINED__ SvUVx(sv) ((PL_Sv = (sv)), SvUV(PL_Sv)) 35 | 36 | /* Hint: sv_uv 37 | * Always use the SvUVx() macro instead of sv_uv(). 38 | */ 39 | __UNDEFINED__ sv_uv(sv) SvUVx(sv) 40 | 41 | #if !defined(SvUOK) && defined(SvIOK_UV) 42 | # define SvUOK(sv) SvIOK_UV(sv) 43 | #endif 44 | 45 | __UNDEFINED__ XST_mUV(i,v) (ST(i) = sv_2mortal(newSVuv(v)) ) 46 | __UNDEFINED__ XSRETURN_UV(v) STMT_START { XST_mUV(0,v); XSRETURN(1); } STMT_END 47 | 48 | __UNDEFINED__ PUSHu(u) STMT_START { sv_setuv(TARG, (UV)(u)); PUSHTARG; } STMT_END 49 | __UNDEFINED__ XPUSHu(u) STMT_START { sv_setuv(TARG, (UV)(u)); XPUSHTARG; } STMT_END 50 | 51 | =xsubs 52 | 53 | SV * 54 | sv_setuv(uv) 55 | UV uv 56 | CODE: 57 | RETVAL = newSViv(1); 58 | sv_setuv(RETVAL, uv); 59 | OUTPUT: 60 | RETVAL 61 | 62 | SV * 63 | newSVuv(uv) 64 | UV uv 65 | CODE: 66 | RETVAL = newSVuv(uv); 67 | OUTPUT: 68 | RETVAL 69 | 70 | UV 71 | sv_2uv(sv) 72 | SV *sv 73 | CODE: 74 | RETVAL = sv_2uv(sv); 75 | OUTPUT: 76 | RETVAL 77 | 78 | UV 79 | SvUVx(sv) 80 | SV *sv 81 | CODE: 82 | sv--; 83 | RETVAL = SvUVx(++sv); 84 | OUTPUT: 85 | RETVAL 86 | 87 | void 88 | XSRETURN_UV() 89 | PPCODE: 90 | XSRETURN_UV(42); 91 | 92 | void 93 | PUSHu() 94 | PREINIT: 95 | dTARG; 96 | PPCODE: 97 | TARG = sv_newmortal(); 98 | EXTEND(SP, 1); 99 | PUSHu(42); 100 | XSRETURN(1); 101 | 102 | void 103 | XPUSHu() 104 | PREINIT: 105 | dTARG; 106 | PPCODE: 107 | TARG = sv_newmortal(); 108 | XPUSHu(43); 109 | XSRETURN(1); 110 | 111 | =tests plan => 10 112 | 113 | ok(&Devel::PPPort::sv_setuv(42), 42); 114 | ok(&Devel::PPPort::newSVuv(123), 123); 115 | ok(&Devel::PPPort::sv_2uv("4711"), 4711); 116 | ok(&Devel::PPPort::sv_2uv("1735928559"), 1735928559); 117 | ok(&Devel::PPPort::SvUVx("1735928559"), 1735928559); 118 | ok(&Devel::PPPort::SvUVx(1735928559), 1735928559); 119 | ok(&Devel::PPPort::SvUVx(0xdeadbeef), 0xdeadbeef); 120 | ok(&Devel::PPPort::XSRETURN_UV(), 42); 121 | ok(&Devel::PPPort::PUSHu(), 42); 122 | ok(&Devel::PPPort::XPUSHu(), 43); 123 | -------------------------------------------------------------------------------- /parts/inc/mPUSH: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | ## 3 | ## Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz. 4 | ## Version 2.x, Copyright (C) 2001, Paul Marquess. 5 | ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski. 6 | ## 7 | ## This program is free software; you can redistribute it and/or 8 | ## modify it under the same terms as Perl itself. 9 | ## 10 | ################################################################################ 11 | 12 | =provides 13 | 14 | __UNDEFINED__ 15 | 16 | =implementation 17 | 18 | __UNDEFINED__ mPUSHs(s) PUSHs(sv_2mortal(s)) 19 | __UNDEFINED__ PUSHmortal PUSHs(sv_newmortal()) 20 | __UNDEFINED__ mPUSHp(p,l) sv_setpvn(PUSHmortal, (p), (l)) 21 | __UNDEFINED__ mPUSHn(n) sv_setnv(PUSHmortal, (NV)(n)) 22 | __UNDEFINED__ mPUSHi(i) sv_setiv(PUSHmortal, (IV)(i)) 23 | __UNDEFINED__ mPUSHu(u) sv_setuv(PUSHmortal, (UV)(u)) 24 | 25 | __UNDEFINED__ mXPUSHs(s) XPUSHs(sv_2mortal(s)) 26 | __UNDEFINED__ XPUSHmortal XPUSHs(sv_newmortal()) 27 | __UNDEFINED__ mXPUSHp(p,l) STMT_START { EXTEND(sp,1); sv_setpvn(PUSHmortal, (p), (l)); } STMT_END 28 | __UNDEFINED__ mXPUSHn(n) STMT_START { EXTEND(sp,1); sv_setnv(PUSHmortal, (NV)(n)); } STMT_END 29 | __UNDEFINED__ mXPUSHi(i) STMT_START { EXTEND(sp,1); sv_setiv(PUSHmortal, (IV)(i)); } STMT_END 30 | __UNDEFINED__ mXPUSHu(u) STMT_START { EXTEND(sp,1); sv_setuv(PUSHmortal, (UV)(u)); } STMT_END 31 | 32 | =xsubs 33 | 34 | void 35 | mPUSHs() 36 | PPCODE: 37 | EXTEND(SP, 3); 38 | mPUSHs(newSVpv("foo", 0)); 39 | mPUSHs(newSVpv("bar13", 3)); 40 | mPUSHs(newSViv(42)); 41 | XSRETURN(3); 42 | 43 | void 44 | mPUSHp() 45 | PPCODE: 46 | EXTEND(SP, 3); 47 | mPUSHp("one", 3); 48 | mPUSHp("two", 3); 49 | mPUSHp("three", 5); 50 | XSRETURN(3); 51 | 52 | void 53 | mPUSHn() 54 | PPCODE: 55 | EXTEND(SP, 3); 56 | mPUSHn(0.5); 57 | mPUSHn(-0.25); 58 | mPUSHn(0.125); 59 | XSRETURN(3); 60 | 61 | void 62 | mPUSHi() 63 | PPCODE: 64 | EXTEND(SP, 3); 65 | mPUSHi(-1); 66 | mPUSHi(2); 67 | mPUSHi(-3); 68 | XSRETURN(3); 69 | 70 | void 71 | mPUSHu() 72 | PPCODE: 73 | EXTEND(SP, 3); 74 | mPUSHu(1); 75 | mPUSHu(2); 76 | mPUSHu(3); 77 | XSRETURN(3); 78 | 79 | void 80 | mXPUSHs() 81 | PPCODE: 82 | mXPUSHs(newSVpv("foo", 0)); 83 | mXPUSHs(newSVpv("bar13", 3)); 84 | mXPUSHs(newSViv(42)); 85 | XSRETURN(3); 86 | 87 | void 88 | mXPUSHp() 89 | PPCODE: 90 | mXPUSHp("one", 3); 91 | mXPUSHp("two", 3); 92 | mXPUSHp("three", 5); 93 | XSRETURN(3); 94 | 95 | void 96 | mXPUSHn() 97 | PPCODE: 98 | mXPUSHn(0.5); 99 | mXPUSHn(-0.25); 100 | mXPUSHn(0.125); 101 | XSRETURN(3); 102 | 103 | void 104 | mXPUSHi() 105 | PPCODE: 106 | mXPUSHi(-1); 107 | mXPUSHi(2); 108 | mXPUSHi(-3); 109 | XSRETURN(3); 110 | 111 | void 112 | mXPUSHu() 113 | PPCODE: 114 | mXPUSHu(1); 115 | mXPUSHu(2); 116 | mXPUSHu(3); 117 | XSRETURN(3); 118 | 119 | =tests plan => 10 120 | 121 | ok(join(':', &Devel::PPPort::mPUSHs()), "foo:bar:42"); 122 | ok(join(':', &Devel::PPPort::mPUSHp()), "one:two:three"); 123 | ok(join(':', &Devel::PPPort::mPUSHn()), "0.5:-0.25:0.125"); 124 | ok(join(':', &Devel::PPPort::mPUSHi()), "-1:2:-3"); 125 | ok(join(':', &Devel::PPPort::mPUSHu()), "1:2:3"); 126 | 127 | ok(join(':', &Devel::PPPort::mXPUSHs()), "foo:bar:42"); 128 | ok(join(':', &Devel::PPPort::mXPUSHp()), "one:two:three"); 129 | ok(join(':', &Devel::PPPort::mXPUSHn()), "0.5:-0.25:0.125"); 130 | ok(join(':', &Devel::PPPort::mXPUSHi()), "-1:2:-3"); 131 | ok(join(':', &Devel::PPPort::mXPUSHu()), "1:2:3"); 132 | -------------------------------------------------------------------------------- /parts/base/5007003: -------------------------------------------------------------------------------- 1 | 5.007003 2 | OP_DESC # U 3 | OP_NAME # U 4 | PL_peepp # E 5 | PerlIO_clearerr # U (PerlIO_clearerr) 6 | PerlIO_close # U (PerlIO_close) 7 | PerlIO_eof # U (PerlIO_eof) 8 | PerlIO_error # U (PerlIO_error) 9 | PerlIO_fileno # U (PerlIO_fileno) 10 | PerlIO_fill # U (PerlIO_fill) 11 | PerlIO_flush # U (PerlIO_flush) 12 | PerlIO_get_base # U (PerlIO_get_base) 13 | PerlIO_get_bufsiz # U (PerlIO_get_bufsiz) 14 | PerlIO_get_cnt # U (PerlIO_get_cnt) 15 | PerlIO_get_ptr # U (PerlIO_get_ptr) 16 | PerlIO_read # U (PerlIO_read) 17 | PerlIO_seek # U (PerlIO_seek) 18 | PerlIO_set_cnt # U (PerlIO_set_cnt) 19 | PerlIO_set_ptrcnt # U (PerlIO_set_ptrcnt) 20 | PerlIO_setlinebuf # U (PerlIO_setlinebuf) 21 | PerlIO_stderr # U (PerlIO_stderr) 22 | PerlIO_stdin # U (PerlIO_stdin) 23 | PerlIO_stdout # U (PerlIO_stdout) 24 | PerlIO_tell # U (PerlIO_tell) 25 | PerlIO_unread # U (PerlIO_unread) 26 | PerlIO_write # U (PerlIO_write) 27 | SvLOCK # U 28 | SvSHARE # U 29 | SvUNLOCK # U 30 | atfork_lock # U 31 | atfork_unlock # U 32 | custom_op_desc # U 33 | custom_op_name # U 34 | deb # U 35 | debstack # U 36 | debstackptrs # U 37 | grok_bin # U 38 | grok_hex # U 39 | grok_oct # U 40 | gv_fetchmeth_autoload # U 41 | ibcmp_utf8 # U 42 | my_fork # U 43 | my_socketpair # U 44 | pack_cat # U 45 | perl_destruct # E (perl_destruct) 46 | pv_uni_display # U 47 | save_shared_pvref # U 48 | savesharedpv # U 49 | sortsv # U 50 | sv_magicext # U 51 | sv_nolocking # U 52 | sv_nosharing # U 53 | sv_pvn_nomg # U 54 | sv_recode_to_utf8 # U 55 | sv_uni_display # U 56 | toFOLD_uni # U 57 | toLOWER_uni # A 58 | toTITLE_uni # A 59 | toUPPER_uni # A 60 | to_uni_fold # U 61 | to_uni_lower # E (Perl_to_uni_lower) 62 | to_uni_title # E (Perl_to_uni_title) 63 | to_uni_upper # E (Perl_to_uni_upper) 64 | to_utf8_case # U 65 | unpack_str # U 66 | uvchr_to_utf8_flags # U 67 | uvuni_to_utf8_flags # U 68 | vdeb # U 69 | IS_NUMBER_NAN # added by devel/scanprov 70 | MY_CXT # added by devel/scanprov 71 | MY_CXT_INIT # added by devel/scanprov 72 | PERL_MAGIC_shared # added by devel/scanprov 73 | PERL_MAGIC_shared_scalar # added by devel/scanprov 74 | PERL_MAGIC_uvar_elem # added by devel/scanprov 75 | PERL_SCAN_ALLOW_UNDERSCORES # added by devel/scanprov 76 | PERL_SCAN_DISALLOW_PREFIX # added by devel/scanprov 77 | PERL_SCAN_GREATER_THAN_UV_MAX # added by devel/scanprov 78 | START_MY_CXT # added by devel/scanprov 79 | _aMY_CXT # added by devel/scanprov 80 | _pMY_CXT # added by devel/scanprov 81 | aMY_CXT # added by devel/scanprov 82 | aMY_CXT_ # added by devel/scanprov 83 | dMY_CXT # added by devel/scanprov 84 | dMY_CXT_SV # added by devel/scanprov 85 | pMY_CXT # added by devel/scanprov 86 | pMY_CXT_ # added by devel/scanprov 87 | packWARN # added by devel/scanprov 88 | -------------------------------------------------------------------------------- /parts/inc/SvREFCNT: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | ## 3 | ## Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz. 4 | ## Version 2.x, Copyright (C) 2001, Paul Marquess. 5 | ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski. 6 | ## 7 | ## This program is free software; you can redistribute it and/or 8 | ## modify it under the same terms as Perl itself. 9 | ## 10 | ################################################################################ 11 | 12 | =provides 13 | 14 | SvREFCNT_inc 15 | SvREFCNT_inc_simple 16 | SvREFCNT_inc_NN 17 | SvREFCNT_inc_void 18 | __UNDEFINED__ 19 | 20 | =implementation 21 | 22 | #ifndef SvREFCNT_inc 23 | # ifdef PERL_USE_GCC_BRACE_GROUPS 24 | # define SvREFCNT_inc(sv) \ 25 | ({ \ 26 | SV * const _sv = (SV*)(sv); \ 27 | if (_sv) \ 28 | (SvREFCNT(_sv))++; \ 29 | _sv; \ 30 | }) 31 | # else 32 | # define SvREFCNT_inc(sv) \ 33 | ((PL_Sv=(SV*)(sv)) ? (++(SvREFCNT(PL_Sv)),PL_Sv) : NULL) 34 | # endif 35 | #endif 36 | 37 | #ifndef SvREFCNT_inc_simple 38 | # ifdef PERL_USE_GCC_BRACE_GROUPS 39 | # define SvREFCNT_inc_simple(sv) \ 40 | ({ \ 41 | if (sv) \ 42 | (SvREFCNT(sv))++; \ 43 | (SV *)(sv); \ 44 | }) 45 | # else 46 | # define SvREFCNT_inc_simple(sv) \ 47 | ((sv) ? (SvREFCNT(sv)++,(SV*)(sv)) : NULL) 48 | # endif 49 | #endif 50 | 51 | #ifndef SvREFCNT_inc_NN 52 | # ifdef PERL_USE_GCC_BRACE_GROUPS 53 | # define SvREFCNT_inc_NN(sv) \ 54 | ({ \ 55 | SV * const _sv = (SV*)(sv); \ 56 | SvREFCNT(_sv)++; \ 57 | _sv; \ 58 | }) 59 | # else 60 | # define SvREFCNT_inc_NN(sv) \ 61 | (PL_Sv=(SV*)(sv),++(SvREFCNT(PL_Sv)),PL_Sv) 62 | # endif 63 | #endif 64 | 65 | #ifndef SvREFCNT_inc_void 66 | # ifdef PERL_USE_GCC_BRACE_GROUPS 67 | # define SvREFCNT_inc_void(sv) \ 68 | ({ \ 69 | SV * const _sv = (SV*)(sv); \ 70 | if (_sv) \ 71 | (void)(SvREFCNT(_sv)++); \ 72 | }) 73 | # else 74 | # define SvREFCNT_inc_void(sv) \ 75 | (void)((PL_Sv=(SV*)(sv)) ? ++(SvREFCNT(PL_Sv)) : 0) 76 | # endif 77 | #endif 78 | 79 | __UNDEFINED__ SvREFCNT_inc_simple_void(sv) STMT_START { if (sv) SvREFCNT(sv)++; } STMT_END 80 | __UNDEFINED__ SvREFCNT_inc_simple_NN(sv) (++SvREFCNT(sv), (SV*)(sv)) 81 | __UNDEFINED__ SvREFCNT_inc_void_NN(sv) (void)(++SvREFCNT((SV*)(sv))) 82 | __UNDEFINED__ SvREFCNT_inc_simple_void_NN(sv) (void)(++SvREFCNT((SV*)(sv))) 83 | 84 | =xsubs 85 | 86 | void 87 | SvREFCNT() 88 | PREINIT: 89 | SV *sv, *svr; 90 | PPCODE: 91 | sv = newSV(0); 92 | mXPUSHi(SvREFCNT(sv) == 1); 93 | svr = SvREFCNT_inc(sv); 94 | mXPUSHi(sv == svr); 95 | mXPUSHi(SvREFCNT(sv) == 2); 96 | svr = SvREFCNT_inc_simple(sv); 97 | mXPUSHi(sv == svr); 98 | mXPUSHi(SvREFCNT(sv) == 3); 99 | svr = SvREFCNT_inc_NN(sv); 100 | mXPUSHi(sv == svr); 101 | mXPUSHi(SvREFCNT(sv) == 4); 102 | svr = SvREFCNT_inc_simple_NN(sv); 103 | mXPUSHi(sv == svr); 104 | mXPUSHi(SvREFCNT(sv) == 5); 105 | SvREFCNT_inc_void(sv); 106 | mXPUSHi(SvREFCNT(sv) == 6); 107 | SvREFCNT_inc_simple_void(sv); 108 | mXPUSHi(SvREFCNT(sv) == 7); 109 | SvREFCNT_inc_void_NN(sv); 110 | mXPUSHi(SvREFCNT(sv) == 8); 111 | SvREFCNT_inc_simple_void_NN(sv); 112 | mXPUSHi(SvREFCNT(sv) == 9); 113 | while (SvREFCNT(sv) > 1) 114 | SvREFCNT_dec(sv); 115 | mXPUSHi(SvREFCNT(sv) == 1); 116 | SvREFCNT_dec(sv); 117 | XSRETURN(14); 118 | 119 | =tests plan => 14 120 | 121 | for (Devel::PPPort::SvREFCNT()) { 122 | ok(defined $_ and $_); 123 | } 124 | -------------------------------------------------------------------------------- /PPPort_xs.PL: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # PPPort_xs.PL -- generate RealPPPort.xs 4 | # 5 | ################################################################################ 6 | # 7 | # Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz. 8 | # Version 2.x, Copyright (C) 2001, Paul Marquess. 9 | # Version 1.x, Copyright (C) 1999, Kenneth Albanowski. 10 | # 11 | # This program is free software; you can redistribute it and/or 12 | # modify it under the same terms as Perl itself. 13 | # 14 | ################################################################################ 15 | 16 | use strict; 17 | $^W = 1; 18 | require "parts/ppptools.pl"; 19 | 20 | my %SECTION = ( 21 | xshead => { code => '', header => "/* ---- code from __FILE__ ---- */" }, 22 | xsinit => { code => '', header => "/* ---- code from __FILE__ ---- */" }, 23 | xsmisc => { code => '', header => "/* ---- code from __FILE__ ---- */" }, 24 | xsboot => { code => '', header => "/* ---- code from __FILE__ ---- */", indent => "\t" }, 25 | xsubs => { code => '', header => <{$sec}) { 47 | $msg++ or print "adding XS code from $file\n"; 48 | if (exists $SECTION{$sec}{header}) { 49 | my $header = $SECTION{$sec}{header}; 50 | $header =~ s/__FILE__/$file/g; 51 | $SECTION{$sec}{code} .= $header . "\n"; 52 | } 53 | $SECTION{$sec}{code} .= $spec->{$sec} . "\n"; 54 | } 55 | } 56 | } 57 | 58 | my $data = do { local $/; }; 59 | 60 | for $sec (keys %SECTION) { 61 | my $code = $SECTION{$sec}{code}; 62 | if (exists $SECTION{$sec}{indent}) { 63 | $code =~ s/^/$SECTION{$sec}{indent}/gm; 64 | } 65 | $code =~ s/[\r\n]+$//; 66 | $data =~ s/^__\U$sec\E__$/$code/m; 67 | } 68 | 69 | open FH, ">RealPPPort.xs" or die "RealPPPort.xs: $!\n"; 70 | print FH $data; 71 | close FH; 72 | 73 | exit 0; 74 | 75 | __DATA__ 76 | /******************************************************************************* 77 | * 78 | * !!!!! Do NOT edit this file directly! -- Edit PPPort_xs.PL instead. !!!!! 79 | * 80 | * This file was automatically generated from the definition files in the 81 | * parts/inc/ subdirectory by PPPort_xs.PL. To learn more about how all this 82 | * works, please read the F file that came with this distribution. 83 | * 84 | ******************************************************************************** 85 | * 86 | * Perl/Pollution/Portability 87 | * 88 | ******************************************************************************** 89 | * 90 | * Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz. 91 | * Version 2.x, Copyright (C) 2001, Paul Marquess. 92 | * Version 1.x, Copyright (C) 1999, Kenneth Albanowski. 93 | * 94 | * This program is free software; you can redistribute it and/or 95 | * modify it under the same terms as Perl itself. 96 | * 97 | *******************************************************************************/ 98 | 99 | /* ========== BEGIN XSHEAD ================================================== */ 100 | 101 | __XSHEAD__ 102 | 103 | /* =========== END XSHEAD =================================================== */ 104 | 105 | #include "EXTERN.h" 106 | #include "perl.h" 107 | #include "XSUB.h" 108 | 109 | /* ========== BEGIN XSINIT ================================================== */ 110 | 111 | __XSINIT__ 112 | 113 | /* =========== END XSINIT =================================================== */ 114 | 115 | #include "ppport.h" 116 | 117 | /* ========== BEGIN XSMISC ================================================== */ 118 | 119 | __XSMISC__ 120 | 121 | /* =========== END XSMISC =================================================== */ 122 | 123 | MODULE = Devel::PPPort PACKAGE = Devel::PPPort 124 | 125 | BOOT: 126 | __XSBOOT__ 127 | 128 | __XSUBS__ 129 | -------------------------------------------------------------------------------- /Makefile.PL: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # Makefile.PL -- generate Makefile 4 | # 5 | ################################################################################ 6 | # 7 | # Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz. 8 | # Version 2.x, Copyright (C) 2001, Paul Marquess. 9 | # Version 1.x, Copyright (C) 1999, Kenneth Albanowski. 10 | # 11 | # This program is free software; you can redistribute it and/or 12 | # modify it under the same terms as Perl itself. 13 | # 14 | ################################################################################ 15 | 16 | require 5.003; 17 | 18 | use strict; 19 | use ExtUtils::MakeMaker; 20 | 21 | use vars '%opt'; # needs to be global, and we can't use 'our' 22 | 23 | unless ($ENV{'PERL_CORE'}) { 24 | $ENV{'PERL_CORE'} = 1 if grep { $_ eq 'PERL_CORE=1' } @ARGV; 25 | } 26 | 27 | @ARGV = map { /^--with-(apicheck)$/ && ++$opt{$1} ? () : $_ } @ARGV; 28 | 29 | WriteMakefile( 30 | NAME => 'Devel::PPPort', 31 | VERSION_FROM => 'PPPort_pm.PL', 32 | PM => { 'PPPort.pm' => '$(INST_LIBDIR)/PPPort.pm' }, 33 | H => [ qw(ppport.h) ], 34 | OBJECT => 'RealPPPort$(OBJ_EXT) $(O_FILES)', 35 | XSPROTOARG => '-noprototypes', 36 | CONFIGURE => \&configure, 37 | META_MERGE => { 38 | 'meta-spec' => { 39 | version => 2, 40 | }, 41 | resources => { 42 | bugtracker => { 43 | web => 'https://github.com/mhx/Devel-PPPort/issues/', 44 | }, 45 | repository => { 46 | type => 'git', 47 | url => 'git://github.com/mhx/Devel-PPPort.git', 48 | web => 'https://github.com/mhx/Devel-PPPort/', 49 | }, 50 | }, 51 | }, 52 | ); 53 | 54 | sub configure 55 | { 56 | my @clean = qw{ $(H_FILES) RealPPPort.xs RealPPPort.c }; 57 | my %depend = ('$(OBJECT)' => '$(H_FILES)'); 58 | my @C_FILES = qw{ module2.c module3.c }, 59 | my %PL_FILES = ( 60 | 'ppport_h.PL' => 'ppport.h', 61 | 'PPPort_pm.PL' => 'PPPort.pm', 62 | 'PPPort_xs.PL' => 'RealPPPort.xs', 63 | ); 64 | my @moreopts; 65 | 66 | if (eval $ExtUtils::MakeMaker::VERSION >= 6) { 67 | push @moreopts, AUTHOR => 'Marcus Holland-Moritz '; 68 | if (-f 'PPPort.pm') { 69 | push @moreopts, ABSTRACT_FROM => 'PPPort.pm'; 70 | } 71 | } 72 | 73 | if (eval $ExtUtils::MakeMaker::VERSION >= 6.30_01) { 74 | print "Setting license tag...\n"; 75 | push @moreopts, LICENSE => 'perl'; 76 | } 77 | 78 | if ($ENV{'PERL_CORE'}) { 79 | # Pods will be built by installman. 80 | push @clean, 'PPPort.pm'; 81 | } 82 | else { 83 | # Devel::PPPort is in the core since 5.7.3 84 | # 5.11.0+ has site before perl 85 | push @moreopts, INSTALLDIRS => ( 86 | ($] >= 5.007003 and $] < 5.011) 87 | ? 'perl' 88 | : 'site' 89 | ); 90 | } 91 | 92 | if ($opt{'apicheck'}) { 93 | $PL_FILES{'apicheck_c.PL'} = 'apicheck.c'; 94 | push @C_FILES, qw{ apicheck.c }; 95 | push @clean, qw{ apicheck.c apicheck.i }; 96 | $depend{'apicheck.i'} = 'ppport.h'; 97 | } 98 | 99 | return { 100 | C => \@C_FILES, 101 | XS => { 'RealPPPort.xs' => 'RealPPPort.c' }, 102 | PL_FILES => \%PL_FILES, 103 | depend => \%depend, 104 | clean => { FILES => "@clean" }, 105 | @moreopts, 106 | }; 107 | } 108 | 109 | sub MY::postamble 110 | { 111 | package MY; 112 | my $post = shift->SUPER::postamble(@_); 113 | $post .= <<'POSTAMBLE'; 114 | 115 | purge_all: realclean 116 | @$(RM_F) PPPort.pm t/*.t 117 | 118 | regen_pm: 119 | $(PERL) -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) PPPort_pm.PL 120 | 121 | regen_xs: 122 | $(PERL) -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) PPPort_xs.PL 123 | 124 | regen_tests: 125 | $(PERL) -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) mktests.PL 126 | 127 | regen_h: 128 | $(PERL) -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) ppport_h.PL 129 | 130 | regen: regen_pm regen_xs regen_tests regen_h 131 | 132 | POSTAMBLE 133 | return $post; 134 | } 135 | 136 | sub MY::c_o 137 | { 138 | package MY; 139 | my $co = shift->SUPER::c_o(@_); 140 | 141 | if ($::opt{'apicheck'} && $co !~ /^\.c\.i:/m) { 142 | print "Adding custom rule for preprocessed apicheck file...\n"; 143 | 144 | $co .= <<'CO' 145 | 146 | .SUFFIXES: .i 147 | 148 | .c.i: 149 | $(CCCMD) -E -I$(PERL_INC) $(DEFINE) $*.c > $*.i 150 | CO 151 | } 152 | 153 | return $co; 154 | } 155 | -------------------------------------------------------------------------------- /devel/regenerate: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl -w 2 | ################################################################################ 3 | # 4 | # regenerate -- regenerate baseline and todo files 5 | # 6 | ################################################################################ 7 | # 8 | # Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz. 9 | # Version 2.x, Copyright (C) 2001, Paul Marquess. 10 | # Version 1.x, Copyright (C) 1999, Kenneth Albanowski. 11 | # 12 | # This program is free software; you can redistribute it and/or 13 | # modify it under the same terms as Perl itself. 14 | # 15 | ################################################################################ 16 | 17 | use strict; 18 | use File::Path; 19 | use File::Copy; 20 | use Getopt::Long; 21 | use Pod::Usage; 22 | 23 | require 'devel/devtools.pl'; 24 | 25 | our %opt = ( 26 | check => 1, 27 | verbose => 0, 28 | ); 29 | 30 | GetOptions(\%opt, qw( check! verbose install=s blead=s blead-version=s )) or die pod2usage(); 31 | 32 | identify(); 33 | 34 | unless (-e 'parts/embed.fnc' and -e 'parts/apidoc.fnc') { 35 | print "\nOooops, $0 must be run from the Devel::PPPort root directory.\n"; 36 | quit_now(); 37 | } 38 | 39 | ask_or_quit("Are you sure you have updated parts/embed.fnc and parts/apidoc.fnc?"); 40 | 41 | my %files = map { ($_ => [glob "parts/$_/5*"]) } qw( base todo ); 42 | 43 | my(@notwr, @wr); 44 | for my $f (map @$_, values %files) { 45 | push @{-w $f ? \@wr : \@notwr}, $f; 46 | } 47 | 48 | if (@notwr) { 49 | if (@wr) { 50 | print "\nThe following files are not writable:\n\n"; 51 | print " $_\n" for @notwr; 52 | print "\nAre you sure you have checked out these files?\n"; 53 | } 54 | else { 55 | print "\nAll baseline / todo file are not writable.\n"; 56 | ask_or_quit("Do you want to try to check out these files?"); 57 | unless (runtool("wco", "-l", "-t", "locked by $0", @notwr)) { 58 | print "\nSomething went wrong while checking out the files.\n"; 59 | quit_now(); 60 | } 61 | } 62 | } 63 | 64 | for my $dir (qw( base todo )) { 65 | my $cur = "parts/$dir"; 66 | my $old = "$cur-old"; 67 | if (-e $old) { 68 | ask_or_quit("Do you want me to remove the old $old directory?"); 69 | rmtree($old); 70 | } 71 | mkdir $old; 72 | print "\nBacking up $cur in $old.\n"; 73 | for my $src (@{$files{$dir}}) { 74 | my $dst = $src; 75 | $dst =~ s/\Q$cur/$old/ or die "Ooops!"; 76 | move($src, $dst) or die "Moving $src to $dst failed: $!\n"; 77 | } 78 | } 79 | 80 | my @perlargs; 81 | push @perlargs, "--install=$opt{install}" if exists $opt{install}; 82 | push @perlargs, "--blead=$opt{blead}" if exists $opt{blead}; 83 | 84 | my $T0 = time; 85 | my @args = ddverbose(); 86 | push @args, '--nocheck' unless $opt{check}; 87 | push @args, "--blead-version=$opt{'blead-version'}" if exists $opt{'blead-version'}; 88 | push @args, @perlargs; 89 | 90 | print "\nBuilding baseline files...\n\n"; 91 | 92 | unless (runperl('devel/mktodo', '--base', @args)) { 93 | print "\nSomething went wrong while building the baseline files.\n"; 94 | quit_now(); 95 | } 96 | 97 | print "\nMoving baseline files...\n\n"; 98 | 99 | for my $src (glob 'parts/todo/5*') { 100 | my $dst = $src; 101 | $dst =~ s/todo/base/ or die "Ooops!"; 102 | move($src, $dst) or die "Moving $src to $dst failed: $!\n"; 103 | } 104 | 105 | print "\nBuilding todo files...\n\n"; 106 | 107 | unless (runperl('devel/mktodo', @args)) { 108 | print "\nSomething went wrong while building the baseline files.\n"; 109 | quit_now(); 110 | } 111 | 112 | print "\nAdding remaining baseline info...\n\n"; 113 | 114 | unless (runperl('Makefile.PL') and 115 | runtool('make') and 116 | runperl('devel/scanprov', '--mode=write', @perlargs)) { 117 | print "\nSomething went wrong while adding the baseline info.\n"; 118 | quit_now(); 119 | } 120 | 121 | my($wall, $usr, $sys, $cusr, $csys) = (time - $T0, times); 122 | my $cpu = sprintf "%.2f", $usr + $sys + $cusr + $csys; 123 | $usr = sprintf "%.2f", $usr + $cusr; 124 | $sys = sprintf "%.2f", $sys + $csys; 125 | 126 | print < and L. 159 | 160 | =cut 161 | -------------------------------------------------------------------------------- /parts/inc/pvs: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | ## 3 | ## Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz. 4 | ## Version 2.x, Copyright (C) 2001, Paul Marquess. 5 | ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski. 6 | ## 7 | ## This program is free software; you can redistribute it and/or 8 | ## modify it under the same terms as Perl itself. 9 | ## 10 | ################################################################################ 11 | 12 | =provides 13 | 14 | __UNDEFINED__ 15 | 16 | =implementation 17 | 18 | /* concatenating with "" ensures that only literal strings are accepted as argument 19 | * note that STR_WITH_LEN() can't be used as argument to macros or functions that 20 | * under some configurations might be macros 21 | */ 22 | 23 | __UNDEFINED__ STR_WITH_LEN(s) (s ""), (sizeof(s)-1) 24 | 25 | __UNDEFINED__ newSVpvs(str) newSVpvn(str "", sizeof(str) - 1) 26 | __UNDEFINED__ newSVpvs_flags(str, flags) newSVpvn_flags(str "", sizeof(str) - 1, flags) 27 | __UNDEFINED__ newSVpvs_share(str) newSVpvn_share(str "", sizeof(str) - 1, 0) 28 | __UNDEFINED__ sv_catpvs(sv, str) sv_catpvn(sv, str "", sizeof(str) - 1) 29 | __UNDEFINED__ sv_setpvs(sv, str) sv_setpvn(sv, str "", sizeof(str) - 1) 30 | __UNDEFINED__ hv_fetchs(hv, key, lval) hv_fetch(hv, key "", sizeof(key) - 1, lval) 31 | __UNDEFINED__ hv_stores(hv, key, val) hv_store(hv, key "", sizeof(key) - 1, val, 0) 32 | 33 | __UNDEFINED__ gv_fetchpvs(name, flags, svt) gv_fetchpvn_flags(name "", sizeof(name) - 1, flags, svt) 34 | __UNDEFINED__ gv_stashpvs(name, flags) gv_stashpvn(name "", sizeof(name) - 1, flags) 35 | 36 | __UNDEFINED__ get_cvs(name, flags) get_cvn_flags(name "", sizeof(name)-1, flags) 37 | 38 | =xsinit 39 | 40 | #define NEED_newSVpvn_share 41 | 42 | =xsubs 43 | 44 | void 45 | newSVpvs() 46 | PPCODE: 47 | mXPUSHs(newSVpvs("newSVpvs")); 48 | XSRETURN(1); 49 | 50 | void 51 | newSVpvs_flags() 52 | PPCODE: 53 | XPUSHs(newSVpvs_flags("newSVpvs_flags", SVs_TEMP)); 54 | XSRETURN(1); 55 | 56 | int 57 | newSVpvs_share() 58 | PREINIT: 59 | SV *sv; 60 | U32 hash; 61 | CODE: 62 | RETVAL = 0; 63 | PERL_HASH(hash, "pvs", 3); 64 | sv = newSVpvs_share("pvs"); 65 | RETVAL += strEQ(SvPV_nolen_const(sv), "pvs"); 66 | RETVAL += SvCUR(sv) == 3; 67 | RETVAL += SvSHARED_HASH(sv) == hash; 68 | SvREFCNT_dec(sv); 69 | OUTPUT: 70 | RETVAL 71 | 72 | void 73 | sv_catpvs(sv) 74 | SV *sv 75 | PPCODE: 76 | sv_catpvs(sv, "sv_catpvs"); 77 | 78 | void 79 | sv_setpvs(sv) 80 | SV *sv 81 | PPCODE: 82 | sv_setpvs(sv, "sv_setpvs"); 83 | 84 | void 85 | hv_fetchs(hv) 86 | SV *hv 87 | PREINIT: 88 | SV **s; 89 | PPCODE: 90 | s = hv_fetchs((HV *) SvRV(hv), "hv_fetchs", 0); 91 | XPUSHs(sv_mortalcopy(*s)); 92 | XSRETURN(1); 93 | 94 | void 95 | hv_stores(hv, sv) 96 | SV *hv 97 | SV *sv 98 | PPCODE: 99 | (void) hv_stores((HV *) SvRV(hv), "hv_stores", SvREFCNT_inc_simple(sv)); 100 | 101 | SV* 102 | gv_fetchpvs() 103 | CODE: 104 | RETVAL = newRV_inc((SV*)gv_fetchpvs("Devel::PPPort::VERSION", 0, SVt_PV)); 105 | OUTPUT: 106 | RETVAL 107 | 108 | SV* 109 | gv_stashpvs() 110 | CODE: 111 | RETVAL = newRV_inc((SV*)gv_stashpvs("Devel::PPPort", 0)); 112 | OUTPUT: 113 | RETVAL 114 | 115 | int 116 | get_cvs() 117 | PREINIT: 118 | CV* xv; 119 | CODE: 120 | RETVAL = 0; 121 | xv = get_cvs("Devel::PPPort::foobar", 0); 122 | if(xv == NULL) RETVAL++; 123 | xv = get_cvs("Devel::PPPort::foobar", GV_ADDMULTI); 124 | if(xv && SvTYPE(xv) == SVt_PVCV) RETVAL++; 125 | xv = get_cvs("Devel::PPPort::get_cvs", 0); 126 | if(xv && SvTYPE(xv) == SVt_PVCV) RETVAL++; 127 | OUTPUT: 128 | RETVAL 129 | 130 | 131 | =tests plan => 12 132 | 133 | my $x = 'foo'; 134 | 135 | ok(Devel::PPPort::newSVpvs(), "newSVpvs"); 136 | ok(Devel::PPPort::newSVpvs_flags(), "newSVpvs_flags"); 137 | ok(Devel::PPPort::newSVpvs_share(), 3); 138 | 139 | Devel::PPPort::sv_catpvs($x); 140 | ok($x, "foosv_catpvs"); 141 | 142 | Devel::PPPort::sv_setpvs($x); 143 | ok($x, "sv_setpvs"); 144 | 145 | my %h = ('hv_fetchs' => 42); 146 | Devel::PPPort::hv_stores(\%h, 4711); 147 | ok(scalar keys %h, 2); 148 | ok(exists $h{'hv_stores'}); 149 | ok($h{'hv_stores'}, 4711); 150 | ok(Devel::PPPort::hv_fetchs(\%h), 42); 151 | ok(Devel::PPPort::gv_fetchpvs(), \*Devel::PPPort::VERSION); 152 | ok(Devel::PPPort::gv_stashpvs(), \%Devel::PPPort::); 153 | 154 | ok(Devel::PPPort::get_cvs(), 3); 155 | -------------------------------------------------------------------------------- /parts/inc/warn: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | ## 3 | ## Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz. 4 | ## Version 2.x, Copyright (C) 2001, Paul Marquess. 5 | ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski. 6 | ## 7 | ## This program is free software; you can redistribute it and/or 8 | ## modify it under the same terms as Perl itself. 9 | ## 10 | ################################################################################ 11 | 12 | =provides 13 | 14 | __UNDEFINED__ 15 | ckWARN 16 | warner 17 | Perl_warner 18 | Perl_warner_nocontext 19 | 20 | =implementation 21 | 22 | __UNDEFINED__ WARN_ALL 0 23 | __UNDEFINED__ WARN_CLOSURE 1 24 | __UNDEFINED__ WARN_DEPRECATED 2 25 | __UNDEFINED__ WARN_EXITING 3 26 | __UNDEFINED__ WARN_GLOB 4 27 | __UNDEFINED__ WARN_IO 5 28 | __UNDEFINED__ WARN_CLOSED 6 29 | __UNDEFINED__ WARN_EXEC 7 30 | __UNDEFINED__ WARN_LAYER 8 31 | __UNDEFINED__ WARN_NEWLINE 9 32 | __UNDEFINED__ WARN_PIPE 10 33 | __UNDEFINED__ WARN_UNOPENED 11 34 | __UNDEFINED__ WARN_MISC 12 35 | __UNDEFINED__ WARN_NUMERIC 13 36 | __UNDEFINED__ WARN_ONCE 14 37 | __UNDEFINED__ WARN_OVERFLOW 15 38 | __UNDEFINED__ WARN_PACK 16 39 | __UNDEFINED__ WARN_PORTABLE 17 40 | __UNDEFINED__ WARN_RECURSION 18 41 | __UNDEFINED__ WARN_REDEFINE 19 42 | __UNDEFINED__ WARN_REGEXP 20 43 | __UNDEFINED__ WARN_SEVERE 21 44 | __UNDEFINED__ WARN_DEBUGGING 22 45 | __UNDEFINED__ WARN_INPLACE 23 46 | __UNDEFINED__ WARN_INTERNAL 24 47 | __UNDEFINED__ WARN_MALLOC 25 48 | __UNDEFINED__ WARN_SIGNAL 26 49 | __UNDEFINED__ WARN_SUBSTR 27 50 | __UNDEFINED__ WARN_SYNTAX 28 51 | __UNDEFINED__ WARN_AMBIGUOUS 29 52 | __UNDEFINED__ WARN_BAREWORD 30 53 | __UNDEFINED__ WARN_DIGIT 31 54 | __UNDEFINED__ WARN_PARENTHESIS 32 55 | __UNDEFINED__ WARN_PRECEDENCE 33 56 | __UNDEFINED__ WARN_PRINTF 34 57 | __UNDEFINED__ WARN_PROTOTYPE 35 58 | __UNDEFINED__ WARN_QW 36 59 | __UNDEFINED__ WARN_RESERVED 37 60 | __UNDEFINED__ WARN_SEMICOLON 38 61 | __UNDEFINED__ WARN_TAINT 39 62 | __UNDEFINED__ WARN_THREADS 40 63 | __UNDEFINED__ WARN_UNINITIALIZED 41 64 | __UNDEFINED__ WARN_UNPACK 42 65 | __UNDEFINED__ WARN_UNTIE 43 66 | __UNDEFINED__ WARN_UTF8 44 67 | __UNDEFINED__ WARN_VOID 45 68 | __UNDEFINED__ WARN_ASSERTIONS 46 69 | 70 | __UNDEFINED__ packWARN(a) (a) 71 | 72 | #ifndef ckWARN 73 | # ifdef G_WARN_ON 74 | # define ckWARN(a) (PL_dowarn & G_WARN_ON) 75 | # else 76 | # define ckWARN(a) PL_dowarn 77 | # endif 78 | #endif 79 | 80 | #if { VERSION >= 5.004 } && !defined(warner) 81 | #if { NEED warner } 82 | 83 | void 84 | warner(U32 err, const char *pat, ...) 85 | { 86 | SV *sv; 87 | va_list args; 88 | 89 | PERL_UNUSED_ARG(err); 90 | 91 | va_start(args, pat); 92 | sv = vnewSVpvf(pat, &args); 93 | va_end(args); 94 | sv_2mortal(sv); 95 | warn("%s", SvPV_nolen(sv)); 96 | } 97 | 98 | #define warner Perl_warner 99 | 100 | #define Perl_warner_nocontext Perl_warner 101 | 102 | #endif 103 | #endif 104 | 105 | =xsinit 106 | 107 | #define NEED_warner 108 | 109 | =xsubs 110 | 111 | void 112 | warner() 113 | CODE: 114 | #if { VERSION >= 5.004 } 115 | warner(packWARN(WARN_MISC), "warner %s:%d", "bar", 42); 116 | #endif 117 | 118 | void 119 | Perl_warner() 120 | CODE: 121 | #if { VERSION >= 5.004 } 122 | Perl_warner(aTHX_ packWARN(WARN_MISC), "Perl_warner %s:%d", "bar", 42); 123 | #endif 124 | 125 | void 126 | Perl_warner_nocontext() 127 | CODE: 128 | #if { VERSION >= 5.004 } 129 | Perl_warner_nocontext(packWARN(WARN_MISC), "Perl_warner_nocontext %s:%d", "bar", 42); 130 | #endif 131 | 132 | void 133 | ckWARN() 134 | CODE: 135 | #if { VERSION >= 5.004 } 136 | if (ckWARN(WARN_MISC)) 137 | Perl_warner_nocontext(packWARN(WARN_MISC), "ckWARN %s:%d", "bar", 42); 138 | #endif 139 | 140 | =tests plan => 5 141 | 142 | $^W = 0; 143 | 144 | my $warning; 145 | 146 | $SIG{'__WARN__'} = sub { $warning = $_[0] }; 147 | 148 | $warning = ''; 149 | Devel::PPPort::warner(); 150 | ok($] >= 5.004 ? $warning =~ /^warner bar:42/ : $warning eq ''); 151 | 152 | $warning = ''; 153 | Devel::PPPort::Perl_warner(); 154 | ok($] >= 5.004 ? $warning =~ /^Perl_warner bar:42/ : $warning eq ''); 155 | 156 | $warning = ''; 157 | Devel::PPPort::Perl_warner_nocontext(); 158 | ok($] >= 5.004 ? $warning =~ /^Perl_warner_nocontext bar:42/ : $warning eq ''); 159 | 160 | $warning = ''; 161 | Devel::PPPort::ckWARN(); 162 | ok($warning, ''); 163 | 164 | $^W = 1; 165 | 166 | $warning = ''; 167 | Devel::PPPort::ckWARN(); 168 | ok($] >= 5.004 ? $warning =~ /^ckWARN bar:42/ : $warning eq ''); 169 | -------------------------------------------------------------------------------- /parts/inc/MY_CXT: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | ## 3 | ## Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz. 4 | ## Version 2.x, Copyright (C) 2001, Paul Marquess. 5 | ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski. 6 | ## 7 | ## This program is free software; you can redistribute it and/or 8 | ## modify it under the same terms as Perl itself. 9 | ## 10 | ################################################################################ 11 | 12 | =provides 13 | 14 | START_MY_CXT 15 | dMY_CXT_SV 16 | dMY_CXT 17 | MY_CXT_INIT 18 | MY_CXT_CLONE 19 | MY_CXT 20 | pMY_CXT 21 | pMY_CXT_ 22 | _pMY_CXT 23 | aMY_CXT 24 | aMY_CXT_ 25 | _aMY_CXT 26 | 27 | =implementation 28 | 29 | /* 30 | * Boilerplate macros for initializing and accessing interpreter-local 31 | * data from C. All statics in extensions should be reworked to use 32 | * this, if you want to make the extension thread-safe. See ext/re/re.xs 33 | * for an example of the use of these macros. 34 | * 35 | * Code that uses these macros is responsible for the following: 36 | * 1. #define MY_CXT_KEY to a unique string, e.g. "DynaLoader_guts" 37 | * 2. Declare a typedef named my_cxt_t that is a structure that contains 38 | * all the data that needs to be interpreter-local. 39 | * 3. Use the START_MY_CXT macro after the declaration of my_cxt_t. 40 | * 4. Use the MY_CXT_INIT macro such that it is called exactly once 41 | * (typically put in the BOOT: section). 42 | * 5. Use the members of the my_cxt_t structure everywhere as 43 | * MY_CXT.member. 44 | * 6. Use the dMY_CXT macro (a declaration) in all the functions that 45 | * access MY_CXT. 46 | */ 47 | 48 | #if defined(MULTIPLICITY) || defined(PERL_OBJECT) || \ 49 | defined(PERL_CAPI) || defined(PERL_IMPLICIT_CONTEXT) 50 | 51 | #ifndef START_MY_CXT 52 | 53 | /* This must appear in all extensions that define a my_cxt_t structure, 54 | * right after the definition (i.e. at file scope). The non-threads 55 | * case below uses it to declare the data as static. */ 56 | #define START_MY_CXT 57 | 58 | #if { VERSION < 5.004_68 } 59 | /* Fetches the SV that keeps the per-interpreter data. */ 60 | #define dMY_CXT_SV \ 61 | SV *my_cxt_sv = get_sv(MY_CXT_KEY, FALSE) 62 | #else /* >= perl5.004_68 */ 63 | #define dMY_CXT_SV \ 64 | SV *my_cxt_sv = *hv_fetch(PL_modglobal, MY_CXT_KEY, \ 65 | sizeof(MY_CXT_KEY)-1, TRUE) 66 | #endif /* < perl5.004_68 */ 67 | 68 | /* This declaration should be used within all functions that use the 69 | * interpreter-local data. */ 70 | #define dMY_CXT \ 71 | dMY_CXT_SV; \ 72 | my_cxt_t *my_cxtp = INT2PTR(my_cxt_t*,SvUV(my_cxt_sv)) 73 | 74 | /* Creates and zeroes the per-interpreter data. 75 | * (We allocate my_cxtp in a Perl SV so that it will be released when 76 | * the interpreter goes away.) */ 77 | #define MY_CXT_INIT \ 78 | dMY_CXT_SV; \ 79 | /* newSV() allocates one more than needed */ \ 80 | my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\ 81 | Zero(my_cxtp, 1, my_cxt_t); \ 82 | sv_setuv(my_cxt_sv, PTR2UV(my_cxtp)) 83 | 84 | /* This macro must be used to access members of the my_cxt_t structure. 85 | * e.g. MYCXT.some_data */ 86 | #define MY_CXT (*my_cxtp) 87 | 88 | /* Judicious use of these macros can reduce the number of times dMY_CXT 89 | * is used. Use is similar to pTHX, aTHX etc. */ 90 | #define pMY_CXT my_cxt_t *my_cxtp 91 | #define pMY_CXT_ pMY_CXT, 92 | #define _pMY_CXT ,pMY_CXT 93 | #define aMY_CXT my_cxtp 94 | #define aMY_CXT_ aMY_CXT, 95 | #define _aMY_CXT ,aMY_CXT 96 | 97 | #endif /* START_MY_CXT */ 98 | 99 | #ifndef MY_CXT_CLONE 100 | /* Clones the per-interpreter data. */ 101 | #define MY_CXT_CLONE \ 102 | dMY_CXT_SV; \ 103 | my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\ 104 | Copy(INT2PTR(my_cxt_t*, SvUV(my_cxt_sv)), my_cxtp, 1, my_cxt_t);\ 105 | sv_setuv(my_cxt_sv, PTR2UV(my_cxtp)) 106 | #endif 107 | 108 | #else /* single interpreter */ 109 | 110 | #ifndef START_MY_CXT 111 | 112 | #define START_MY_CXT static my_cxt_t my_cxt; 113 | #define dMY_CXT_SV dNOOP 114 | #define dMY_CXT dNOOP 115 | #define MY_CXT_INIT NOOP 116 | #define MY_CXT my_cxt 117 | 118 | #define pMY_CXT void 119 | #define pMY_CXT_ 120 | #define _pMY_CXT 121 | #define aMY_CXT 122 | #define aMY_CXT_ 123 | #define _aMY_CXT 124 | 125 | #endif /* START_MY_CXT */ 126 | 127 | #ifndef MY_CXT_CLONE 128 | #define MY_CXT_CLONE NOOP 129 | #endif 130 | 131 | #endif 132 | 133 | =xsmisc 134 | 135 | #define MY_CXT_KEY "Devel::PPPort::_guts" XS_VERSION 136 | 137 | typedef struct { 138 | /* Put Global Data in here */ 139 | int dummy; 140 | } my_cxt_t; 141 | 142 | START_MY_CXT 143 | 144 | =xsboot 145 | 146 | { 147 | MY_CXT_INIT; 148 | /* If any of the fields in the my_cxt_t struct need 149 | * to be initialised, do it here. 150 | */ 151 | MY_CXT.dummy = 42; 152 | } 153 | 154 | =xsubs 155 | 156 | int 157 | MY_CXT_1() 158 | CODE: 159 | dMY_CXT; 160 | RETVAL = MY_CXT.dummy == 42; 161 | ++MY_CXT.dummy; 162 | OUTPUT: 163 | RETVAL 164 | 165 | int 166 | MY_CXT_2() 167 | CODE: 168 | dMY_CXT; 169 | RETVAL = MY_CXT.dummy == 43; 170 | OUTPUT: 171 | RETVAL 172 | 173 | int 174 | MY_CXT_CLONE() 175 | CODE: 176 | MY_CXT_CLONE; 177 | RETVAL = 42; 178 | OUTPUT: 179 | RETVAL 180 | 181 | =tests plan => 3 182 | 183 | ok(&Devel::PPPort::MY_CXT_1()); 184 | ok(&Devel::PPPort::MY_CXT_2()); 185 | ok(&Devel::PPPort::MY_CXT_CLONE()); 186 | -------------------------------------------------------------------------------- /parts/todo/5006000: -------------------------------------------------------------------------------- 1 | 5.006000 2 | PERL_SYS_INIT3 # U 3 | PL_check # E 4 | SvIOK_UV # U 5 | SvIOK_notUV # U 6 | SvIOK_only_UV # U 7 | SvPOK_only_UTF8 # U 8 | SvPVbyte_nolen # U 9 | SvPVbytex # U 10 | SvPVbytex_force # U 11 | SvPVutf8 # U 12 | SvPVutf8_force # U 13 | SvPVutf8_nolen # U 14 | SvPVutf8x # U 15 | SvPVutf8x_force # U 16 | SvUOK # U 17 | SvUTF8 # U 18 | SvUTF8_off # U 19 | SvUTF8_on # U 20 | av_delete # U 21 | av_exists # U 22 | call_atexit # E 23 | caller_cx # U 24 | cast_i32 # U (cast_i32) 25 | cast_iv # U (cast_iv) 26 | cast_ulong # U 27 | cast_uv # U (cast_uv) 28 | do_gv_dump # U 29 | do_gvgv_dump # U 30 | do_hv_dump # U 31 | do_magic_dump # U 32 | do_op_dump # U 33 | do_open9 # U 34 | do_pmop_dump # U 35 | do_sv_dump # U 36 | dump_all # U 37 | dump_eval # U 38 | dump_form # U 39 | dump_indent # U 40 | dump_packsubs # U 41 | dump_sub # U 42 | dump_vindent # U 43 | get_context # U 44 | get_ppaddr # E 45 | gv_dump # U 46 | init_i18nl10n # U (perl_init_i18nl10n) 47 | init_i18nl14n # U (perl_init_i18nl14n) 48 | is_uni_alnum # U 49 | is_uni_alnum_lc # U 50 | is_uni_alpha # U 51 | is_uni_alpha_lc # U 52 | is_uni_ascii # U 53 | is_uni_ascii_lc # U 54 | is_uni_cntrl # U 55 | is_uni_cntrl_lc # U 56 | is_uni_digit # U 57 | is_uni_digit_lc # U 58 | is_uni_graph # U 59 | is_uni_graph_lc # U 60 | is_uni_idfirst # U 61 | is_uni_idfirst_lc # U 62 | is_uni_lower # U 63 | is_uni_lower_lc # U 64 | is_uni_print # U 65 | is_uni_print_lc # U 66 | is_uni_punct # U 67 | is_uni_punct_lc # U 68 | is_uni_space # U 69 | is_uni_space_lc # U 70 | is_uni_upper # U 71 | is_uni_upper_lc # U 72 | is_uni_xdigit # U 73 | is_uni_xdigit_lc # U 74 | is_utf8_alnum # U 75 | is_utf8_alpha # U 76 | is_utf8_ascii # U 77 | is_utf8_char # U 78 | is_utf8_cntrl # U 79 | is_utf8_digit # U 80 | is_utf8_graph # U 81 | is_utf8_idfirst # U 82 | is_utf8_lower # U 83 | is_utf8_mark # U 84 | is_utf8_print # U 85 | is_utf8_punct # U 86 | is_utf8_space # U 87 | is_utf8_upper # U 88 | is_utf8_xdigit # U 89 | magic_dump # U 90 | mess # E (Perl_mess) 91 | my_atof # U 92 | my_fflush_all # U 93 | newANONATTRSUB # U 94 | newATTRSUB # U 95 | newXS # E (Perl_newXS) 96 | newXSproto # E 97 | new_collate # U (perl_new_collate) 98 | new_ctype # U (perl_new_ctype) 99 | new_numeric # U (perl_new_numeric) 100 | op_dump # U 101 | perl_parse # E (perl_parse) 102 | pmop_dump # U 103 | re_intuit_string # U 104 | reginitcolors # U 105 | require_pv # U (perl_require_pv) 106 | safesyscalloc # U 107 | safesysfree # U 108 | safesysmalloc # U 109 | safesysrealloc # U 110 | save_I8 # U 111 | save_alloc # U 112 | save_destructor # E (Perl_save_destructor) 113 | save_destructor_x # E 114 | save_re_context # U 115 | save_vptr # U 116 | scan_bin # U 117 | set_context # U 118 | set_numeric_local # U (perl_set_numeric_local) 119 | set_numeric_radix # U 120 | set_numeric_standard # U (perl_set_numeric_standard) 121 | str_to_version # U 122 | sv_2pvutf8 # U 123 | sv_2pvutf8_nolen # U 124 | sv_force_normal # U 125 | sv_len_utf8 # U 126 | sv_pos_b2u # U 127 | sv_pos_u2b # U 128 | sv_pv # U 129 | sv_pvbyte # U 130 | sv_pvbyten # U 131 | sv_pvbyten_force # U 132 | sv_pvutf8 # U 133 | sv_pvutf8n # U 134 | sv_pvutf8n_force # U 135 | sv_rvweaken # U 136 | sv_utf8_decode # U 137 | sv_utf8_downgrade # U 138 | sv_utf8_encode # U 139 | swash_init # U 140 | to_uni_lower_lc # U 141 | to_uni_title_lc # U 142 | to_uni_upper_lc # U 143 | utf8_distance # U 144 | utf8_hop # U 145 | vcroak # U 146 | vform # U 147 | vmess # U 148 | vwarn # U 149 | vwarner # U 150 | --------------------------------------------------------------------------------