ããã¯ãUbuntu OnlineãFedora OnlineãWindows ãªã³ã©ã€ã³ ãšãã¥ã¬ãŒã¿ãŒããŸã㯠MAC OS ãªã³ã©ã€ã³ ãšãã¥ã¬ãŒã¿ãŒãªã©ã®è€æ°ã®ç¡æãªã³ã©ã€ã³ ã¯ãŒã¯ã¹ããŒã·ã§ã³ã® XNUMX ã€ã䜿çšããŠãOnWorks ç¡æãã¹ãã£ã³ã° ãããã€ããŒã§å®è¡ã§ããã³ãã³ã perlapi ã§ãã
ããã°ã©ã ïŒ
NAME
perlapi - Perl ãããªã㯠API ã®èªåçæããã¥ã¡ã³ã
DESCRIPTION
ãã®ãã¡ã€ã«ã«ã¯ãã«ãã£ãŠçæããã perl ãããªã㯠API ã®ããã¥ã¡ã³ããå«ãŸããŠããŸãã åã蟌ã¿.pl,
å ·äœçã«ã¯ãã§äœ¿çšã§ããé¢æ°ããã¯ãããã©ã°ãå€æ°ã®ãªã¹ãã§ãã
æ¡åŒµã©ã€ã¿ãŒã æåŸã«ããŸã ææžåãããŠããªãé¢æ°ã®ãªã¹ãã瀺ããŸãã
ãããã®ã€ã³ã¿ãŒãã§ãŒã¹ã¯äºåãªãå€æŽãããå ŽåããããŸãã ããã«èšèŒãããŠããªããã®ã¯ã
ããã¯ãããªã㯠API ã®äžéšã§ã¯ãªããããæ¡åŒµæ©èœäœæè ã¯æ±ºããŠäœ¿çšããªãã§ãã ããã ãããã®ããã«
ãã®ãããproto.h ã«ãªã¹ããããŠããé¢æ°ãç²ç®çã«äœ¿çšããããšã¯ãèšè¿°ãããšãã«é¿ããã¹ãã§ãã
æ¡åŒµæ©èœ
ãã¹ãŠã® Perl API ã°ããŒãã«å€æ°ã¯ãPL_ããã¬ãã£ãã¯ã¹ãä»ããŠåç §ããå¿ èŠãããããšã«æ³šæããŠãã ããã ãŸãã
ããã«ãªã¹ããããŠããªããã®ã¯ãæ¡åŒµæ©èœäœæè ã«ãã£ãŠäœ¿çšãããã¹ãã§ã¯ãªããå€æŽãŸãã¯å€æŽããããšãã§ããŸãã
äºåãªãåé€ãããŸãã ãã¯ããåæ§ã äžéšã®ãã¯ãã¯äºææ§ã®ããã«æäŸãããŠããŸãã
å€ãã食ãæ°ã®ãªãååã§ããããã®ãµããŒãã¯å°æ¥ã®ãªãªãŒã¹ã§ç¡å¹ã«ãªãå¯èœæ§ããããŸãã
Perl ã¯ããšããš US-ASCII ã®ã¿ãåŠçããããã«æžãããŠããŸãã (ã€ãŸããåºæ°ã
æ°å€ã®ç¯å²ã¯ 0 ïœ 127)ã ããã¥ã¡ã³ããã³ã¡ã³ãã§ã¯äŸç¶ãšããŠãã®çšèªã䜿çšãããå ŽåããããŸãã
ASCII ã¯ãå®éã«ã¯ 0 ïœ 255 ã®ç¯å²å šäœãæå³ããå ŽåããããŸãã
Perl 㯠ASCII ãŸã㯠EBCDIC ã§ã³ã³ãã€ã«ããŠå®è¡ã§ããããšã«æ³šæããŠãã ãã (perlebcdic ãåç §)ã
ã»ãšãã©ã®ããã¥ã¡ã³ã (ããã³ã³ãŒãå ã®ã³ã¡ã³ã) 㯠EBCDIC ã®å¯èœæ§ãç¡èŠããŠããŸãã
ã»ãšãã©ãã¹ãŠã®ç®çã«ãããŠãéãã¯æããã§ãã äŸãšããŠãEBCDIC ã§ã¯ã
Unicode æååã®ãšã³ã³ãŒãã«ã¯ UTF-8 ã®ä»£ããã« UTF-EBCDIC ã䜿çšãããŸãã
ããã¥ã¡ã³ãã§ã¯ãutf8ã(ããã³é¢æ°åãå«ããã®ååã®å€åœ¢) ãåç §ããŠããŸãã
ãŸãã(æ¬è³ªçã«ééçã«) ãUTF-EBCDICããæå³ããŸãã ããããæåã®åºæ°ã¯
ASCIIãEBCDICãUTF ãšã³ã³ãŒãã£ã³ã°éã§ç°ãªããUTF-EBCDIC ã§ãšã³ã³ãŒããããæåå
UTF-8 ãããå€ãã®ãã€ããå æããå¯èœæ§ããããŸãã
以äžã®ãªã¹ãã¯ã¢ã«ãã¡ãããé ã§ããã倧æåãšå°æåã¯åºå¥ãããŸããã
ãã¡ããã ãã 䟡å€èŠ³
GIMME ãG_SCALARããŸãã¯ãG_SCALARãã®ã¿ãè¿ãããšãã§ãããGIMME_Vãã®äžäœäºææ§ã®ããããŒãžã§ã³
"G_ARRAY"; void ã³ã³ããã¹ãã§ã¯ããG_SCALARããè¿ããŸãã å»æ¢ãããŸããã ãGIMME_Vãã䜿çšãã
ã代ããã«ã䜿ããã ããã
U32 ã®ã
GIMME_V XSUB ã©ã€ã¿ãŒã® Perl ã®ãwantarrayãã«çžåœããŸãã ãG_VOIDãããG_SCALARããè¿ããŸãã
ãŸã㯠"G_ARRAY" ã¯ããããã voidãã¹ã«ã©ãŒããŸãã¯ãªã¹ã ã³ã³ããã¹ããè¡šããŸãã 詳现ã«ã€ããŠã¯ãperlcall ãåç §ããŠãã ããã
䜿çšäŸã
U32 ã®ã¡_V
G_ARRAY ãªã¹ãã®ã³ã³ããã¹ãã瀺ãããã«äœ¿çšãããŸãã ãGIMME_VãããGIMMEããããã³ perlcall ãåç §ããŠãã ããã
G_DISCARD
ã³ãŒã«ããã¯ããè¿ãããåŒæ°ãç Žæ£ããå¿ èŠãããããšã瀺ããŸãã èŠã
ããŒã«ã³ãŒã«ã
G_EVAL ã³ãŒã«ããã¯ã®åšå²ã« Perl ã®ãevalãã©ãããŒã匷å¶ããããã«äœ¿çšãããŸãã ãperlcallããåç §ããŠãã ããã
G_NOARGS
ã³ãŒã«ããã¯ã«åŒæ°ãéä¿¡ãããŠããªãããšã瀺ããŸãã ãperlcallããåç §ããŠãã ããã
G_ã¹ã«ã©ãŒ
ã¹ã«ã©ãŒã³ã³ããã¹ãã瀺ãããã«äœ¿çšãããŸãã ãGIMME_VãããGIMMEããããã³ perlcall ãåç §ããŠãã ããã
G_VOID ç¡å¹ãªã³ã³ããã¹ãã瀺ãããã«äœ¿çšãããŸãã ãGIMME_Vããš perlcall ãåç §ããŠãã ããã
é å æäœ æ©èœ
AvFILL ãav_top_index()ããšåãã éæšå¥šã®ããã代ããã«ãav_top_index()ãã䜿çšããŠãã ããã
int AvFILL(AV* av)
av_ã¯ãªã¢
é åã®ãã¹ãŠã®èŠçŽ ã解æŸãã空ã®ãŸãŸã«ããŸãã XSçžåœã®ãã®
ã@é å = ()ãã ãav_undefããåç §ããŠãã ããã
ãã¹ãã©ã¯ã¿ãŒã®ã¢ã¯ã·ã§ã³ãçŽæ¥åŒã³åºããããã
é åã®èŠçŽ ã解æŸããããšã§éæ¥çã«åç §ã«ãŠã³ããçºçããå¯èœæ§ããããŸãã
é åèªäœãçž®å°ãã (ã·ã³ãã«ããŒãã«å ã®ãšã³ããªãåé€ãããªã©)ã ããã§
AV ã解æŸããã (ãŸãã¯åå²ãåœãŠããã) å¯èœæ§ããããŸãã
åç §ãä¿æããŠããªãéããåŒã³åºãããæ»ããŸãã
void av_clear(AV *av)
av_create_and_push
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
SV ãé åã®æ«å°Ÿã«ããã·ã¥ããå¿ èŠã«å¿ããŠé åãäœæããŸãã å°ããª
äžè¬çã«éè€ããã€ãã£ãªã ãåé€ããå éšãã«ããŒé¢æ°ã
void av_create_and_push(AV **const avp,
SV *å®æ°)
av_create_and_unshift_one
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
SV ãé åã®å é ã«ã·ãã解é€ããå¿ èŠã«å¿ããŠé åãäœæããŸãã
ããéè€ããã€ãã£ãªã ãåé€ããããã®å°ããªå éšãã«ããŒé¢æ°ã
SV** av_create_and_unshift_one(AV **const avp,
SV *å®æ°)
av_delete
ãkeyãã§ã€ã³ããã¯ã¹ä»ããããèŠçŽ ãé åããåé€ãããã®èŠçŽ ãèŽåœçã«ãã
ãããè¿ããŸãã ãflagsãããG_DISCARDããšçããå ŽåãèŠçŽ ã¯è§£æŸãããnull ãè¿ãããŸãã
æ»ã£ãŠããã Perl ãšåç: ãmy $elem = delete($myarray[$idx]);ã ã®ããã«
éãG_DISCARDãããŒãžã§ã³ãš void-contextãdelete($myarray[$idx]);ã ã®ããã«
ãG_DISCARDãããŒãžã§ã³ã
SV* av_delete(AV *avãSSize_t ããŒãI32 ãã©ã°)
av_exists
ãkeyãã§ã€ã³ããã¯ã¹ä»ããããèŠçŽ ãåæåãããŠããå Žå㯠true ãè¿ããŸãã
ããã¯ãåæåãããŠããªãé åèŠçŽ ã NULL ã«èšå®ããããšããäºå®ã«äŸåããŠããŸãã
Perl ã«çžåœãããã®: ãexists($myarray[$key])ãã
bool av_exists(AV *av, SSize_t key)
av_extend
é åãäºåæ¡åŒµããŸãã ãããŒãã¯é åã®ã€ã³ããã¯ã¹ã§ãã
æ¡åŒµãããŸããã
void av_extend(AV *av, SSize_t ããŒ)
av_fetch
é åå ã®æå®ãããã€ã³ããã¯ã¹ã«ãã SV ãè¿ããŸãã ãããŒãã¯ã€ã³ããã¯ã¹ã§ãã ããã
lval ã true ã®å Žåãæ¬ç©ã® SV ãè¿ãããããšãä¿èšŒãããŸã (æ¬ç©ã§ã¯ãªãã£ãå Žåã«åããŠ)
å)ãåŸã§å€æŽã§ããŸãã æ»ãå€ã null ã§ãªãããšã確èªãã
ãSV*ãã«éåç §ããåã«ã
詳现ã«ã€ããŠã¯ãperlguts ã®ãçµåããã·ã¥ãšé åã®éæ³ã«ã€ããŠããåç §ããŠãã ããã
ã¿ã€ãã¢ã¬ã€ã§ãã®é¢æ°ã䜿çšããæ¹æ³ã«é¢ããæ å ±ã
倧ãŸãã«åçã® Perl 㯠$myarray[$idx] ã§ãã
SV** av_fetch(AV *av, SSize_t key, I32 lval)
av_fill é åå ã®æ倧ã®ã€ã³ããã¯ã¹ããPerl ã®ã€ã³ããã¯ã¹ãšåçã®æå®ãããæ°å€ã«èšå®ããŸãã
ã$#array = $fill;ãã
é åå ã®èŠçŽ ã®æ°ã¯ãfill + 1ãã«ãªããŸãã av_fill() æ»ãã
é åã以åããçãã£ãå Žåãè¿œå ãããè¿œå èŠçŽ ãèšå®ãããŸãã
NULLã«ããŸãã é åãé·ãå Žåã¯ãäœåãªèŠçŽ ã解æŸãããŸãã
ãav_fill(av, -1)ãã¯ãav_clear(av)ããšåãã§ãã
void av_fill(AV *av, SSize_t fill)
av_len ãav_top_indexããšåãã ååã瀺ããã®ãšã¯ç°ãªããè¿ãããããšã«æ³šæããŠãã ããã
é åå ã®æ倧ã®ã€ã³ããã¯ã¹ãªã®ã§ãé åã®ãµã€ãºãååŸããã«ã¯ã次ã®å€ã䜿çšããå¿ èŠããããŸãã
ãav_len(av) + 1ãã ããã¯ãæåŸ ã©ããã®çµæãè¿ããsv_lenããšã¯ç°ãªããŸãã
SSize_t av_len(AV *av)
av_make æ°ãã AV ãäœæããããã« SV ã®ãªã¹ããèšå®ããŸãã SV ã¯
é åãªã®ã§ãav_make ã®åŒã³åºãåŸã«è§£æŸãããå¯èœæ§ããããŸãã æ°ããAVã«ã¯ã
åç §ã«ãŠã³ã㯠1 ã§ãã
Perl ãšåç: ãmy @new_array = ($scalar1, $scalar2, $scalar3...);ã
AV* av_make(SSize_t ãµã€ãº, SV **strp)
av_pop é åã®æ«å°Ÿãã XNUMX ã€ã® SV ãåé€ãããã®ãµã€ãºã XNUMX ã€æžãããŠè¿ããŸãã
SV (XNUMX ã€ã®åç §ã«ãŠã³ãã®å¶åŸ¡ãåŒã³åºãå ã«è»¢é)ã æ»ãå€
&PL_sv_undef é åã空ã®å Žåã
Perl ã«çžåœãããã®: ãpop(@myarray);ã
SV* av_pop(AV *av)
av_push SV ãé åã®æåŸã«ããã·ã¥ããŸãã é åã¯èªåçã«æ¬¡ã®ããã«æ¡åŒµãããŸã
è¿œå ã«å¯Ÿå¿ããŸãã ããã«ãããXNUMX ã€ã®åç §ã«ãŠã³ãã®æææš©ãååŸãããŸãã
Perl ã«çžåœãããã®:ãpush @myarray, $elem;ãã
void av_push(AV *av, SV *val)
av_ã·ãã
é åã®å é ãã XNUMX ã€ã® SV ãåé€ãããã®ãµã€ãºã XNUMX ã€æžãããŠè¿ããŸãã
SV (XNUMX ã€ã®åç §ã«ãŠã³ãã®å¶åŸ¡ãåŒã³åºãå ã«è»¢é)ã æ»ãå€
&PL_sv_undef é åã空ã®å Žåã
Perl ã«çžåœãããã®: "shift(@myarray);"
SV* av_shift(AV *av)
av_store
SV ãé åã«æ ŒçŽããŸãã é åã®ã€ã³ããã¯ã¹ã¯ãkeyããšããŠæå®ããŸãã ãªã¿ãŒã³
æäœã倱æããå ŽåããŸãã¯å€ãå€æŽããå¿ èŠããªãå Žåãå€ã¯ NULL ã«ãªããŸãã
å®éã«ã¯é åå ã«æ ŒçŽãããŸã (çµåãããé åã®å Žåãšåæ§)ã ããã§ãªããã°ãããã¯
éåç §ããŠãããã«æ ŒçŽãããŠãã "SV*" ãååŸã§ããŸã (= "val"))ã
åŒã³åºãå ã¯åç §ã«ãŠã³ããé©åã«ã€ã³ã¯ãªã¡ã³ããã責任ãããããšã«æ³šæããŠãã ããã
åŒã³åºãã®åã«ãvalããæžãããé¢æ°ã NULL ãè¿ããå Žåã¯å€ããã¯ãªã¡ã³ãããŸãã
Perl ãšåçã®ããããã®å€: "$myarray[$key] = $val;"ã
詳现ã«ã€ããŠã¯ãperlguts ã®ãçµåããã·ã¥ãšé åã®éæ³ã«ã€ããŠããåç §ããŠãã ããã
ã¿ã€ãã¢ã¬ã€ã§ãã®é¢æ°ã䜿çšããæ¹æ³ã«é¢ããæ å ±ã
SV** av_store(AV *av, SSize_t key, SV *val)
av_tindex
ãav_top_index()ããšåãã
int av_tindex(AV* av)
av_top_index
é åå ã®æ倧ã®ã€ã³ããã¯ã¹ãè¿ããŸãã é åå ã®èŠçŽ ã®æ°ã¯ã
ãav_top_index(av) + 1ãã é åã空ã®å Žå㯠-1 ãè¿ããŸãã
ããã«çžåœãã Perl 㯠$#myarray ã§ãã
(ããå°ãçã圢åŒã¯ãav_tindexãã§ãã)
SSize_t av_top_index(AV *av)
av_undef
é åã®å®çŸ©ã解é€ããŸãã XS ã§ã¯ãundef(@array)ãã«çžåœããŸãã
ããã¯ãé åã®ãã¹ãŠã®èŠçŽ (ãav_clear()ããªã©) ã解æŸããã ãã§ãªãã
AV ãã¹ã«ã©ãŒã®ãªã¹ããä¿åããããã«äœ¿çšããŠããã¡ã¢ãªã解æŸããŸãã
æ»ãæã«é åãç¡å¹ã«ãªãå¯èœæ§ã«ã€ããŠã¯ããav_clearããåç §ããŠãã ããã
void av_undef(AV *av)
av_unshift
æå®ãããæ°ã®ãundefãå€ãé åã®å é ã«ã·ãã解é€ããŸãã ã®
é åã¯è¿œå ã«å¿ããŠèªåçã«æ¡åŒµãããŸãã 次ã«äœ¿çšããå¿ èŠããããŸã
ãav_storeãã¯ããããã®æ°ããèŠçŽ ã«å€ãå²ãåœãŠãŸãã
Perl ãšåç: ãunshift @myarray, ( (undef) x $n );ã
void av_unshift(AV *av, SSize_t num)
get_av æå®ãããååãæã€æå®ããã Perl ã°ããŒãã«ãŸãã¯ããã±ãŒãžé åã® AV ãè¿ããŸãã
(ãããã£ãŠãåå¥å€æ°ã§ã¯æ©èœããŸãã)ã ããã©ã°ãã¯ãgv_fetchpvãã«æž¡ãããŸãã ããã
ãGV_ADDããèšå®ãããŠãããPerl å€æ°ãååšããªãå Žåã¯äœæãããŸãã ããã
ãflagsãããŒãã§å€æ°ãååšããªãå Žåã¯ãNULL ãè¿ãããŸãã
Perl ã«çžåœãããã®: "@{"$name"}"ã
泚: ãã®é¢æ°ã® perl_ 圢åŒã¯éæšå¥šã§ãã
AV* get_av(const char *name, I32 ãã©ã°)
newAV æ°ãã AV ãäœæããŸãã åç §ã«ãŠã³ã㯠1 ã«èšå®ãããŸãã
Perl ã«çžåœãããã®:ãmy @array;ãã
AV* newAV()
sortsv é åããœãŒãããŸãã 以äžã«äŸã瀺ããŸãã
sortsv(AvARRAY(av), av_top_index(av)+1, Perl_sv_cmp_locale);
çŸåšãããã¯åžžã«ããŒãžãœãŒãã䜿çšããŸãã ããæè»ãªæ¹æ³ã«ã€ããŠã¯ãsortsv_flags ãåç §ããŠãã ããã
ã«ãŒãã³ã
void sortsv(SV** é å, size_t num_elts,
SVCOMPARE_t cmp)
sortsv_flags
ããŸããŸãªãªãã·ã§ã³ã䜿çšããŠé åã䞊ã¹æ¿ããŸãã
void sortsv_flags(SV** é å, size_t num_elts,
SVCOMPARE_t cmpãU32 ãã©ã°)
ãxsubppã variables ãš å éš æ©èœ
ax ã¹ã¿ã㯠ããŒã¹ ãªãã»ããã瀺ãããã«ãxsubppãã«ãã£ãŠèšå®ãããå€æ°ã
ãSTãããXSprePUSHããããã³ãXSRETURNããã¯ãã ãdMARKããã¯ãã¯äºåã«åŒã³åºãå¿ èŠããããŸãã
ãMARKãå€æ°ãèšå®ããŸãã
I32æ§
CLASS C++ XS ã®ã¯ã©ã¹åã瀺ãããã«ãxsubppãã«ãã£ãŠèšå®ãããå€æ°
ã³ã³ã¹ãã©ã¯ã¿ã ããã¯åžžã«ãchar*ãã§ãã ãããããåç §ããŠãã ããã
char* ã¯ã©ã¹
dAX å€æ°ãaxããèšå®ããŸãã ããã¯éåžžããxsubppãã«ãã£ãŠèªåçã«åŠçãããŸãã
ãdXSARGSããåŒã³åºããŸãã
ããã¯ã¹;
dAXMARK å€æ°axãšã¹ã¿ãã¯ããŒã«ãŒå€æ°markãèšå®ããŸãã ããã¯éåžžã
ãdXSARGSããåŒã³åºãããšã§ãxsubppãã«ãã£ãŠèªåçã«åŠçãããŸãã
ããã¯ã¹ããŒã¯;
dITEMS ãitemsãå€æ°ãèšå®ããŸãã ããã¯éåžžããxsubppãã«ãã£ãŠèªåçã«åŠçãããŸãã
ãdXSARGSããåŒã³åºããŸãã
æ¡ä»¶;
ãã³ããŒããŒ
ãUNDERBARããã¯ãã§å¿ èŠãªå€æ°ãèšå®ããŸãã 以åã¯å®çŸ©ããŠããŸãã
ãpadoff_duãã§ãããçŸåšã¯ãã¡ã§ãã ãã ããåŒãç¶ã䜿çšããããšã匷ããå§ãããŸãã
éå»ããã³å°æ¥ã®äºææ§ã確ä¿ããããã«äœ¿çšããŠãã ããã
ãã³ããŒããŒ;
dXSARGS dSP ããã³ dMARK ãåŒã³åºããŠãXSUB ã®ã¹ã¿ãã¯ããã³ããŒã¯ ãã€ã³ã¿ãŒãèšå®ããŸãã ãã»ããã¢ããããŸã
ãdAXããšãdITEMSããåŒã³åºããŠãaxããšãitemsãå€æ°ãåŒã³åºããŸãã éåžžã¯ããã§åŠçãããŸã
ãxsubppãã«ãã£ãŠèªåçã«å®è¡ãããŸãã
dXSARGS;
dXSI32 ãšã€ãªã¢ã¹ãæ〠XSUB ã®ãixãå€æ°ãèšå®ããŸãã ããã¯éåžžåŠçãããŸã
ãxsubppãã«ãã£ãŠèªåçã«å®è¡ãããŸãã
dXSI32;
items ã¹ã¿ãã¯äžã®é ç®ã®æ°ã瀺ãããã«ãxsubppãã«ãã£ãŠèšå®ãããå€æ°ã
perlxs ã®ãå¯å€é·ãã©ã¡ãŒã¿ ãªã¹ãããåç §ããŠãã ããã
I32é ç®
ix XSUB ã®ãšã€ãªã¢ã¹ãã©ãã§ãããã瀺ãããã«ãxsubppãã«ãã£ãŠèšå®ãããå€æ°
ãããåŒã³åºãããã«äœ¿çšãããŸãã perlxs ã®ãALIAS: ããŒã¯ãŒãããåç §ããŠãã ããã
I32 ix
RETVAL XSUB ã®æ»ãå€ãä¿æããããã«ãxsubppãã«ãã£ãŠèšå®ãããå€æ°ã ããã¯
åžžã« XSUB ã«é©åãªã¿ã€ããéžæããŸãã perlxs ã®ãRETVAL å€æ°ããåç §ããŠãã ããã
(äœã§ã) RETVAL
ST XSUB ã®ã¹ã¿ãã¯äžã®èŠçŽ ã«ã¢ã¯ã»ã¹ããããã«äœ¿çšãããŸãã
SV* ST(int ix)
THIS C++ XSUB å ã®ãªããžã§ã¯ããæå®ããããã«ãxsubppãã«ãã£ãŠèšå®ãããå€æ°ã ãã
ã¯åžžã« C++ ãªããžã§ã¯ãã®é©åãªåã§ãã ãCLASSãããã³ãC++ ã§ã® XS ã®äœ¿çšããåç §ããŠãã ããã
ããŒã«ã¯ã¹ã§ã
(äœã§ã)ãã
ã¢ã³ããŒããŒ
$_ å€æ°ã«å¯Ÿå¿ãã SV*ã åå¥ $_ ãå«ãŸããŠããŠãæ©èœããŸã
ç¯å²ã
XSUB ãšãã® C ãã©ã¡ãŒã¿ ãªã¹ãã宣èšãã XS ãã¯ãã ããã¯ãxsubppãã«ãã£ãŠåŠçãããŸãã
ããã¯ãããæ瀺ç㪠XS_EXTERNAL ãã¯ãã䜿çšããã®ãšåãã§ãã
XS_EXTERNAL
XSUB ãšãã® C ãã©ã¡ãŒã¿ ãªã¹ãã宣èšããæ瀺çã«ãšã¯ã¹ããŒããããã¯ã
ã·ã³ãã«ã
XS_å éš
ã·ã³ãã«ããšã¯ã¹ããŒãããã« XSUB ãšãã® C ãã©ã¡ãŒã¿ãŒ ãªã¹ãã宣èšãããã¯ãã
ããã¯ãxsubppãã«ãã£ãŠåŠçãããäžè¬ã« XSUB ããšã¯ã¹ããŒããããããæšå¥šãããŸãã
äžå¿ èŠãªèšå·ã
ã³ãŒââã«ãã㯠æ©èœ
call_argv
æå®ãããååä»ãããã³ããã±ãŒãžã¹ã³ãŒãã® Perl ãµãã«ãŒãã³ãžã®ã³ãŒã«ããã¯ãå®è¡ããŸãã
åŒæ°ãšããŠãargvãïŒNULL ã§çµããæååã®é åïŒã ãperlcallããåç §ããŠãã ããã
Perl ãšåçã®ããããã®å€: "&{"$sub_name"}(@$argv)"ã
泚: ãã®é¢æ°ã® perl_ 圢åŒã¯éæšå¥šã§ãã
I32 call_argv(const char* sub_nameãI32 ãã©ã°ã
char** åŒæ°)
åŒã³åºãã¡ãœãã
æå®ããã Perl ã¡ãœãããžã®ã³ãŒã«ããã¯ãå®è¡ããŸãã ç¥çŠããããªããžã§ã¯ãã¯ãªã³ã«ãªã£ãŠããå¿ èŠããããŸã
ã¹ã¿ãã¯ã ãperlcallããåç §ããŠãã ããã
泚: ãã®é¢æ°ã® perl_ 圢åŒã¯éæšå¥šã§ãã
I32 call_method(const char* ã¡ãœããåãI32 ãã©ã°)
call_pv æå®ããã Perl ãµãã«ãŒãã³ãžã®ã³ãŒã«ããã¯ãå®è¡ããŸãã ãperlcallããåç §ããŠãã ããã
泚: ãã®é¢æ°ã® perl_ 圢åŒã¯éæšå¥šã§ãã
I32 call_pv(const char* sub_nameãI32 ãã©ã°)
call_sv SV ã«ãã£ãŠæå®ããã Perl ãµãã«ãŒãã³ãžã®ã³ãŒã«ããã¯ãå®è¡ããŸãã
ãG_METHODããã©ã°ããG_METHOD_NAMEDããã©ã°ãæå®ãããŠããªãå ŽåãSV ã¯ä»»æã®å€ã«ãªããŸãã
CVãGVãCV ãžã®åç §ãGV ãžã®åç §ããŸãã¯ãSvPV(sv)ãã䜿çšãããŸã
åŒã³åºããµããŠãŒãã¡ãŒã®ååãšããŠã
ãG_METHODããã©ã°ãæå®ãããŠããå ŽåãSV 㯠CV ãŸãã¯
ãSvPV(sv)ãã¯ãåŒã³åºãã¡ãœããã®ååãšããŠäœ¿çšãããŸãã
ãG_METHOD_NAMEDããã©ã°ãæå®ãããŠããå ŽåããSvPV(sv)ããååãšããŠäœ¿çšãããŸãã
åŒã³åºãã¡ãœããã
ä»ã®äžéšã®å€ã¯å éšäœ¿çšã®ããã«ç¹å¥ã«æ±ãããããã䜿çšããªãã§ãã ããã
ã«äŸåããŠããã
ãperlcallããåç §ããŠãã ããã
泚: ãã®é¢æ°ã® perl_ 圢åŒã¯éæšå¥šã§ãã
I32 call_sv(SV* svãVOL I32 ãã©ã°)
ENTER ã³ãŒã«ããã¯ã§æ¬åŒ§ãéããŸãã ãLEAVEããš perlcall ãåç §ããŠãã ããã
å ¥å;
eval_pv ã¹ã«ã©ãŒ ã³ã³ããã¹ãã§æå®ãããæååããè©äŸ¡ãããSV* çµæãè¿ãããã« Perl ã«æ瀺ããŸãã
泚: ãã®é¢æ°ã® perl_ 圢åŒã¯éæšå¥šã§ãã
SV* eval_pv(const char* p, I32 croak_on_error)
eval_sv Perl ã« SV å ã®æååããè©äŸ¡ãããããã«æ瀺ããŸãã ãšåããã©ã°ããµããŒãããŸãã
ãcall_svãããã ããG_EVAL ã¯äŸå€ã§ãã ãperlcallããåç §ããŠãã ããã
泚: ãã®é¢æ°ã® perl_ 圢åŒã¯éæšå¥šã§ãã
I32 eval_sv(SV* svãI32 ãã©ã°)
FREETMPS
ã³ãŒã«ããã¯ã®äžæçãªå³æ¬åŒ§ã ãSAVETMPSããš perlcall ãåç §ããŠãã ããã
FREETMPS;
LEAVE ã³ãŒã«ããã¯ã®éãæ¬åŒ§ã ãENTERããš perlcall ãåç §ããŠãã ããã
é¢ãã;
SAVETMPS
ã³ãŒã«ããã¯ã®äžæçãªéå§ãã©ã±ããã ãFREETMPSããš perlcall ãåç §ããŠãã ããã
SAVETMPS;
æå å Žå å€å
toFOLD æå®ãããæåããã©ãŒã«ãã±ãŒã¹ã«å€æããŸãã å ¥åã
ASCII ã®å€§æåããã®å ¥åæåèªäœãè¿ãããŸãã å€ç°äœ
ãtoFOLD_Aãã¯åçã§ãã (å®å šãªãã¡ã€ã«ã«çžåœãããto_FOLD_L1ãã¯ãããŸããã
Latin1 ç¯å²ããtoFOLD_uniãã®å®å šãªæ±çšæ§ãããã§å¿ èŠãšãããããã§ãã)
U8 toFOLD(U8ch)
toFOLD_uni
Unicode ã³ãŒã ãã€ã³ããcpãããã®ãã©ãŒã«ãã±ãŒã¹ ããŒãžã§ã³ã«å€æããããã次ã®å Žæã«ä¿åããŸãã
ãsãã«ã¯ UTF-8ããlenpãã«ã¯ãã®ãã€ãæ°ã®é·ãã ãããã¡ã次ãæããŠããããšã«æ³šæããŠãã ããã
by "s" ã¯ãã©ãŒã«ãã±ãŒã¹ãªã®ã§å°ãªããšã "UTF8_MAXBYTES_CASE+1" ãã€ãã§ããå¿ èŠããããŸã
ããŒãžã§ã³ã¯å ã®ãââã£ã©ã¯ã¿ãŒãããé·ããªãå¯èœæ§ããããŸãã
ãã©ãŒã«ãã±ãŒã¹ ããŒãžã§ã³ã®æåã®ã³ãŒã ãã€ã³ããè¿ãããŸã (ãã ãã説æããããã«æ³šæããŠãã ãã)
ããäžã«ããã®ã§ãããã«ãããããããŸããã)
UV toFOLD_uni(UV cpãU8* sãSTRLEN* lenp)
toFOLD_utf8
ãpãã® UTF-8 ãšã³ã³ãŒãæåããã©ãŒã«ãã±ãŒã¹ ããŒãžã§ã³ã«å€æããæ ŒçŽããŸã
ãsã㯠UTF-8 ã§ã®å€ããlenpãã¯ãã€ãåäœã®é·ãã§ãã ãããã¡ã«æ³šæããŠãã ãã
"s" ãæãããŒã¿ã¯å°ãªããšã "UTF8_MAXBYTES_CASE+1" ãã€ãã§ããå¿ èŠããããŸãã
ãã©ãŒã«ãã±ãŒã¹çã¯ãªãªãžãã«ã®ãã£ã©ã¯ã¿ãŒãããé·ããªãå¯èœæ§ããããŸãã
ãã©ãŒã«ãã±ãŒã¹ ããŒãžã§ã³ã®æåã®ã³ãŒã ãã€ã³ããè¿ãããŸã (ãã ãã説æããããã«æ³šæããŠãã ãã)
ããäžã«ããã®ã§ãããã«ãããããããŸããã)
ãpãã®å ¥åæåã¯æŽåœ¢åŒã§ãããšæ³å®ãããŸãã
UV toFOLD_utf8(U8* pãU8* sãSTRLEN* lenp)
toLOWER æå®ãããæåãå°æåã«å€æããŸãã å ¥åã
ASCII ã®å€§æåããã®å ¥åæåèªäœãè¿ãããŸãã å€ç°äœ
ãtoLOWER_Aãã¯åçã§ãã
U8ïœLOWER(U8ch)
toLOWER_L1
æå®ããã Latin1 æåãå°æåã«å€æããŸãã çµæã¯æªå®çŸ©ã§ã
å ¥åããã€ãã«åãŸããªãå Žåã
U8ïœLOWER_L1(U8ch)
toLOWER_LC
æå®ãããæåãçŸåšã®ãã±ãŒã«ã®èŠåã䜿çšããŠå°æåã«å€æããŸãã
å¯èœ; ãã以å€ã®å Žåã¯ãå ¥åæåèªäœãè¿ããŸãã
U8 toLOWER_LC(U8ch)
toLOWER_uni
Unicode ã³ãŒããã€ã³ããcpããå°æåããŒãžã§ã³ã«å€æããããã次ã®å Žæã«æ ŒçŽããŸãã
ãsãã«ã¯ UTF-8ããlenpãã«ã¯ãã®ãã€ãæ°ã®é·ãã ãããã¡ã次ãæããŠããããšã«æ³šæããŠãã ããã
by "s" ã¯å°æåã§ãããããå°ãªããšã "UTF8_MAXBYTES_CASE+1" ãã€ãã§ããå¿ èŠããããŸã
ããŒãžã§ã³ã¯å ã®ãââã£ã©ã¯ã¿ãŒãããé·ããªãå¯èœæ§ããããŸãã
å°æåããŒãžã§ã³ã®æåã®ã³ãŒã ãã€ã³ããè¿ãããŸã (ãã ãã説æããããã«æ³šæããŠãã ãã)
ããäžã«ããã®ã§ãããã«ãããããããŸããã)
UV toLOWER_uni(UV cpãU8* sãSTRLEN* lenp)
toLOWER_utf8
ãpãã® UTF-8 ãšã³ã³ãŒãæåãå°æåããŒãžã§ã³ã«å€æããŠæ ŒçŽããŸãã
ãsã㯠UTF-8 ã§ã®å€ããlenpãã¯ãã€ãåäœã®é·ãã§ãã ãããã¡ã«æ³šæããŠãã ãã
"s" ãæãããŒã¿ã¯å°ãªããšã "UTF8_MAXBYTES_CASE+1" ãã€ãã§ããå¿ èŠããããŸãã
å°æåããŒãžã§ã³ã¯å ã®æåãããé·ããªãå¯èœæ§ããããŸãã
å°æåããŒãžã§ã³ã®æåã®ã³ãŒã ãã€ã³ããè¿ãããŸã (ãã ãã説æããããã«æ³šæããŠãã ãã)
ããäžã«ããã®ã§ãããã«ãããããããŸããã)
ãpãã®å ¥åæåã¯æŽåœ¢åŒã§ãããšæ³å®ãããŸãã
UV toLOWER_utf8(U8* p, U8* s, STRLEN* lenp)
toTITLE æå®ãããæåãã¿ã€ãã«ã±ãŒã¹ã«å€æããŸãã å ¥åã
ASCII å°æåã®å Žåããã®å ¥åæåèªäœãè¿ãããŸãã å€ç°äœ
ãtoTITLE_Aãã¯åçã§ãã (Latin1 ã®å šç¯å²ã«ã¯ãtoTITLE_L1ãã¯ãããŸããã
ããã§ã¯ãtoTITLE_uniãã®å®å šãªæ±çšæ§ãå¿ èŠãšãªãããã§ãã ã¿ã€ãã«ã±ãŒã¹ã¯
ãã±ãŒã«åŠçã§äœ¿çšãããæŠå¿µãªã®ã§ããã®ããã®æ©èœã¯ãããŸããã)
U8 toTITLE(U8ch)
toTITLE_uniãž
Unicode ã³ãŒããã€ã³ããcpããã¿ã€ãã«ã±ãŒã¹ã®ããŒãžã§ã³ã«å€æããããã次ã®å Žæã«ä¿åããŸãã
ãsãã«ã¯ UTF-8ããlenpãã«ã¯ãã®ãã€ãæ°ã®é·ãã ãããã¡ã次ãæããŠããããšã«æ³šæããŠãã ããã
by "s" ã¯ã¿ã€ãã«ã±ãŒã¹ããå°ãªããšã "UTF8_MAXBYTES_CASE+1" ãã€ãã§ããå¿ èŠããããŸã
ããŒãžã§ã³ã¯å ã®ãââã£ã©ã¯ã¿ãŒãããé·ããªãå¯èœæ§ããããŸãã
ã¿ã€ãã«ã±ãŒã¹ä»ãããŒãžã§ã³ã®æåã®ã³ãŒã ãã€ã³ããè¿ãããŸã (ãã ãã説æããããã«æ³šæããŠãã ãã)
ããäžã«ããã®ã§ãããã«ãããããããŸããã)
UV toTITLE_uni(UV cpãU8* sãSTRLEN* lenp)
toTITLE_utf8
ãpãã® UTF-8 ãšã³ã³ãŒãæåãã¿ã€ãã«ã±ãŒã¹ã®ããŒãžã§ã³ã«å€æããä¿åããŸã
ãsã㯠UTF-8 ã§ã®å€ããlenpãã¯ãã€ãåäœã®é·ãã§ãã ãããã¡ã«æ³šæããŠãã ãã
"s" ãæãããŒã¿ã¯å°ãªããšã "UTF8_MAXBYTES_CASE+1" ãã€ãã§ããå¿ èŠããããŸãã
ã¿ã€ãã«ã±ãŒã¹ã®ããŒãžã§ã³ã¯ãå ã®ãã£ã©ã¯ã¿ãŒãããé·ããªãå¯èœæ§ããããŸãã
ã¿ã€ãã«ã±ãŒã¹ä»ãããŒãžã§ã³ã®æåã®ã³ãŒã ãã€ã³ããè¿ãããŸã (ãã ãã説æããããã«æ³šæããŠãã ãã)
ããäžã«ããã®ã§ãããã«ãããããããŸããã)
ãpãã®å ¥åæåã¯æŽåœ¢åŒã§ãããšæ³å®ãããŸãã
UV toTITLE_utf8(U8* p, U8* s, STRLEN* lenp)
toUPPER æå®ãããæåã倧æåã«å€æããŸãã å ¥åã
ASCII å°æåã®å Žåããã®å ¥åæåèªäœãè¿ãããŸãã å€ç°äœ
ãtoUPPER_Aãã¯åçã§ãã
U8 toUPPER(U8ch)
UPPER_uniãž
Unicode ã³ãŒããã€ã³ããcpãã倧æåããŒãžã§ã³ã«å€æããããã次ã®å Žæã«æ ŒçŽããŸãã
ãsãã«ã¯ UTF-8ããlenpãã«ã¯ãã®ãã€ãæ°ã®é·ãã ãããã¡ã次ãæããŠããããšã«æ³šæããŠãã ããã
by "s" ã¯å€§æåã§ãããããå°ãªããšã "UTF8_MAXBYTES_CASE+1" ãã€ãã§ããå¿ èŠããããŸã
ããŒãžã§ã³ã¯å ã®ãââã£ã©ã¯ã¿ãŒãããé·ããªãå¯èœæ§ããããŸãã
倧æåããŒãžã§ã³ã®æåã®ã³ãŒã ãã€ã³ããè¿ãããŸã (ãã ãã説æããããã«æ³šæããŠãã ãã)
ããäžã«ããã®ã§ãããã«ãããããããŸããã)
UV toUPPER_uni(UV cpãU8* sãSTRLEN* lenp)
toUPPER_utf8
ãpãã® UTF-8 ãšã³ã³ãŒãæåã倧æåã«å€æããŠæ ŒçŽããŸãã
ãsã㯠UTF-8 ã§ã®å€ããlenpãã¯ãã€ãåäœã®é·ãã§ãã ãããã¡ã«æ³šæããŠãã ãã
"s" ãæãããŒã¿ã¯å°ãªããšã "UTF8_MAXBYTES_CASE+1" ãã€ãã§ããå¿ èŠããããŸãã
倧æåããŒãžã§ã³ã¯å ã®æåãããé·ããªãå¯èœæ§ããããŸãã
倧æåããŒãžã§ã³ã®æåã®ã³ãŒã ãã€ã³ããè¿ãããŸã (ãã ãã説æããããã«æ³šæããŠãã ãã)
ããäžã«ããã®ã§ãããã«ãããããããŸããã)
ãpãã®å ¥åæåã¯æŽåœ¢åŒã§ãããšæ³å®ãããŸãã
UV toUPPER_utf8(U8* p, U8* s, STRLEN* lenp)
æå åé¡
ãã®ã»ã¯ã·ã§ã³ã§ã¯ãæåãã¿ã€ãã«åé¡ããé¢æ° (å®éã«ã¯ãã¯ã) ã«ã€ããŠèª¬æããŸãã
å¥èªç¹ãšã¢ã«ãã¡ããããªã©ããããã®ã»ãšãã©ã¯æ£èŠè¡šçŸã«äŒŒãŠããŸãã
æåã¯ã©ã¹ã (perlrecharclass ã®ãPOSIX æåã¯ã©ã¹ããåç §ããŠãã ããã) ããã€ããããŸãã
åã¯ã©ã¹ã®ããªãšãŒã·ã§ã³ã (ãã¹ãŠã®ãã¯ãã«ãã¹ãŠã®ããªã¢ã³ããããããã§ã¯ãããŸããã以äžã®åé ç®ã«ã
ïŒãuse bytesãã®åœ±é¿ãåãããã®ã¯ãªãããLCããæã€ãã®ã ãã圱é¿ãåããŸãã
ååã¯çŸåšã®ãã±ãŒã«ã®åœ±é¿ãåããŸãã
åºæ¬é¢æ°ãããšãã°ãisALPHA()ãã¯ããªã¯ããã (ãcharããŸãã¯ãU8ã) ãå ¥åãšããŠåãåããŸãã
ãããŠããã®ãªã¯ãããã«ãã£ãŠè¡šãããæåã(ãŸãã¯
é ASCII ãã©ãããã©ãŒã ã§ã¯ã以äžã«åºã¥ãååä»ãã¯ã©ã¹ã® ASCII æåã«å¯Ÿå¿ããŸãã
ãã©ãããã©ãŒã ãUnicodeãããã³ Perl ã«ãŒã«ã å ¥åããªã¯ãããã«åãŸããªãæ°å€ã®å Žåã
FALSEãè¿ãããŸãã
ããªã¢ã³ã "isFOO_A" (äŸ: "isALPHA_A()") ã¯ããµãã£ãã¯ã¹ã®ãªãåºæ¬é¢æ°ãšåäžã§ã
ã_Aãã
ããªã¢ã³ããisFOO_L1ãã¯ãLatin-1 (ãŸã㯠EBCDIC åç) æåã»ããã
ãã©ããããŒã ã ã€ãŸããASCII ã¯ãµãã»ããã§ãããããASCII ã§ããã³ãŒã ãã€ã³ãã¯åœ±é¿ãåããŸããã
ã©ãã³èª-1ã®ã ãã ããé ASCII ã³ãŒã ãã€ã³ã㯠Latin-1 æåã§ãããã®ããã«æ±ãããŸãã
ããšãã°ããisWORDCHAR_L1()ãã¯ã³ãŒã ãã€ã³ã 0xDF ã§åŒã³åºããš true ãè¿ããŸãã
ãã㯠ASCII ãš EBCDIC ã®äž¡æ¹ã§åèªæåã§ã (ãã ããè¡šçŸã¯ç°ãªããŸã)
ããããã®æåïŒã
ããªã¢ã³ããisFOO_uniãã¯ãisFOO_L1ãããªã¢ã³ãã«äŒŒãŠããŸãããä»»æã® UV ã³ãŒã ãã€ã³ãã次ã®ããã«åãå ¥ããŸãã
å ¥åã ã³ãŒã ãã€ã³ãã 255 ãã倧ããå ŽåãUnicode ã«ãŒã«ã䜿çšããŠãã³ãŒã ãã€ã³ãã XNUMX ã§ãããã©ãããå€æãããŸãã
ãã£ã©ã¯ã¿ãŒã¯ã©ã¹ã§ã äŸãã°ã "isWORDCHAR_uni(0x100)" 㯠0x100 ã§ãããããTRUE ãè¿ããŸãã
Unicode ã® LATIN CAPITAL LETTER A WITH MACRON ã§ãããåèªæåã§ãã
ããªã¢ã³ããisFOO_utf8ãã¯ãisFOO_uniãã«äŒŒãŠããŸãããå ¥å㯠(æ¢ç¥ã®) ãžã®ãã€ã³ã¿ã§ãã
æŽåœ¢åŒ) UTF-8 ã§ãšã³ã³ãŒããããæåå (ãU8*ããŸãã¯ãchar*ã)ã åãªãåé¡ã§ã¯ã
æååå ã®æåã® (ãããããã«ããã€ã) æåããã¹ããããŸãã
ããªã¢ã³ããisFOO_LCãã¯ãisFOO_Aãããã³ãisFOO_L1ãããªã¢ã³ããšäŒŒãŠããŸãããçµæã¯æ¬¡ã®ãšããã§ãã
çŸåšã®ãã±ãŒã«ã§ãååã®ãLCãã¯ãããè¡šããŸãã Perl ãå€æã§ããå Žå
çŸåšã®ãã±ãŒã«ã UTF-8 ãã±ãŒã«ã§ããå Žåãå ¬éãããŠãã Unicode ã«ãŒã«ã䜿çšãããŸãã ãããªããšã
ååä»ãåé¡ãäžãã C ã©ã€ãã©ãªé¢æ°ã䜿çšããŸãã äŸãã°ã
UTF-8 ãã±ãŒã«ã§ã¯ãªãå ŽåããisDIGIT_LC()ãã¯ãisdigital()ããåŒã³åºããçµæãè¿ããŸãã
å ¥åããªã¯ãããã«åãŸããªãå Žåã¯ãåžžã« FALSE ãè¿ãããŸãã äžéšã®ãã©ãããã©ãŒã ã§ã¯ã
C ã©ã€ãã©ãªé¢æ°ã«æ¬ é¥ãããããšãããã£ãŠããå ŽåãPerl ã¯ãã®çµæã次ã®ããã«å€æŽããŸãã
POSIX æšæºã®èŠåã
ããªã¢ã³ããisFOO_LC_uvchrãã¯ãisFOO_LCããšäŒŒãŠããŸãããä»»æã® UV ã§å®çŸ©ãããŸãã è¿ãããã®ã¯ã
å ¥åã³ãŒããã€ã³ãã 256 æªæºã®å Žåã¯ãisFOO_LCããšåãã§ãããŒãã³ãŒãã£ã³ã°ããããã®ãè¿ããŸãã
ãã±ãŒã«ã®åœ±é¿ãåããããã倧ãããã®ã§ã¯ Unicode ã®çµæãåŸãããŸãã
ããªã¢ã³ããisFOO_LC_utf8ãã¯ãisFOO_LC_uvchrããšäŒŒãŠããŸãããå ¥å㯠(æ¢ç¥ã®) ãžã®ãã€ã³ã¿ãŒã§ãã
æŽåœ¢åŒã§ããããšïŒUTF-8 ã§ãšã³ã³ãŒããããæååïŒãU8*ããŸãã¯ãchar*ãïŒã ã¡ããã©ã®åé¡
æååå ã®æåã® (ãããããã«ããã€ã) æåããã¹ããããŸãã
isALPHA æå®ãããæåãã¢ã«ãã¡ããããã©ããã瀺ãããŒã«å€ãè¿ããŸãã
ãm/[[:alpha:]]/ãã«äŒŒãæåã 詳现ã«ã€ããŠã¯ããã®ã»ã¯ã·ã§ã³ã®äžéšãåç §ããŠãã ããã
ããªã¢ã³ããisALPHA_AãããisALPHA_L1ãããisALPHA_uniãããisALPHA_utf8ãã®èª¬æ
ãisALPHA_LCãããisALPHA_LC_uvchrãããisALPHA_LC_utf8ãã
bool isALPHA(char ch)
è±æ°å
æå®ãããæåã次ã®ããããã§ãããã©ããã瀺ãããŒã«å€ãè¿ããŸãã
ãm/[[:alnum:]]/ãã«é¡äŒŒããã¢ã«ãã¡ãããæåãŸã㯠XNUMX é²æ°ã äžéšãåç §
ããªã¢ã³ããisALPHANUMERIC_Aãã®èª¬æã«ã€ããŠã¯ããã®ã»ã¯ã·ã§ã³ãåç §ããŠãã ããã
"isALPHANUMERIC_L1"ã"isALPHANUMERIC_uni"ã"isALPHANUMERIC_utf8"ã
ãisALPHANUMERIC_LCãããisALPHANUMERIC_LC_uvchrããããã³ãisALPHANUMERIC_LC_utf8ãã
bool isALPHANUMERIC(char ch)
isASCII æå®ãããæåã 128 æåã®ããããã§ãããã©ããã瀺ãããŒã«å€ãè¿ããŸãã
ASCII æåã»ããã®æåããm/[[:ascii:]]/ãã«äŒŒãŠããŸãã é
ASCII ãã©ãããã©ãŒã ã§ã¯ããã®æåã ASCII ã«å¯Ÿå¿ããå Žå㯠TRUE ãè¿ããŸãã
ãã£ã©ã¯ã¿ãŒã ããªã¢ã³ã "isASCII_A()" ããã³ "isASCII_L1()" ã¯ã
ãisASCII()ãã ããªã¢ã³ãã®èª¬æã«ã€ããŠã¯ããã®ã»ã¯ã·ã§ã³ã®äžéšãåç §ããŠãã ããã
ãisASCII_uniãããisASCII_utf8ãããisASCII_LCãããisASCII_LC_uvchrããããã³
ãisASCII_LC_utf8ãã ãã ããäžéšã®ãã©ãããã©ãŒã ã«ã¯ C ã©ã€ãã©ãªããªãããšã«æ³šæããŠãã ããã
ã«ãŒãã³ãisascii()ãã ãã®å Žåãååã«ãLCããå«ãŸããããªã¢ã³ãã¯æ¬¡ã®ãšããã§ãã
ãªãã®å¯Ÿå¿ãããã®ãšåãã§ãã
ãŸãããã¹ãŠã® ASCII æå㯠UTF-8 ã§äžå€ã§ãããã (ã€ãŸãã
UTF-8 ã§ãšã³ã³ãŒããããŠãããã©ããã«é¢ä¿ãªãããŸã£ããåãè¡šçŸ (åžžã«åäžãã€ã) ãæã¡ãŸãã
ãŸãã¯ããã§ãªã)ããisASCIIãã¯ãä»»æã®ãã€ãã§åŒã³åºãããå Žåã«æ£ããçµæãè¿ããŸãã
UTF-8 ã§ãšã³ã³ãŒããããæååãã©ããã åæ§ã«ãisASCII_utf8ããæ£ããåäœããŸã
UTF-8 ã§ãšã³ã³ãŒããããŠãããã©ããã«ããããããä»»æã®æååã«å¯ŸããŠã
bool isASCII(char ch)
isBLANK æå®ãããæåãæåã§ãããã©ããã瀺ãããŒã«å€ãè¿ããŸãã
ãm/[[:blank:]]/ããšåæ§ã«ç©ºçœãšã¿ãªãããŸãã ãã®äžéšãåç §ããŠãã ãã
ããªã¢ã³ããisBLANK_AãããisBLANK_L1ãããisBLANK_uniãã®èª¬æã»ã¯ã·ã§ã³
ãisBLANK_utf8ãããisBLANK_LCãããisBLANK_LC_uvchrãããisBLANK_LC_utf8ãã ããŒãã
ãã ããäžéšã®ãã©ãããã©ãŒã ã«ã¯ C ã©ã€ãã©ãª ã«ãŒãã³ãisblank()ãããããŸããã ã®
ãã®å Žåãååã«ãLCããå«ãŸããããªã¢ã³ãã¯ã
察å¿ããŠããªããã®ã
bool isBLANK(char ch)
isCNTRL æå®ãããæåãã³ã³ãããŒã«ã§ãããã©ããã瀺ãããŒã«å€ãè¿ããŸãã
ãm/[[:cntrl:]]/ãã«äŒŒãæåã 詳现ã«ã€ããŠã¯ããã®ã»ã¯ã·ã§ã³ã®äžéšãåç §ããŠãã ããã
ããªã¢ã³ããisCNTRL_AãããisCNTRL_L1ãããisCNTRL_uniãããisCNTRL_utf8ãã®èª¬æã
ãisCNTRL_LCãããisCNTRL_LC_uvchrããããã³ãisCNTRL_LC_utf8ã EBCDIC ãã©ãããã©ãŒã ã§ã¯ã
ã»ãšãã©ã®å ŽåããisCNTRL_L1ãããªã¢ã³ãã䜿çšããå¿ èŠããããŸãã
bool isCNTRL(char ch)
isDIGIT æå®ãããæåãæ°åã§ãããã©ããã瀺ãããŒã«å€ãè¿ããŸãã
ãm/[[:digit:]]/ãã«ã ããªã¢ã³ããisDIGIT_AããšãisDIGIT_L1ãã¯æ¬¡ãšåäžã§ãã
ãisDIGITãã ããªã¢ã³ãã®èª¬æã«ã€ããŠã¯ããã®ã»ã¯ã·ã§ã³ã®äžéšãåç §ããŠãã ããã
ãisDIGIT_uniãããisDIGIT_utf8ãããisDIGIT_LCãããisDIGIT_LC_uvchrããããã³
ãisDIGIT_LC_utf8ãã
bool isDIGIT(char ch)
isGRAPH æå®ãããæåãã°ã©ãã£ãã¯ãã©ããã瀺ãããŒã«å€ãè¿ããŸãã
ãm/[[:graph:]]/ãã«äŒŒãæåã 詳现ã«ã€ããŠã¯ããã®ã»ã¯ã·ã§ã³ã®äžéšãåç §ããŠãã ããã
ããªã¢ã³ããisGRAPH_AãããisGRAPH_L1ãããisGRAPH_uniãããisGRAPH_utf8ãã®èª¬æã
ãisGRAPH_LCãããisGRAPH_LC_uvchrããããã³ãisGRAPH_LC_utf8ãã
bool isGRAPH(char ch)
isIDCONT
æå®ãããæåã XNUMX çªç®ãŸã㯠XNUMX çªç®ã®æåã§ãããã©ããã瀺ãããŒã«å€ãè¿ããŸãã
èå¥åã®åŸç¶æåã ããã¯ããã«éåžžã«è¿ãã§ãããå®å šã§ã¯ãããŸãã
å ¬åŒã® Unicode ããããã£ãXID_Continueããšåãã§ãã éãã¯ãããã¯ã
å ¥åæåããisWORDCHARãã«ãäžèŽããå Žåã«ã®ã¿ true ãè¿ããŸãã äžéšãåç §
ããªã¢ã³ããisIDCONT_AãããisIDCONT_L1ãããisIDCONT_LXNUMXãã®èª¬æã«ã€ããŠã¯ããã®ã»ã¯ã·ã§ã³ãåç §ããŠãã ããã
ãisIDCONT_uniãããisIDCONT_utf8ãããisIDCONT_LCãããisIDCONT_LC_uvchrããããã³
ãisIDCONT_LC_utf8ãã
bool isIDCONT(char ch)
ã¯IDFIRST
æå®ãããæåãæåã®æåã«ã§ãããã©ããã瀺ãããŒã«å€ãè¿ããŸãã
èå¥åã®æåã ããã¯æ¬¡ã®ãã®ã«éåžžã«è¿ãã§ããããŸã£ããåãã§ã¯ãããŸããã
å ¬åŒ Unicode ããããã£ãXID_Startãã éãã¯ããã㯠true ãè¿ãããšã§ã
å ¥åæåããisWORDCHARãã«ãäžèŽããå Žåã®ã¿ã ãã®äžéšãåç §ããŠãã ãã
ããªã¢ã³ããisIDFIRST_AãããisIDFIRST_L1ãã
ãisIDFIRST_uniãããisIDFIRST_utf8ãããisIDFIRST_LCãããisIDFIRST_LC_uvchrããããã³
ãisIDFIRST_LC_utf8ãã
bool isIDFIRST(char ch)
isLOWER æå®ãããæåãå°æåãã©ããã瀺ãããŒã«å€ãè¿ããŸãã
ãm/[[: lower:]]/ãã«äŒŒãæåã 詳现ã«ã€ããŠã¯ããã®ã»ã¯ã·ã§ã³ã®äžéšãåç §ããŠãã ããã
ããªã¢ã³ããisLOWER_AãããisLOWER_L1ãããisLOWER_uniãããisLOWER_utf8ãã®èª¬æ
ãisLOWER_LCãããisLOWER_LC_uvchrããããã³ãisLOWER_LC_utf8ãã
bool isLOWER(char ch)
isOCTAL æå®ãããæåã XNUMX é²æ°ãã©ããã瀺ãããŒã«å€ãè¿ããŸãã
[0-7]ã ããªã¢ã³ãã¯ãisOCTAL_AããšãisOCTAL_L1ãã® XNUMX ã€ã ãã§ãã ãããããåäžã§ã
ãisOCTALãã«ããŸãã
bool isOCTAL(char ch)
isPRINT æå®ãããæåãå°å·å¯èœãã©ããã瀺ãããŒã«å€ãè¿ããŸãã
ãm/[[:print:]]/ãã«äŒŒãæåã 詳现ã«ã€ããŠã¯ããã®ã»ã¯ã·ã§ã³ã®äžéšãåç §ããŠãã ããã
ããªã¢ã³ããisPRINT_AãããisPRINT_L1ãããisPRINT_uniãããisPRINT_utf8ãã®èª¬æã
ãisPRINT_LCãããisPRINT_LC_uvchrããããã³ãisPRINT_LC_utf8ãã
bool isPRINT(char ch)
ã¯PSXSPC
(Posix Space ã®ç¥) 5.18 以éãããã¯ãã¹ãŠã®åœ¢åŒã§æ¬¡ãšåãã§ãã
察å¿ãããisSPACE()ããã¯ãã ãã®ãã¯ãã®ãã±ãŒã«åœ¢åŒã¯æ¬¡ã®ãšããã§ãã
ãã¹ãŠã® Perl ãªãªãŒã¹ã®å¯Ÿå¿ãã "isSPACE()" 圢åŒãšåãã§ãã ã®
5.18 ããåã®ãªãªãŒã¹ã§ã¯ãéãã±ãŒã«åœ¢åŒã¯ãisSPACE()ã圢åŒãšã¯ç°ãªããŸãã
ãisSPACE()ããã©ãŒã ãåçŽã¿ããšäžèŽããªããšããç¹ã§ã®ã¿ã
ãisPSXSPC()ã圢åŒã¯ããããŸãã ãã以å€ã®å Žåã¯åäžã§ãã ãããã£ãŠããã®ãã¯ãã¯
æ£èŠè¡šçŸã§ãm/[[:space:]]/ããäžèŽãããã®ã«äŒŒãŠããŸãã äžéšãåç §
ããªã¢ã³ããisPSXSPC_AãããisPSXSPC_L1ãããisPSXSPC_LXNUMXãã®èª¬æã«ã€ããŠã¯ããã®ã»ã¯ã·ã§ã³ãåç §ããŠãã ããã
ãisPSXSPC_uniãããisPSXSPC_utf8ãããisPSXSPC_LCãããisPSXSPC_LC_uvchrããããã³
ãisPSXSPC_LC_utf8ãã
bool isPSXSPC(char ch)
isPUNCT æå®ãããæåãå¥èªç¹ã§ãããã©ããã瀺ãããŒã«å€ãè¿ããŸãã
ãm/[[:punct:]]/ãã«äŒŒãæåã ã®å®çŸ©ã«æ³šæããŠãã ããã
å¥èªç¹ã¯æã£ãã»ã©ç°¡åã§ã¯ãããŸããã ãPOSIX æåããåç §ããŠãã ããã
詳现ã«ã€ããŠã¯ãperlrecharclass ã®ãã¯ã©ã¹ããåç §ããŠãã ããã
ããªã¢ã³ããisPUNCT_AãããisPUNCT_L1ãããisPUNCT_uniãããisPUNCT_utf8ãã®èª¬æ
ãisPUNCT_LCãããisPUNCT_LC_uvchrããããã³ãisPUNCT_LC_utf8ãã
bool isPUNCT(char ch)
isSPACE æå®ãããæåã空çœãã©ããã瀺ãããŒã«å€ãè¿ããŸãã
ãã£ã©ã¯ã¿ãŒã ããã¯ãæ£èŠè¡šçŸã§ãm/\s/ããäžèŽãããã®ã«äŒŒãŠããŸãã
Perl 5.18 以éãããã¯ãm/[[:space:]]/ãã®åäœãšäžèŽããŸãã å ç«ã£ãŠ
5.18ããã®ãã¯ãã®ãã±ãŒã«åœ¢åŒã®ã¿ (ååã«ãLCããå«ãŸãããã®)
ããã¯ããm/[[:space:]]/ãã®åäœãšæ£ç¢ºã«äžèŽããŸãã ãããã®ãªãªãŒã¹ã§ã¯ãå¯äžã®
éãã±ãŒã«ã®ããªã¢ã³ãã®éãã¯ããisSPACE()ãã
åçŽã¿ãã (ãã¹ãŠã®åçŽã¿ãã«äžèŽãããã¯ãã«ã€ããŠã¯ããisPSXSPCããåç §ããŠãã ãã)
ïŒããªã¢ã³ãã®èª¬æã«ã€ããŠã¯ããã®ã»ã¯ã·ã§ã³ã®äžéšãåç §ããŠãã ããã
"isSPACE_A"ã"isSPACE_L1"ã"isSPACE_uni"ã"isSPACE_utf8"ã"isSPACE_LC"ã
ãisSPACE_LC_uvchrãããã³ãisSPACE_LC_utf8ãã
bool isSPACE(char ch)
isUPPER æå®ãããæåã倧æåãã©ããã瀺ãããŒã«å€ãè¿ããŸãã
ãm/[[:upper:]]/ãã«äŒŒãæåã 詳现ã«ã€ããŠã¯ããã®ã»ã¯ã·ã§ã³ã®äžéšãåç §ããŠãã ããã
ããªã¢ã³ããisUPPER_AãããisUPPER_L1ãããisUPPER_uniãããisUPPER_utf8ãã®èª¬æã
ãisUPPER_LCãããisUPPER_LC_uvchrããããã³ãisUPPER_LC_utf8ãã
bool isUPPER(char ch)
isWORDCHAR
æå®ãããæåã次ã®æåã§ãããã©ããã瀺ãããŒã«å€ãè¿ããŸãã
ã¯åèªæåã§ããããm/\w/ããšãm/[[:word:]]/ããäžèŽãããã®ã«äŒŒãŠããŸãã
æ£èŠè¡šçŸã åèªæåã¯ãã¢ã«ãã¡ããããXNUMX é²æ°åã
æ¥ç¶çšã®å¥èªç¹æå (ã¢ã³ããŒã¹ã³ã¢ãªã©)ããŸãã¯ãããŒã¯ãæå
ããã¯ãããã®ããããã«ä»å±ããŸãïŒããçš®ã®ã¢ã¯ã»ã³ãã®ããã«ïŒã ãisALNUM()ãã¯
åèªæåã«æ¬¡ã®ãã®ãå«ãŸããŠããå Žåã§ããäžäœäºææ§ã®ããã«æäŸãããå矩èª
æšæºç㪠C èšèªã®è±æ°åã®æå³ãè¶ ããŠããŸãã ãã®äžéšãåç §ããŠãã ãã
ããªã¢ã³ããisWORDCHAR_AãããisWORDCHAR_L1ãããisWORDCHAR_LXNUMXãã®èª¬æã®ã»ã¯ã·ã§ã³
ãisWORDCHAR_uniãããã³ãisWORDCHAR_utf8ãã "isWORDCHAR_LC"ã"isWORDCHAR_LC_uvchr"ã
ããã³ "isWORDCHAR_LC_utf8" ãããã§èª¬æãããŠãããšããã§ãããããã«
ãã©ãããã©ãŒã ã®ãã€ãã£ãã®ã¢ã³ããŒã¹ã³ã¢ã
bool isWORDCHAR(char ch)
isXDIGIT
æå®ãããæåã XNUMX é²æ°ãã©ããã瀺ãããŒã«å€ãè¿ããŸãã
æ¡ã ASCII ç¯å²ã§ã¯ããããã¯ã[0-9A-Fa-f]ãã§ãã ããªã¢ã³ããisXDIGIT_A()ãããã³
ãisXDIGIT_L1()ãã¯ãisXDIGIT()ããšåãã§ãã 詳现ã«ã€ããŠã¯ããã®ã»ã¯ã·ã§ã³ã®äžéšãåç §ããŠãã ããã
ããªã¢ã³ããisXDIGIT_uniãããisXDIGIT_utf8ãããisXDIGIT_LCãã®èª¬æã
ãisXDIGIT_LC_uvchrãããã³ãisXDIGIT_LC_utf8ãã
bool isXDIGIT(char ch)
ã¯ããŒãã³ã° an éèš³
perl_clone
çŸåšã®ã€ã³ã¿ãŒããªã¿ãŒã®ã¯ããŒã³ãäœæããŠãæ°ããã€ã³ã¿ãŒããªã¿ãŒãäœæããŠè¿ããŸãã
perl_clone ã¯æ¬¡ã®ãã©ã°ããã©ã¡ãŒã¿ãšããŠåãåããŸãã
CLONEf_COPY_STACKS - ã¹ã¿ãã¯ãã³ããŒããããã«ã䜿çšãããŸããããããªããã°ã
ããŒã¿ã®ã¯ããŒã³ãäœæããã¹ã¿ãã¯ããŒãã«ããŠãã¹ã¿ãã¯ãšæ°ãã Perl ãã³ããŒããŸãã
ã€ã³ã¿ããªã¿ã¯ãåã®ã€ã³ã¿ããªã¿ãšãŸã£ããåãæç¹ã§å®è¡ããæºåãã§ããŠããŸãã ã®
ç䌌ãã©ãŒã¯ ã³ãŒã㯠COPY_STACKS ã䜿çšããŸãããthreads->create ã¯äœ¿çšããŸããã
CLONEf_KEEP_PTR_TABLE - perl_clone ã¯ãå€ãããŒãã«ã®ãã€ã³ã¿ãæ〠ptr_table ãä¿æããŸãã
å€æ°ãããŒãšããŠãæ°ããå€æ°ãå€ãšããŠäœ¿çšãããšã次ã®ããšã確èªã§ããŸãã
äœããè€è£œãããŠãããå床è€è£œããã®ã§ã¯ãªããå€ã䜿çšããŠã
åç §ã«ãŠã³ããå¢ãããŸãã KEEP_PTR_TABLE ãèšå®ãããŠããªãå Žåãperl_clone ã¯
é¢æ°ãptr_table_free(PL_ptr_table); PL_ptr_table = NULL;ãã䜿çšãã ptr_tableã
ãããä¿æããçç±ã¯ãç¬èªã®å€æ°ã®äžéšãè€è£œãããå Žåã§ãã
ã°ã©ã Perl ã¹ãã£ã³ã®å€ã§ã¯ããã®ã³ãŒãã®äŸã¯ thread.xs create ã«ãããŸãã
CLONEf_CLONE_HOST - ãã㯠win32 ã®ãã®ã§ãunix ã§ã¯ç¡èŠãããperls ã«éç¥ãããŸãã
èªåèªèº«ãã¯ããŒã³ããããã® win32host ã³ãŒã (C++)ãããã¯ãå¿ èŠã«å¿ã㊠win32 ã§å¿ èŠã§ãã
åã«äœããå®è¡ãããå Žåã«ãXNUMX ã€ã®ã¹ã¬ãããåæã«å®è¡ããŸãã
Perl ã€ã³ã¿ããªã¿ãåé¢ãããããç Žæ£ããŠå ã®ã€ã³ã¿ããªã¿ã«æ»ããŸãã
äœãããå¿ èŠã¯ãããŸããã
PerlInterpreter* perl_clone(
Perlã€ã³ã¿ãŒããªã¿ *proto_perlã
UVãã©ã°
)
ã³ã³ãã€ã«æ ã¹ã³ãŒã ããã¯
Bhkç¡å¹
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
é©åãªãã£ãŒã«ããã¯ãªã¢ããŠããã® BHK æ§é å ã®ãšã³ããªãäžæçã«ç¡å¹ã«ããŸãã
ãã©ã°ã which ã©ã®ãšã³ããªãç¡å¹ã«ãããã瀺ãããªããã»ããµ ããŒã¯ã³ã§ãã
void BhkDISABLE(BHK *hkãã©ã)
BhkENABLE
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
é©åãªãã©ã°ãèšå®ããŠããã® BHK æ§é å ã®ãšã³ããªãå床æå¹ã«ããŸãã which
ã©ã®ãšã³ããªãæå¹ã«ãããã瀺ãããªããã»ããµ ããŒã¯ã³ã§ãã ããã¯ã¢ãµãŒãããŸãïŒäžã§ïŒ
-DDEBUGGING) ãšã³ããªã«æå¹ãªãã€ã³ã¿ãŒãå«ãŸããŠããªãå Žåã
void BhkENABLE(BHK *hkãã©ã)
BhkENTRY_set
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
BHK æ§é ã«ãšã³ããªãèšå®ãããããæå¹ã§ããããšã瀺ããã©ã°ãèšå®ããŸãã
which ã©ã®ãšã³ããªãèšå®ãããã瀺ãååŠçããŒã¯ã³ã§ãã ã®çš®é¡ PTR
ãšã³ããªãŒã«ãããŸãã
void BhkENTRY_set(BHK *hk, which, void *ptr)
ãããã¯ããã¯_ã¬ãžã¹ã¿
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
Perl ã®åå¥ã¹ã³ãŒããå€æŽããããšãã«åŒã³åºãããããã¯ã®ã»ãããç»é²ããŸãã
ã³ã³ãã€ã«æéã perlguts ã®ãã³ã³ãã€ã«æã®ã¹ã³ãŒã ããã¯ããåç §ããŠãã ããã
泚: ãã®é¢æ°ã¯ã次ã®ãã©ã¡ãŒã¿ãæå®ã㊠Perl_blockhook_register ãšããŠæ瀺çã«åŒã³åºãå¿ èŠããããŸãã
THX_ãã©ã¡ãŒã¿ã
void Perl_blockhook_register(pTHX_ BHK *hk)
COP æ瀺 ããã·ã¥
cophh_2hv
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
ããŒ/å€ã®å®å šãªã»ãããè¡šãæšæº Perl ããã·ã¥ãçæããŠè¿ããŸãã
èŠå®ã®ãã³ãã®ããã·ã¥å ã®ã㢠ã³ã. ãã©ã° ã¯çŸåšäœ¿çšãããŠããªãããããŒãã«ããå¿ èŠããããŸãã
HV * cophh_2hv(const COPHH *cophhãU32 ãã©ã°)
cophh_copy
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
èŠå®ã®ãã³ãã®ããã·ã¥ã®å®å šãªã³ããŒãäœæããŠè¿ããŸã ã³ã.
COPHH * cophh_copy(COPHH *cophh)
cophh_delete_pv
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
ãcophh_delete_pvnããšäŒŒãŠããŸãããæååã®ä»£ããã« NULL ã§çµããæååãåãåããŸãã
æåå/é·ãã®ãã¢ã
COPHH * cophh_delete_pv(const COPHH *cophh,
const char *ããŒãU32 ããã·ã¥ã
U32 ãã©ã°)
cophh_delete_pvn
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
èŠå®ãã³ãã®ããã·ã¥ããããŒãšããã«é¢é£ä»ããããå€ãåé€ããŸã ã³ããããã³è¿ããŸã
å€æŽãããããã·ã¥ã è¿ãããããã·ã¥ ãã€ã³ã¿ã¯éåžžãããã·ã¥ ãã€ã³ã¿ãšåãã§ã¯ãããŸããã
æž¡ãããããã·ã¥ ãã€ã³ã¿ãŒãå ¥åããã·ã¥ã¯é¢æ°ã«ãã£ãŠæ¶è²»ããã
ãããžã®ãã€ã³ã¿ã¯ãã®åŸäœ¿çšããŠã¯ãªããŸããã å¿ èŠã«å¿ããŠãcophh_copyãã䜿çšããŠãã ãã
äž¡æ¹ã®ããã·ã¥ã
ããŒã¯æ¬¡ã®ããã«æå®ãããŸãã ããŒPV ãš ããŒã¬ã³ã å Žå ãã©ã° ãCOPHH_KEY_UTF8ããããããã
èšå®ãããŠããå Žåãã㌠ãªã¯ããã㯠UTF-8 ãšããŠè§£éããããã以å€ã®å Žåã¯æ¬¡ã®ããã«è§£éãããŸãã
ã©ãã³èª-1ã ããã·ã¥ ããŒæååã®äºåã«èšç®ãããããã·ã¥ããŸãã¯äºåã«èšç®ãããŠããªãå Žåã¯ãŒãã§ãã
äºåèšç®æžã¿ã
COPHH * cophh_delete_pvn(COPHH *cophh,
const char *keypvã
STRLEN ããŒã¬ã³ãU32 ããã·ã¥ã
U32 ãã©ã°)
cophh_delete_pvs
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
ãcophh_delete_pvnããšäŒŒãŠããŸãããæåå/é·ãã®ä»£ããã«ãªãã©ã«æååãåãåããŸãã
ãã¢ã§ãããäºåèšç®ãããããã·ã¥ã¯ãããŸããã
COPHH * cophh_delete_pvs(const COPHH *cophh,
const char *ããŒãU32 ãã©ã°)
cophh_delete_sv
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
ãcophh_delete_pvnããšäŒŒãŠããŸãããæååãšé·ãã®ãã¢ã®ä»£ããã« Perl ã¹ã«ã©ãŒãåãåããŸãã
COPHH * cophh_delete_sv(const COPHH *cophh, SV *key,
U32 ããã·ã¥ãU32 ãã©ã°)
cophh_fetch_pv
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
ãcophh_fetch_pvnããšäŒŒãŠããŸãããæååã®ä»£ããã« NULL ã§çµããæååãåãåããŸãã
æåå/é·ãã®ãã¢ã
SV * cophh_fetch_pv(const COPHH *cophh,
const char *ããŒãU32 ããã·ã¥ã
U32 ãã©ã°)
cophh_fetch_pvn
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
èŠå®ã®ãã³ãã®ããã·ã¥ã§ãšã³ããªãæ€çŽ¢ããŸã ã³ã ã§æå®ãããããŒã䜿çšã㊠ããŒPV ãš
ããŒã¬ã³ã å Žå ãã©ã° ãCOPHH_KEY_UTF8ãããããèšå®ãããŠããå Žåãã㌠ãªã¯ãããã解éãããŸã
ãã以å€ã®å Žåã¯ãLatin-8 ãšããŠè§£éãããŸãã ããã·ã¥ äºåã«èšç®ãããããã·ã¥ã§ã
ããŒæååã®å€ããŸãã¯äºåèšç®ãããŠããªãå Žåã¯ãŒãã å®åœã®è ãè¿ã
ããŒã«é¢é£ä»ããããå€ã®ã¹ã«ã©ãŒ ã³ããŒããŸã㯠&PL_sv_placeholder (ååšããå Žå)
ããŒã«é¢é£ä»ããããå€ã¯ãããŸããã
SV * cophh_fetch_pvn(const COPHH *cophh,
const char *keypvã
STRLEN ããŒã¬ã³ãU32 ããã·ã¥ã
U32 ãã©ã°)
cophh_fetch_pvs
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
ãcophh_fetch_pvnããšäŒŒãŠããŸãããæåå/é·ãã®ä»£ããã«ãªãã©ã«æååãåãåããŸãã
ãã¢ã§ãããäºåèšç®ãããããã·ã¥ã¯ãããŸããã
SV * cophh_fetch_pvs(const COPHH *cophh,
const char *ããŒãU32 ãã©ã°)
cophh_fetch_sv
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
ãcophh_fetch_pvnããšäŒŒãŠããŸãããæååãšé·ãã®ãã¢ã®ä»£ããã« Perl ã¹ã«ã©ãŒãåãåããŸãã
SV * cophh_fetch_sv(const COPHH *cophh, SV *key,
U32 ããã·ã¥ãU32 ãã©ã°)
cophh_free
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
èŠå®ã®ãã³ãã®ããã·ã¥ãç Žæ£ãã ã³ããããã«é¢é£ä»ããããŠãããã¹ãŠã®ãªãœãŒã¹ã解æŸããŸãã
void cophh_free(COPHH *cophh)
cophh_new_empty
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
ãšã³ããªãå«ãŸãªãæ°ããèŠå®ãã³ã ããã·ã¥ãçæããŠè¿ããŸãã
COPHH * cophh_new_empty()
cophh_store_pv
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
ãcophh_store_pvnããšäŒŒãŠããŸãããæååã®ä»£ããã« NULL ã§çµããæååãåãåããŸãã
æåå/é·ãã®ãã¢ã
COPHH * cophh_store_pv(const COPHH *cophh,
const char *ããŒãU32 ããã·ã¥ã
SV *å€ãU32ãã©ã°)
cophh_store_pvn
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
ããŒã«é¢é£ä»ããããå€ãèŠå®ãã³ãã®ããã·ã¥ã«ä¿åããŸã ã³ããããã³è¿ããŸã
å€æŽãããããã·ã¥ã è¿ãããããã·ã¥ ãã€ã³ã¿ã¯éåžžãããã·ã¥ ãã€ã³ã¿ãšåãã§ã¯ãããŸããã
æž¡ãããããã·ã¥ ãã€ã³ã¿ãŒãå ¥åããã·ã¥ã¯é¢æ°ã«ãã£ãŠæ¶è²»ããã
ãããžã®ãã€ã³ã¿ã¯ãã®åŸäœ¿çšããŠã¯ãªããŸããã å¿ èŠã«å¿ããŠãcophh_copyãã䜿çšããŠãã ãã
äž¡æ¹ã®ããã·ã¥ã
ããŒã¯æ¬¡ã®ããã«æå®ãããŸãã ããŒPV ãš ããŒã¬ã³ã å Žå ãã©ã° ãCOPHH_KEY_UTF8ããããããã
èšå®ãããŠããå Žåãã㌠ãªã¯ããã㯠UTF-8 ãšããŠè§£éããããã以å€ã®å Žåã¯æ¬¡ã®ããã«è§£éãããŸãã
ã©ãã³èª-1ã ããã·ã¥ ããŒæååã®äºåã«èšç®ãããããã·ã¥ããŸãã¯äºåã«èšç®ãããŠããªãå Žåã¯ãŒãã§ãã
äºåèšç®æžã¿ã
å€ ãã®ããŒã«ä¿åããã¹ã«ã©ãŒå€ã§ãã å€ ããã«ãã£ãŠã³ããŒãããŸã
ãããã£ãŠããã®é¢æ°ã¯ãã®é¢æ°ãžã®åç §ã®æææš©ãååŸããŸããã
ã¹ã«ã©ãŒãžã®å€æŽã¯ãcop ãã³ãã«è¡šç€ºãããå€ã«ã¯åæ ãããŸããã
ããã·ã¥ã è€ååã®ã¹ã«ã©ãŒã¯åç §æŽåæ§ãä¿ã£ãŠä¿åãããŸãããã
æååã«åŒ·å¶ãããŸãã
COPHH * cophh_store_pvn(COPHH *cophh, const char *keypv,
STRLEN ããŒã¬ã³ãU32 ããã·ã¥ã
SV *å€ãU32ãã©ã°)
cophh_store_pvs
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
ãcophh_store_pvnããšäŒŒãŠããŸãããæåå/é·ãã®ä»£ããã«ãªãã©ã«æååãåãåããŸãã
ãã¢ã§ãããäºåèšç®ãããããã·ã¥ã¯ãããŸããã
COPHH * cophh_store_pvs(const COPHH *cophh,
const char *ããŒãSV *å€ã
U32 ãã©ã°)
cophh_store_sv
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
ãcophh_store_pvnããšäŒŒãŠããŸãããæååãšé·ãã®ãã¢ã®ä»£ããã« Perl ã¹ã«ã©ãŒãåãåããŸãã
COPHH * cophh_store_sv(const COPHH *cophh, SV *key,
U32 ããã·ã¥ãSV *å€ãU32 ãã©ã°)
COP æ瀺 ãªãŒãã£ã³ã°
cop_hints_2hv
ãã³ãã®å®å šãªã»ãããè¡šãæšæº Perl ããã·ã¥ãçæããŠè¿ããŸãã
èŠå¯ãžã®ãšã³ããªãŒ èŠå®. ãã©ã° ã¯çŸåšäœ¿çšãããŠããªãããããŒãã«ããå¿ èŠããããŸãã
HV * cop_hints_2hv(const COP *copãU32 ãã©ã°)
cop_hints_fetch_pv
ãcop_hints_fetch_pvnããšäŒŒãŠããŸãããæååã®ä»£ããã« NULL ã§çµããæååãåãåããŸãã
æåå/é·ãã®ãã¢ã
SV * cop_hints_fetch_pv(const COP *cop,
const char *ããŒãU32 ããã·ã¥ã
U32 ãã©ã°)
cop_hints_fetch_pvn
èŠå¯ã®ãã³ããšã³ããªã調ã¹ã èŠå® ã§æå®ãããããŒã䜿çšã㊠ããŒPV ãš ããŒã¬ã³.
If ãã©ã° ãCOPHH_KEY_UTF8ãããããèšå®ãããŠããå Žåãã㌠ãªã¯ãããã¯æ¬¡ã®ããã«è§£éãããŸãã
UTF-8ããã以å€ã®å Žå㯠Latin-1 ãšããŠè§£éãããŸãã ããã·ã¥ äºåã«èšç®ãããããã·ã¥ã§ã
ããŒæååããŸãã¯äºåèšç®ãããŠããªãå Žåã¯ãŒãã mortal ã¹ã«ã©ãŒãè¿ããŸã
ããŒã«é¢é£ä»ããããå€ã®ã³ããŒããŸã㯠&PL_sv_placeholder (ååšããªãå Žå)
ããŒã«é¢é£ä»ããããå€ã
SV * cop_hints_fetch_pvn(const COP *cop,
const char *keypvã
STRLEN ããŒã¬ã³ãU32 ããã·ã¥ã
U32 ãã©ã°)
cop_hints_fetch_pvs
ãcop_hints_fetch_pvnããšäŒŒãŠããŸãããæåå/é·ãã®ä»£ããã«ãªãã©ã«æååãåãåããŸãã
ãã¢ã§ãããäºåèšç®ãããããã·ã¥ã¯ãããŸããã
SV * cop_hints_fetch_pvs(const COP *cop,
const char *ããŒãU32 ãã©ã°)
cop_hints_fetch_sv
ãcop_hints_fetch_pvnããšäŒŒãŠããŸãããæåå/é·ãã®ä»£ããã« Perl ã¹ã«ã©ãŒãåãåããŸã
ãã¢ã
SV * cop_hints_fetch_sv(const COP *cop, SV *key,
U32 ããã·ã¥ãU32 ãã©ã°)
ã«ã¹ã¿ã ãªãã¬ãŒã¿ãŒ
ã«ã¹ã¿ã ãªãã¬ãžã¹ã¿
ã«ã¹ã¿ã ãªãã¬ãŒã·ã§ã³ãç»é²ããŸãã perlguts ã®ãã«ã¹ã¿ã æŒç®åããåç §ããŠãã ããã
泚: ãã®é¢æ°ã¯ã次ã®ãã©ã¡ãŒã¿ãæå®ã㊠Perl_custom_op_register ãšããŠæ瀺çã«åŒã³åºãå¿ èŠããããŸãã
THX_ãã©ã¡ãŒã¿ã
void Perl_custom_op_register(pTHX_
Perl_ppaddr_t ppaddrã
const XOP *xop)
ã«ã¹ã¿ã ãªã_xop
æå®ãããã«ã¹ã¿ã æŒç®ã® XOP æ§é ãè¿ããŸãã ãã®ãã¯ããèæ ®ããå¿ èŠããããŸã
OP_NAME ããã³ãã®ä»ã®ã¢ã¯ã»ã¹ ãã¯ãã®å éš: 代ããã«ãããã䜿çšããŠãã ããã ãã®ãã¯ã
é¢æ°ãåŒã³åºããŸãã 5.19.6 ããåã¯ãããã¯é¢æ°ãšããŠå®è£ ãããŠããŸããã
泚: ãã®é¢æ°ã¯ãaTHX_ ãæå®ã㊠Perl_custom_op_xop ãšããŠæ瀺çã«åŒã³åºãå¿ èŠããããŸãã
ãã©ã¡ãŒã¿ã«äžèŽããæåã®ããã€ã¹ã®ãªã¢ãŒãã³ã³ãããŒã« URL ãè¿ããŸãã
const XOP * Perl_custom_op_xop(pTHX_ const OP *o)
XopDISABLE
é©åãªãã©ã°ãã¯ãªã¢ããŠãXOP ã®ã¡ã³ããŒãäžæçã«ç¡å¹ã«ããŸãã
void XopDISABLE(XOP *xopãã©ã)
XopENABLE
ç¡å¹ã«ãªã£ã XOP ã®ã¡ã³ããŒãå床æå¹ã«ããŸãã
void XopENABLE(XOP *xopãã©ã)
XopENTRY
XOP æ§é äœã®ã¡ã³ããŒãè¿ããŸãã which ã©ã®ãšã³ããªã瀺ã cpp ããŒã¯ã³ã§ã
æ»ãããã«ã ã¡ã³ããŒãèšå®ãããŠããªãå Žåãããã©ã«ãå€ãè¿ãããŸãã ãªã¿ãŒã³
ã¿ã€ãã¯ã«ãã£ãŠç°ãªããŸã whichã ãã®ãã¯ãã¯åŒæ°ãè€æ°åè©äŸ¡ããŸãã ããããããã
ãPerl_custom_op_xopãã䜿çšããŠãOP *ããããXOP *ããååŸããŠããå Žåã¯ãããã«å€ãã®ãã®ã䜿çšããŸã
代ããã«å¹ççãªãXopENTRYCUSTOMãã䜿çšããŠãã ããã
XopENTRY(XOP *xopãã©ã)
XopENTRYCUSTOM
ãXopENTRY(XopENTRY(Perl_custom_op_xop(aTHX_ o), which)ããšãŸã£ããåãã§ããããã以äžã§ã
å¹ççã ã® which ãã©ã¡ãŒã¿ã¯ãXopENTRYããšåãã§ãã
XopENTRYCUSTOM(const OP *oãã©ã)
XopENTRY_set
XOPæ§é äœã®ã¡ã³ããŒãèšå®ããŸãã which ã©ã®ãšã³ããªã察象ã«ãããã瀺ã cpp ããŒã¯ã³ã§ãã
èšå®ã 䜿çšå¯èœãªã¡ã³ããŒã®è©³çŽ°ã«ã€ããŠã¯ãperlguts ã®ãã«ã¹ã¿ã ãªãã¬ãŒã¿ãŒããåç §ããŠãã ããã
ãããŠããããã©ã®ããã«äœ¿ããããã ãã®ãã¯ãã¯åŒæ°ãè€æ°åè©äŸ¡ããŸãã
void XopENTRY_set(XOP *xop, ã©ã, å€)
XopFLAGS
XOP ã®ãã©ã°ãè¿ããŸãã
U32 XopFLAGS(XOP *xop)
CV æäœ æ©èœ
ãã®ã»ã¯ã·ã§ã³ã§ã¯ãã³ãŒãå€ãŸãã¯ãµãã«ãŒãã³ã§ãã CV ãæäœããé¢æ°ã«ã€ããŠèª¬æããŸãã
詳现ã«ã€ããŠã¯ããperlgutsããåç §ããŠãã ããã
åŒã³åºãå _cx
XSUB ã©ã€ã¿ãŒã«çžåœãããã® callerïŒïŒã è¿ããããPERL_CONTEXTãæ§é äœ
ãåŒã³åºãå ãã«ãã£ãŠ Perl ã«è¿ããããã¹ãŠã®æ å ±ãèŠã€ããããã«åãåãããããšãã§ããŸãã
XSUB ã¯ã¹ã¿ã㯠ãã¬ãŒã ãååŸããªãã®ã§ããcaller_cx(0, NULL)ããè¿ãããããšã«æ³šæããŠãã ããã
ããåšå²ã® Perl ã³ãŒãã®æ å ±ã
ãã®é¢æ°ã¯ã&DB::sub ãžã®èªååŒã³åºããã¹ãããããŸãã
ãããã¬ã èŠæ±ãããã¹ã¿ã㯠ãã¬ãŒã ããDB::subãã«ãã£ãŠåŒã³åºããããµãã«ãŒãã³ã§ããå Žåãæ»ãå€ã¯
value ã¯ãæ£ããè¡ãããããããDB::subããžã®åŒã³åºãã®ãã¬ãŒã ã«ãªããŸãã
çªå·/ãªã©é話ãµã€ãçšã ããã dbcxp ãNULLã以å€ã®å Žåã¯ãã«èšå®ãããŸãã
ãµãã³ãŒã«èªäœã®ãã¬ãŒã ãžã®ãã€ã³ã¿ã
const PERL_CONTEXT * caller_cx(
I32ã¬ãã«ã
const PERL_CONTEXT **dbcxp
)
CvSTASH CV ã®ã¹ã¿ãã·ã¥ãè¿ããŸãã ã¹ã¿ãã·ã¥ã¯ãã·ã³ãã« ããŒãã«ã®ããã·ã¥ã§ããã
ãµãã«ãŒãã³ãå®çŸ©ãããããã±ãŒãžå ã®ããã±ãŒãžã¹ã³ãŒãå€æ°ã ããã«
詳现ã«ã€ããŠã¯ãperlguts ãåç §ããŠãã ããã
ããã¯ãXS AUTOLOAD ãµãã·ã¹ãã ã§ãç¹å¥ã«äœ¿çšãããŸãã ãXSUB ã«ããèªåããŒãããåç §ããŠãã ããã
ããŒã«ã¬ããã§ã
HV* CVSTASH(CV* CV)
find_runcv
çŸåšå®è¡äžã® sub ãŸã㯠eval ã«å¯Ÿå¿ãã CV ãèŠã€ããŸãã db_seqp ã
non_nullãDB ããã±ãŒãžå ã® CV ãã¹ããããã*db_seqp ã« cop ãèšå®ããŸãã
DB:: ã³ãŒããå ¥åãããæç¹ã®ã·ãŒã±ã³ã¹çªå·ã (ããã«ããã
ãããã¬ã¯ããã¬ãŒã¯ãã€ã³ãã®ã¹ã³ãŒãã§ã¯ãªããã¬ãŒã¯ãã€ã³ãã®ã¹ã³ãŒãã§è©äŸ¡ããŸãã
ãããã¬èªäœãïŒ
CV* find_runcv(U32 *db_seqp)
get_cv ãstrlenãã䜿çšããŠãnameãã®é·ããååŸãããget_cvn_flagsããåŒã³åºããŸãã
泚: ãã®é¢æ°ã® perl_ 圢åŒã¯éæšå¥šã§ãã
CV* get_cv(const char* ååãI32 ãã©ã°)
get_cvn_flags
æå®ããã Perl ãµãã«ãŒãã³ã® CV ãè¿ããŸãã ããã©ã°ããæž¡ãããã®ã¯
ãgv_fetchpvn_flagsãã ãGV_ADDããèšå®ãããŠãããPerlãµãã«ãŒãã³ãååšããªãå Žå
ãã®åŸãããã宣èšãããŸã (ããã¯ããµãå;ããšèšãã®ãšåãå¹æããããŸã)ã ããã
ãGV_ADDããèšå®ãããŠãããããµãã«ãŒãã³ãååšããªãå Žåã¯ãNULL ãè¿ãããŸãã
泚: ãã®é¢æ°ã® perl_ 圢åŒã¯éæšå¥šã§ãã
CV* get_cvn_flags(const char* åå, STRLEN len,
I32 ãã©ã°)
ãããã®ã³ã° ãŠãŒãã£ãªãã£
ãã³ããªãŒã«
ãPL_main_rootãã§å§ãŸãçŸåšã®ããã°ã©ã ã® optree å šäœããã³ãããŸãã
ãSTDERRãã ãŸãããPL_defstashãã«è¡šç€ºãããŠãããã¹ãŠã®ãµãã«ãŒãã³ã® optree ããã³ãããŸãã
void dump_all()
dump_packsubs
ãstashãå ã®ãã¹ãŠã®è¡šç€ºå¯èœãªãµãã«ãŒãã³ã® optree ããã³ãããŸãã
void dump_packsubs(const HV* ã¹ã¿ãã·ã¥)
op_dump OP "o" ããå§ãŸã optree ã "STDERR" ã«ãã³ãããŸãã
void op_dump(const OP *o)
sv_dump SV ã®å 容ããSTDERRããã¡ã€ã«ãã³ãã«ã«ãã³ãããŸãã
åºåã®äŸã«ã€ããŠã¯ããDevel::Peekããåç §ããŠãã ããã
void sv_dump(SV* sv)
ãã£ã¹ãã¬ã€ ãš ãã³ã æ©èœ
pv_display
ãããŠ
pv_escape(dsv,pv,cur,pvlim,PERL_PV_ESCAPE_QUOTE);
ãã ããlen > cur ã®å Žåãæååã«è¿œå ã®ã\0ããè¿œå ãããŸãã
pv[cur] ã¯ã\0ãã§ãã
æåŸã®æåå㯠pvlim ãããæ倧 7 æåé·ããªãå¯èœæ§ãããããšã«æ³šæããŠãã ããã
char* pv_display(SV *dsv, const char *pv, STRLEN cur,
STRLEN lenãSTRLEN pvlim)
pv_escape
pv ã®æåã®ãcountãæåã ãããšã¹ã±ãŒãããçµæã次ã®ãã㪠dsv ã«å ¥ããŸãã
ãšã¹ã±ãŒããããæååã®ãµã€ãºããæ倧ãæåæ°ãè¶ ããªãããšã
äžå®å šãªãšã¹ã±ãŒã ã·ãŒã±ã³ã¹ãå«ãŸããŠããŸãã ãšã¹ã±ãŒãããããã€ãæ°ã¯æ¬¡ã®ããã«ãªããŸãã
null ã§ãªãå Žåã¯ãSTRLEN *escaped ãã©ã¡ãŒã¿ã§è¿ãããŸãã DSV ã®ãšã
ãã©ã¡ãŒã¿ã null ã®å Žåãå®éã«ã¯ãšã¹ã±ãŒãã¯è¡ãããŸãããããšã¹ã±ãŒãããããã€ãæ°ã¯
ãšã¹ã±ãŒããããªãå Žå㯠null ãèšç®ãããŸãã
flags ã« PERL_PV_ESCAPE_QUOTE ãå«ãŸããå Žåãæååå ã®äºéåŒçšç¬Šã¯ãã¹ãŠ
éããããããšããããŸãã
éåžžãSV ã¯ãšã¹ã±ãŒãæååãæºåãããåã«ã¯ãªã¢ãããŸããã
PERL_PV_ESCAPE_NOCLEAR ãèšå®ãããŠããå Žåãããã¯çºçããŸããã
PERL_PV_ESCAPE_UNI ãèšå®ãããŠããå Žåãå ¥åæååã¯æ¬¡ã®å Žåã« UTF-8 ãšããŠæ±ãããŸãã
PERL_PV_ESCAPE_UNI_DETECT ãèšå®ãããŠããå Žåãå ¥åæååã¯æ¬¡ã䜿çšããŠã¹ãã£ã³ãããŸãã
ãis_utf8_string()ãã§UTF-8ãã©ãããå€æããŸãã
PERL_PV_ESCAPE_ALL ãèšå®ãããŠããå Žåããã¹ãŠã®å ¥åæåã¯ã\x01F1ãã䜿çšããŠåºåãããŸãã
ã¹ã¿ã€ã«ãšã¹ã±ãŒããããã§ãªãå ŽåãPERL_PV_ESCAPE_NONASCII ãèšå®ãããŠããå Žåã¯ãé ASCII æåã®ã¿
ãã®ã¹ã¿ã€ã«ã䜿çšããŠãšã¹ã±ãŒããããŸãã ãã以å€ã®å Žåã¯ã255 ãè¶ ããæåã®ã¿ããããªããŸãã
éããã ä»ã®å°å·äžå¯èœãªæåã¯ãXNUMX é²æ°ãŸãã¯æ¬¡ã®ãããªäžè¬çãªãšã¹ã±ãŒã ãã¿ãŒã³ã䜿çšããŸãã
ã\nãã ãã以å€ã®å ŽåãPERL_PV_ESCAPE_NOBACKSLASH ã®å Žåã255 ããäžã®ãã¹ãŠã®æåã¯
å°å·å¯èœãšããŠæ±ããããªãã©ã«ãšããŠåºåãããŸãã
PERL_PV_ESCAPE_FIRSTCHAR ãèšå®ãããŠããå Žåãæååã®æåã®æåã®ã¿ãèšå®ãããŸãã
æ倧å€ã«é¢ä¿ãªãéããŸããã åºåã XNUMX é²æ°ã§ããå Žåã¯ã次ã®ããã«ãªããŸãã
ãã¬ãŒã³ãª XNUMX é²ã·ãŒã±ã³ã¹ãšããŠè¿ãããŸãã ãããã£ãŠãåºåã¯åäžã®æåããŸãã¯
XNUMX é²æ°ã®ãšã¹ã±ãŒã ã·ãŒã±ã³ã¹ãã\nããªã©ã®ç¹æ®ãªãšã¹ã±ãŒãããŸã㯠XNUMX é²æ°ã®å€ã
PERL_PV_ESCAPE_RE ãèšå®ãããŠããå Žåã䜿çšããããšã¹ã±ãŒãæåã¯ã%ãã§ã¯ãªãã%ãã«ãªããŸãã
ã\\ãã ããã¯ãæ£èŠè¡šçŸã«ã¯ããã¯ã¹ã©ãã·ã¥ä»ãã·ãŒã±ã³ã¹ãå«ãŸããããšãéåžžã«å€ãããã§ãã
ã%ãã¯ãã¿ãŒã³ã§ã¯ç¹ã«äžè¬çãªæåã§ã¯ãããŸããã
dsv ãä¿æãããšã¹ã±ãŒããããããã¹ããžã®ãã€ã³ã¿ãè¿ããŸãã
char* pv_escape(SV *dsv, char const * const str,
const STRLEN ã«ãŠã³ããconst STRLEN æ倧ã
STRLEN * const ããšã¹ã±ãŒãããã
const U32 ãã©ã°)
pv_pretty
æååã衚瀺å¯èœãªãã®ã«å€æãããšã¹ã±ãŒããåŠçããŸãã pv_escape()
åŒçšç¬Šãšçç¥èšå·ããµããŒãããŸãã
PERL_PV_PRETTY_QUOTE ãã©ã°ãèšå®ãããŠããå Žåãçµæã¯æ¬¡ã®äºéåŒçšç¬Šã§å²ãŸããŸãã
æååå ã®äºéåŒçšç¬Šã¯ãšã¹ã±ãŒããããŸããã ãã以å€ã®å ŽåãPERL_PV_PRETTY_LTGT
ãã©ã°ãèšå®ãããŠããå Žåãçµæã¯å±±ãã£ãã§å²ãŸããŸãã
PERL_PV_PRETTY_ELLIPSES ãã©ã°ãèšå®ãããŠããŠãæååå ã®ãã¹ãŠã®æåãèšå®ãããŠããªãå Žå
åºåãããšãæååã«çç¥èšå·ã...ããè¿œå ãããŸãã ããã«æ³šæããŠãã ãã
åŒçšãããåŸã«çºçããŸãã
start_color ã null 以å€ã®å Žåãéå§åŒçšç¬Šã®åŸã«æ¿å ¥ãããŸã (
XNUMX ã€ãããŸãïŒãããšã¹ã±ãŒããããããã¹ãã®åã«ãããŸãã end_color ã null ã§ãªãå Žåã¯ã
ãšã¹ã±ãŒããããããã¹ãã®åŸãåŒçšç¬ŠãŸãã¯çç¥èšå·ã®åã«æ¿å ¥ãããŸãã
dsv ãä¿æããæŽåœ¢ãããããã¹ããžã®ãã€ã³ã¿ãè¿ããŸãã
char* pv_pretty(SV *dsv, char const * const str,
const STRLEN ã«ãŠã³ããconst STRLEN æ倧ã
char const * const start_colorã
char const * const end_colorã
const U32 ãã©ã°)
åã蟌㿠æ©èœ
cv_clone
CV ãè€è£œããŠãåå¥ã¯ããŒãžã£ãäœæããŸãã ããã ã®ãããã¿ã€ããæäŸããŸã
æ©èœ: ã³ãŒãããããæ§é ããã®ä»ã®å±æ§ã ååã¯
ã³ãŒããåç §ããå€éšèªåœã®ãã£ããã£ãšçµã¿åãããŸãã
ããåšå²ã®ã³ãŒãã®çŸåšå®è¡äžã®ã€ã³ã¹ã¿ã³ã¹ããååŸãããŸãã
CV * cv_clone(CV *ããã)
cv_name äž»ã«ãšã©ãŒå ±åã«äœ¿çšããããã«ãCV ã®ååãå«ã SV ãè¿ããŸãã
CV ã¯å®éã«ã¯ GV ã§ããå¯èœæ§ãããããã®å Žåãè¿ããã SV ã«ã¯ GV ãä¿æãããŸãã
ååã GV ãŸã㯠CV 以å€ã®ãã®ã¯ããã§ã«ä¿æãããŠããæååãšããŠæ±ãããŸãã
ãµãããŒã ã§ãããå°æ¥å€æŽãããå¯èœæ§ããããŸãã
SV 㯠XNUMX çªç®ã®åŒæ°ãšããŠæž¡ãããšãã§ããŸãã ããã§ããã°ãååãå²ãåœãŠãããŸã
ãããŠããã¯è¿ãããŸãã ãã以å€ã®å Žåãè¿ããã SV ã¯æ°ããå®åœã®è ã«ãªããŸãã
Status ãã©ã° CV_NAME_NOTQUAL ãå«ãããšãããã±ãŒãžåã¯å«ãŸããŸããã
æåã®åŒæ°ã CV ã§ã GV ã§ããªãå Žåããã®ãã©ã°ã¯ç¡èŠãããŸã (
å€åããïŒã
SV * cv_name(CV *cvãSV *svãU32 ãã©ã°)
cv_undef
CV ã®ã¢ã¯ãã£ããªã³ã³ããŒãã³ãããã¹ãŠã¯ãªã¢ããŸãã ããã¯ã次ã®ããããã®åå ã§çºçããå¯èœæ§ããããŸãã
æ瀺çãªãundef &fooãããŸãã¯åç §ã«ãŠã³ãããŒãã«ãªãããšã«ãã£ãŠã åè ã§
ãã®å ŽåãCvOUTSIDE ãã€ã³ã¿ãä¿æããå¿åã®åãåŒãç¶ãã¢ã¯ã»ã¹ã§ããããã«ããŸãã
å®å šãªèªåœç¯å²ãã§ãŒã³ã«åŸããŸãã
void cv_undef(CV* cv)
find_rundefsv
ã®åå¥ã¹ã³ãŒãå 㧠$_ ãšããååã®å€æ°ãæ€çŽ¢ããŠè¿ããŸãã
çŸåšå®è¡äžã®é¢æ°ã ããã¯åå¥ $_ ã§ããå ŽåããããŸããããã以å€ã®å Žåã¯
ã°ããŒãã«ãªãã®ã
SV * find_rundefsv()
find_rundefsvoffset
å»æ¢ãããŸãã! ãã®é¢æ°ã¯ Perl ã®å°æ¥ã®ãªãªãŒã¹ããåé€ãããäºå®ã§ãã
æ°ããã³ãŒãã«ã¯äœ¿çšããªãã§ãã ããã æ¢åã®ã³ãŒãããåé€ããŠãã ããã
çŸåšå®è¡äžã®ãããå ã§åå¥ $_ ã®äœçœ®ãèŠã€ããŸãã
é¢æ°ã çŸåšã®ãããã®ãªãã»ãããè¿ããŸãããããããªãå Žåã¯ãNOT_IN_PADããè¿ããŸãã
ã¹ã³ãŒãå ã®åå¥ $_ (ãã®å Žåã代ããã«ã°ããŒãã«ãªãã®ã䜿çšããå¿ èŠããããŸã)ã
ãfind_rundefsvãã®æ¹ã䟿å©ããã§ãã
泚: ãã®é¢æ°ã® perl_ 圢åŒã¯éæšå¥šã§ãã
PADOFFSET find_rundefsvoffset()
ã€ã³ãã_ãã€
ãç§ã®ãå€æ°ãå¯èŠã¹ããŒã¿ã¹ã«ãå°å ¥ãããŸãã ããã¯ã次ã®å Žæã§è§£æäžã«åŒã³åºãããŸãã
åã¹ããŒãã¡ã³ãã®çµããã§ãåŸç¶ã®ã¹ããŒãã¡ã³ãã§åå¥å€æ°ãèŠããããã«ããŸãã
ã¹ããŒãã¡ã³ãã
U32 ã€ã³ãã_my()
ããŒãã¢ãžã¥ãŒã«
ååã®æååéšåãæãååã®ã¢ãžã¥ãŒã«ãããŒãããŸãã ãäºæ¿ãã ãã
ãã¡ã€ã«åã§ã¯ãªããå®éã®ã¢ãžã¥ãŒã«åãæå®ããå¿ èŠããããŸãã ããšãã°ã代ããã«ãFoo::Barã
ãFoo/Bar.pmãã®ã ãã©ã°ã¯ãPERL_LOADMOD_DENYãPERL_LOADMOD_NOIMPORTããŸãã¯
PERL_LOADMOD_IMPORT_OPS (ãŸãã¯ãã©ã°ããªãå Žå㯠0)ã verãNULL ã§ã¯ãªãæå®ãããŠããå Žåã
ãuse Foo::Bar VERSIONããšåæ§ã®ããŒãžã§ã³ ã»ãã³ãã£ã¯ã¹ãæäŸããŸãã ãªãã·ã§ã³ã®
æ«å°Ÿã® SV* åŒæ°ã䜿çšããŠãã¢ãžã¥ãŒã«ã®åŒæ°ãæå®ã§ããŸãã èŒžå ¥ïŒïŒ
ãuse Foo::Bar VERSION LISTããšåæ§ã®ã¡ãœããã ãããã¯æ¬¡ã®æåã§çµäºããå¿ èŠããããŸã
æåŸã®NULLãã€ã³ã¿ã ãã®ãªã¹ãã¯ã次ã®å Žåã«ã®ã¿çç¥ã§ããããšã«æ³šæããŠãã ããã
PERL_LOADMOD_NOIMPORT ãã©ã°ã䜿çšãããŠããŸãã ãã以å€ã®å Žåã¯ãå°ãªããšã XNUMX ã€ã® NULL
ããã©ã«ãã®ã€ã³ããŒããªã¹ããæå®ãããã€ã³ã¿ãå¿ èŠã§ãã
æå®ãããåãSV*ããã©ã¡ãŒã¿ã®åç §ã«ãŠã³ãããã¯ãªã¡ã³ããããŸãã
void load_module(U32 ãã©ã°ãSV* åãSV* ããŒãžã§ã³ã...)
æ°ãããããããŒã ãªã¹ã
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
æ°ãããããåãªã¹ããäœæããŸãã ãmaxãã¯ãã¹ããŒã¹ãå«ãŸããæ倧ã®ã€ã³ããã¯ã¹ã§ãã
å²ãåœãŠãããŸããã
PADNAMELIST * newPADNAMELIST(size_t max)
æ°ããPADNAMEã¢ãŠã¿ãŒ
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
æ°ãããããåãæ§ç¯ããŠè¿ããŸãã ãã®é¢æ°ã¯ã次ã®ãããªååã«ã®ã¿äœ¿çšããŠãã ããã
å€éšèªåœãåç §ããŠãã ããã (ãnewPADNAMEpvnããåç §ããŠãã ããã) å€åŽã® ã¯ã¢ãŠã¿ãŒãããã®ååã§ã
ããã¯é¡ã§ãã è¿ããããããåã«ã¯ãã§ã« PADNAMEt_OUTER ãã©ã°ãä»ããŠããŸã
èšå®ããŸãã
PADNAME * newPADNAMEouter(PADNAME *outer)
æ°ããPADNAMEpvn
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
æ°ãããããåãæ§ç¯ããŠè¿ããŸãã s UTF8 æååã§ããå¿ èŠããããŸãã ããã¯äœ¿çšããªãã§ãã ãã
å€éšåå¥ãæããããåã®å Žåã ãnewPADNAMEouterããåç §ããŠãã ããã
PADNAME * newPADNAMEpvn(const char *s, STRLEN len)
ã¹ã¬ããããã¯ãªã
ã¹ã¬ããããªãå Žåã« perl_destruct ã®ã¹ã¬ãã ããã¯ãæäŸããã¹ã¿ãã
int nothreadhook()
ãããåãªã¹ããã§ãã
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
æå®ãããã€ã³ããã¯ã¹ãããããåãååŸããŸãã
PADNAME * Padnamelist_fetch(PADNAMELIST *pnl,
SSize_t ããŒ)
ãããåãªã¹ãã¹ãã¢
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
æå®ãããã€ã³ããã¯ã¹ã«ãããå (null ã®å ŽåããããŸã) ãæ ŒçŽããæ¢åã®ãããåã解æŸããŸãã
ãã®ã¹ãããã®ãããåã
PADNAME ** Padnamelist_store(PADNAMELIST *pnl,
SSize_t ããŒãPADNAME *val)
Pad_add_anon
çŸåšã³ã³ãã€ã«äžã®ãããå ã« (ãpad_allocãçµç±ã§) å Žæãå²ãåœãŠãŸãã
çŸåšã³ã³ãã€ã«äžã®å éšã«åå¥çã«ã¹ã³ãŒããããå¿åé¢æ°
é¢æ°ã é¢æ° ãã¡ã³ã¯ ã¯ãããã«ãªã³ã¯ãããŠããããã®ãCvOUTSIDEããªã³ã¯ã¯
å€åŽã®ã¹ã³ãŒãã¯åç §ã«ãŒããé¿ããããã«åŒ±ããããŠããŸãã
åç §ã«ãŠã³ãã XNUMX ã€çãŸããŠããããããSvREFCNT_inc(func)ããå®è¡ããå¿ èŠãããå ŽåããããŸãã
ãªãã¿ã€ã ããããšã³ããªãè¡ãæäœã®ã¿ã€ãã瀺ããªãã³ãŒãã§ããå¿ èŠããããŸãã
ãµããŒãããããã«ã ããã¯æäœã»ãã³ãã£ã¯ã¹ã«ã¯åœ±é¿ããŸãããããããã°ã«äœ¿çšãããŸãã
PADOFFSET Pad_add_anon(CV *funcãI32 optype)
ãããè¿œå å_pv
ãpad_add_name_pvnããšãŸã£ããåãã§ãããæååã®ä»£ããã« NULL ã§çµããæååãåãåããŸãã
æåå/é·ãã®ãã¢ã
PADOFFSET Pad_add_name_pv(const char *nameãU32 ãã©ã°ã
HV *typestashãHV *ourstash)
ãããè¿œå å_pvn
çŸåšã³ã³ãã€ã«äžã®ãããå ã§ååä»ãåå¥å€æ°ã®å Žæãå²ãåœãŠãŸãã
ååãšãã®ä»ã®ã¡ã¿ããŒã¿ããããã®ååéšåã«ä¿åãã
å€æ°ã®åå¥ã¹ã³ãŒãã管çããããã®æºåã ã®ãªãã»ãããè¿ããŸãã
å²ãåœãŠããããããã¹ãããã
ååpv/ããŒã ã¬ã³ å é ã®èšå·ãå«ãå€æ°åãæå®ããŸãã ããã ã¿ã€ãã¹ã¿ãã·ã¥
ã null ã§ãªãå Žåãååã¯åä»ãåå¥ã®ååã§ãããããã«ãã£ãŠåãèå¥ãããŸãã ããã
ç§ãã¡ã®é ãå Žæ 㯠null ã§ã¯ãªããããã±ãŒãžå€æ°ãžã®åå¥åç §ã§ãããããã¯
ããã±ãŒãžãèå¥ããŸãã 次ã®ãã©ã°ã¯ OR æŒç®ã§ããŸãã
Padadd_OUR ã¯ãããã±ãŒãžå€æ°ã§ãããã©ãããåé·çã«æå®ããŸãã
Padadd_STATE å€æ°ã¯å€ãæ°žç¶çã«ä¿æããŸã
Padadd_NO_DUP_CHECK åå¥ã·ã£ããŠã€ã³ã°ã®ãã§ãã¯ãã¹ããã
PADOFFSET Pad_add_name_pvn(const char *namepv,
STRLEN ããŒã ã¬ã³ãU32 ãã©ã°ã
HV *typestashãHV *ourstash)
ãããè¿œå å_sv
ãpad_add_name_pvnããšãŸã£ããåãã§ãããSV ã®åœ¢åŒã§ååæååãåãåããŸãã
æååãšé·ãã®ãã¢ã®ä»£ããã«ã
PADOFFSET Pad_add_name_sv(SV *ååãU32 ãã©ã°ã
HV *typestashãHV *ourstash)
ãããå²ãåœãŠ
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
çŸåšã³ã³ãã€ã«äžã®ãããå ã«å Žæãå²ãåœãŠããã®ãªãã»ãããè¿ããŸãã
å²ãåœãŠããããããã¹ãããã ãããã¹ãããã«ã¯æåã¯ååãä»ããããŠããŸããã tmpã¿ã€ã ã
å¿ èŠãªããã ãšã³ããªã®çš®é¡ã瀺ããã©ã°ã®ã»ããã
å²ãåœãŠãããããã ãšã³ããªã®å€ SV:
SVs_PADMY ååä»ãåå¥å€æ° (ãmyãããourãããstateã)
SVs_PADTMP ååã®ãªãäžæã¹ãã¢
ååž°ã¬ãã«éã§å ±æããã SVf_READONLY å®æ°
ãSVf_READONLYãã¯ãperl 5.20 以éãããã§ã®ã¿ãµããŒããããŠããŸãã ããæ©ãäœæ¥ããã«ã¯
ããŒãžã§ã³ãåæ§ã«ããSVf_READONLY|SVs_PADTMPãã䜿çšããŸãã ãSVf_READONLYãã§ã¯çºçããŸãã
ããã ã¹ãããå ã® SV ã¯èªã¿åãå°çšãšããŠããŒã¯ãããŸãããåã«ãpad_allocãã«æ¬¡ã®ããã«æ瀺ããŸãã
it æå¿ (åŒã³åºãå ã«ãã£ãŠ) èªã¿åãå°çšã«ãããããå°ãªããšããã®ããã«æ±ãããå¿ èŠããããŸãã
ãªãã¿ã€ã ããããšã³ããªãè¡ãæäœã®ã¿ã€ãã瀺ããªãã³ãŒãã§ããå¿ èŠããããŸãã
ãµããŒãããããã«ã ããã¯æäœã»ãã³ãã£ã¯ã¹ã«ã¯åœ±é¿ããŸãããããããã°ã«äœ¿çšãããŸãã
PADOFFSET Pad_alloc(I32 optypeãU32 tmptype)
Pad_findmy_pv
ãpad_findmy_pvnããšãŸã£ããåãã§ãããæååã®ä»£ããã« NULL ã§çµããæååãåãåããŸãã
æåå/é·ãã®ãã¢ã
PADOFFSET Pad_findmy_pv(const char *nameãU32 ãã©ã°)
Pad_findmy_pvn
åå¥å€æ°ã®ååãæå®ããŠãçŸåšã³ã³ãã€ã«äžã®å€æ°å ã§ã®äœçœ®ãèŠã€ããŸãã
ãããã ååpv/ããŒã ã¬ã³ å é ã®èšå·ãå«ãå€æ°åãæå®ããŸãã ãã©ã°
äºçŽãããŠããããŒãã§ãªããã°ãªããŸããã çŸåšã®ãããã«ã¯ãªãã
åå¥çã«å²ãã¹ã³ãŒãã®ããããè¿œå ãããšããã®ç䌌ãšã³ããªã
çŸåšã®ãããã çŸåšã®ãããã®ãªãã»ãããè¿ããŸãããã®ãããªãã®ããªãå Žåã¯ãNOT_IN_PADããè¿ããŸãã
èªåœã¯ç¯å²å ã§ãã
PADOFFSET Pad_findmy_pvn(const char *namepv,
STRLEN ããŒã ã¬ã³ãU32 ãã©ã°)
Pad_findmy_sv
ãpad_findmy_pvnããšãŸã£ããåãã§ãããSV ã®åœ¢åŒã§ååæååãåãåããŸãã
æååãšé·ãã®ãã¢ã®ä»£ããã«ã
PADOFFSET Pad_findmy_sv(SV *ååãU32 ãã©ã°)
ãããã»ããv
ãªãã»ããã®å€ãèšå®ããŸã po çŸåšã® (ã³ã³ãã€ã«ãŸãã¯å®è¡) ãããå ã 䜿çš
ãã¯ã PAD_SETSV() ãã®é¢æ°ãçŽæ¥åŒã³åºãã®ã§ã¯ãªãã
void Pad_setsv(PADOFFSET po, SV *sv)
Pad_sv ãªãã»ããã®å€ãååŸããŸã po çŸåšã® (ã³ã³ãã€ã«ãŸãã¯å®è¡äžã®) ãããå ã ãã¯ãã䜿çšãã
ãã®é¢æ°ãçŽæ¥åŒã³åºã代ããã«ãPAD_SV ãåŒã³åºããŸãã
SV * Pad_sv(PADOFFSET po)
ããã_æŽé
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
ããããå±ããã³ãŒãã®ã³ã³ãã€ã«ã®æåŸã«ããããæŽçããŸãã æ±äºº
ããã§å®è¡ãããã®ã¯æ¬¡ã®ãšããã§ã: anonsub ãããã¿ã€ãã®ãããããã»ãšãã©ã®ãã®ãåé€ããŸãã ãããäžãã
@_; äžæçãªãã®ãšããŠããŒã¯ãä»ããŸãã type ãµãã«ãŒãã³ã®çš®é¡ã瀺ããŸãã
Padtidy_SUB éåžžã®ãµãã«ãŒãã³
åå¥ã¯ããŒãžã£ãŒã®padtidy_SUBCLONEãããã¿ã€ã
ããã£ãã£_FORMAT 圢åŒ
void Pad_tidy(padtidy_type ã¿ã€ã)
perl_alloc
æ°ãã Perl ã€ã³ã¿ãŒããªã¿ãå²ãåœãŠãŸãã ãããŒã¬ã³ããããåç §ã
PerlInterpreter* perl_alloc()
perl_construct
æ°ãã Perl ã€ã³ã¿ãŒããªã¿ãåæåããŸãã ãããŒã¬ã³ããããåç §ã
void perl_construct(PerlInterpreter *my_perl)
perl_destruct
Perl ã€ã³ã¿ãŒããªã¿ãã·ã£ããããŠã³ããŸãã ãããŒã¬ã³ããããåç §ã
int perl_destruct(PerlInterpreter *my_perl)
perl_free
Perlã€ã³ã¿ããªã¿ããªãªãŒã¹ããŸãã ãããŒã¬ã³ããããåç §ã
void perl_free(PerlInterpreter *my_perl)
perl_parse
Perl ã€ã³ã¿ããªã¿ã« Perl ã¹ã¯ãªããã解æããããã«æ瀺ããŸãã ãããŒã¬ã³ããããåç §ã
int perl_parse(PerlInterpreter *my_perl,
XSINIT_t xsinitãint argcã
char** argvãchar** env)
perl_run
Perl ã€ã³ã¿ãŒããªã¿ãŒã«å®è¡ãæ瀺ããŸãã ãããŒã¬ã³ããããåç §ã
int perl_run(PerlInterpreter *my_perl)
require_pv
Perl ã«æåååŒæ°ã§æå®ããããã¡ã€ã«ããèŠæ±ãããããã«æ瀺ããŸãã ããã¯æ¬¡ã®ããšã«é¡äŒŒããŠããŸã
Perl ã³ãŒããeval "require '$file'"ãã ãã®ããã«å®è£ ãããŠããŸãã æ€èš
代ããã«load_moduleã䜿çšããŠãã ããã
泚: ãã®é¢æ°ã® perl_ 圢åŒã¯éæšå¥šã§ãã
void require_pv(const char* pv)
äŸå€ ãã³ããªã³ã° ïŒåçŽïŒ ãã¯ã
dXCPT äŸå€åŠçã«å¿ èŠãªããŒã«ã«å€æ°ãèšå®ããŸãã ãäŸå€åŠçããåç §ããŠãã ããã
ããŒã«ã¬ããã§ã
dXCPT;
XCPT_CATCH
catch ãããã¯ãå°å ¥ããŸãã perlguts ã®ãäŸå€åŠçããåç §ããŠãã ããã
XCPT_RETHROW
以åã«ãã£ããããäŸå€ãåã¹ããŒããŸãã perlguts ã®ãäŸå€åŠçããåç §ããŠãã ããã
XCPT_RETHROW;
XCPT_TRY_END
try ãããã¯ãçµäºããŸãã perlguts ã®ãäŸå€åŠçããåç §ããŠãã ããã
XCPT_TRY_START
try ãããã¯ãéå§ããŸãã perlguts ã®ãäŸå€åŠçããåç §ããŠãã ããã
ã°ããŒãã« Variables
ãããã®å€æ°ã¯ããã»ã¹å šäœã«å¯ŸããŠã°ããŒãã«ã§ãã ãããã¯ãã¹ãŠã®éèš³è éã§å ±æãããŸã
ããã»ã¹å ã®ãã¹ãŠã®ã¹ã¬ããã
PL_ãã§ãã¯
ããã§ãã¯ããã§ãŒãºã§åŒã³åºãããé¢æ°ã®ããªãã³ãŒãã«ãã£ãŠã€ã³ããã¯ã¹ä»ããããé å
Perl ã³ãŒãã®ã³ã³ãã€ã«äžã® optree æ§ç¯ã®æ§åã ã»ãšãã©ã® (ãã¹ãŠã§ã¯ãªã) ã¿ã€ãã®å Žå
æäœã®å Žåãæäœãæåã«æ§ç¯ãããåæäœãèšå®ããããšã
ã®é©åãªèŠçŽ ã«ãã£ãŠåç §ããããã§ãã¯é¢æ°ãéããŠãã£ã«ã¿ãªã³ã°ããã
ãã®é åã æ°ããæäœã¯ãå¯äžã®åŒæ°ãšã㊠check é¢æ°ã«æž¡ãããŸãã
ãããŠããã§ãã¯é¢æ°ã¯å®äºããæäœãè¿ããŸãã ãã§ãã¯æ©èœã¯ (
ååã瀺ããšãã) æŒç®åã®æå¹æ§ãšã·ã°ãã«ãšã©ãŒããã§ãã¯ããŸãã ãŸãã
æäœã®äžéšãåæåãŸãã¯å€æŽãããããŸãã¯æ¬¡ã®ãããªããæ ¹æ¬çãªæè¡ãå®è¡ããŸãã
åæŒç®ãè¿œå ãŸãã¯åé€ããããæŒç®ãç Žæ£ããŠå¥ã®æŒç®ãè¿ãããããããšãã§ããŸãã
ãã®ä»£ããã«ã
ãã®é¢æ°ãã€ã³ã¿ãŒã®é åã¯ãã³ã³ãã€ã«ã«ããã¯ããã®ã«äŸ¿å©ãªå Žæã§ãã
ããã»ã¹ã XS ã¢ãžã¥ãŒã«ã¯ã次ã®ããããã®ä»£ããã«ç¬èªã®ã«ã¹ã¿ã ãã§ãã¯é¢æ°ãé 眮ã§ããŸãã
æšæºçãªãã®ã¯ãç¹å®ã®çš®é¡ã® op ã®ã³ã³ãã€ã«ã«åœ±é¿ãäžããŸãã
ãã ããã«ã¹ã¿ã ãã§ãã¯é¢æ°ãæšæºãã§ãã¯ãå®å šã«çœ®ãæããããšã¯ã§ããŸããã
é¢æ° (ãŸãã¯å¥ã®ã¢ãžã¥ãŒã«ã®ã«ã¹ã¿ã ãã§ãã¯é¢æ°)ã ã¢ãžã¥ãŒã«
代ããã«ãã§ãã¯ãå€æŽããå¿ èŠããããŸã ã©ãã æ¢åã®ãã§ãã¯æ©èœã ã«ã¹ã¿ã
check é¢æ°ã¯ããã®ã«ã¹ã¿ã åäœããã€é©çšããããéžæããå¿ èŠããããŸãã ã®äžã«
éåžžãOP ã§ç¹å¥ãªããšãäœãããªããšå€æããå Žåããã§ãŒã³ããå¿ èŠããããŸãã
æ¢åã® op é¢æ°ã ãããã£ãŠããã§ãã¯æ©èœã¯ãã§ãŒã³ã§ãªã³ã¯ãããŠããŸãã
æåŸã«ã³ã¢ã®ããŒã¹ãã§ãã«ãŒã
ã¹ã¬ããã®å®å šæ§ã確ä¿ãããããã¢ãžã¥ãŒã«ã¯ãã®é åã«çŽæ¥æžã蟌ãã¹ãã§ã¯ãããŸããã 代ããã«ã䜿çšããŠãã ãã
é¢æ°ãwrap_op_checkerãã
PL_ããŒã¯ãŒã_ãã©ã°ã€ã³
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
æ¡åŒµããŒã¯ãŒããåŠçããããã«äœ¿çšãããé¢æ°ãæãé¢æ°ãã€ã³ã¿ãŒã ã®
é¢æ°ã¯æ¬¡ã®ããã«å®£èšããå¿ èŠããããŸã
int ããŒã¯ãŒã_ãã©ã°ã€ã³_é¢æ°(pTHX_
char *keyword_ptrãSTRLEN ããŒã¯ãŒã_lenã
OP **op_ptr)
ãã®é¢æ°ã¯ãåè£ãšãªãããŒã¯ãŒããèŠã€ãããã³ã«ããŒã¯ãã€ã¶ãŒããåŒã³åºãããŸãã
ãkeyword_ptrãã¯ããŒãµãŒã®å ¥åãããã¡ãŒå ã®åèªãæãããkeyword_lenãã¯ããŒãµãŒã®å ¥åãããã¡ãŒå ã®åèªãæããŸãã
ãã®é·ããäžããŸãã null ã§çµäºããŠããŸããã æ©èœã¯æ€æ»ããããšãæåŸ ãããŠããŸã
åèªãããã³å Žåã«ãã£ãŠã¯ %^H ãªã©ã®ä»ã®ç¶æ ã䜿çšããŠããããå®è¡ãããã©ããã決å®ããŸãã
æ¡åŒµããŒã¯ãŒããšããŠæ±ããŸãã ããã§ãªãå Žåãé¢æ°ã¯è¿ãå¿ èŠããããŸã
ãKEYWORD_PLUGIN_DECLINEããšæå®ãããšãéåžžã®ããŒãµãŒ ããã»ã¹ãç¶è¡ãããŸãã
é¢æ°ãããŒã¯ãŒããåŠçãããå Žåã¯ããŸãäœãã解æããå¿ èŠããããŸã
ããŒã¯ãŒãã«ãã£ãŠå°å ¥ãããæ§æã®äžéšã§ããããŒã¯ãŒãã®åŸã«ââç¶ããŸãã èŠã
詳现ã«ã€ããŠã¯ããã¬ã¯ãµãŒã€ã³ã¿ãŒãã§ã€ã¹ããåç §ããŠãã ããã
ããŒã¯ãŒããåŠçããå Žåããã©ã°ã€ã³é¢æ°ã¯ãOPãã®ããªãŒãæ§ç¯ããå¿ èŠããããŸãã
解æãããã³ãŒããè¡šãæ§é äœã ããªãŒã®ã«ãŒãã¯æ¬¡ã®ãšããã§ããå¿ èŠããããŸãã
*op_ptr ã«ä¿åãããŸãã 次ã«ãé¢æ°ã¯æ§æã瀺ãå®æ°ãè¿ããŸãã
解æããæ§é ã®åœ¹å²: ã®å Žåã¯ãKEYWORD_PLUGIN_STMTã
å®å šãªã¹ããŒãã¡ã³ãããŸãã¯åŒã®å Žåã¯ãKEYWORD_PLUGIN_EXPRãã 泚æããŠãã ããã
ã¹ããŒãã¡ã³ãæ§é ã¯åŒå ã§äœ¿çšã§ããŸãã (ãdo BLOCKããšãdo BLOCKãã䜿çšããå Žåãé€ã)
åæ§ïŒãåŒã¯å®å šãªã¹ããŒãã¡ã³ãã§ã¯ãããŸããïŒå°ãªããšãã
ã»ãã³ãã³ã§çµäºããŸã)ã
ããŒã¯ãŒããåŠçãããå Žåããã©ã°ã€ã³é¢æ°ã«ã¯ (ã³ã³ãã€ã«æ) åŽãå«ãŸããå ŽåããããŸãã
å¹æã ã%^Hããå€æŽããããé¢æ°ãå®çŸ©ãããããå ŽåããããŸãã éåžžãif åŽ
ãšãã§ã¯ãã¯ãã³ãã©ãŒã®äž»ãªç®çã§ããããªããžã§ã¯ãã«å¯Ÿããæäœãçæããããšã¯æãŸãããããŸããã
éåžžã®ã³ã³ãã¬ãŒã·ã§ã³ã«å«ãŸããŸãã ãã®å Žåã§ãã次ã®ããšãå¿ èŠã§ãã
op ããªãŒãæå®ããŸãããåäžã® null op ãçæããã ãã§ååã§ãã
*PL_keyword_plugin é¢æ°ã¯å šäœçã«ãã®ããã«åäœããå¿ èŠããããŸãã
ãã ããåŸæ¥ã¯æ¢åã®ãã³ãã©ãŒãå®å šã«çœ®ãæããããã§ã¯ãããŸããã§ããã
é¢æ°ã 代ããã«ãç¬èªã®ãã®ãå²ãåœãŠãåã«ããPL_keyword_pluginãã®ã³ããŒãååŸããŠãã ããã
ãããžã®é¢æ°ãã€ã³ã¿ã ãã³ãã©ãŒé¢æ°ã¯ãããã該åœããããŒã¯ãŒããæ¢ãå¿ èŠããããŸãã
ãããã«èå³ãæã£ãŠå¯ŸåŠããŸãã èå³ã®ãªãå Žåã¯ã
ãã©ã°ã€ã³é¢æ°ãä¿åããåãåã£ãåŒæ°ãæž¡ããŸãã ãããã£ãŠ
ãPL_keyword_pluginãã¯å®éã«ã¯ãã³ãã©ãŒé¢æ°ã®ãã§ãŒã³ãæããŸãã
ããŒã¯ãŒããåŠçããæ©äŒãããããã§ãŒã³ã®æåŸã®é¢æ°ã®ã¿ãåŠçã§ããŸãã
(Perl ã³ã¢ã«çµã¿èŸŒãŸããŠããŸã) ã¯éåžžããKEYWORD_PLUGIN_DECLINEããè¿ããŸãã
GV æ©èœ
GV 㯠Perl ã® typeglobãã€ãŸã *foo ã«å¯Ÿå¿ããæ§é äœã§ãã æ§é ç©ã§ã
ããã¯ã$fooã@fooã%foo ã«å¯Ÿå¿ããã¹ã«ã©ãŒãé åãããã·ã¥ãªã©ãžã®ãã€ã³ã¿ãŒãä¿æããŸãã
GV ã¯éåžžãPerl ããã®å€ãä¿åããã¹ã¿ãã·ã¥ (ã·ã³ãã« ããŒãã« ããã·ã¥) å ã®å€ãšããŠèŠã€ãããŸãã
ã°ããŒãã«å€æ°ã
GvAV GV ãã AV ãè¿ããŸãã
AV* GvAV(GV* gv)
GvCV GV ãã CV ãè¿ããŸãã
CV* GvCV(GV* gv)
GvHV GV ãã HV ãè¿ããŸãã
HV* GvHV(GV* gv)
GvSV GV ãã SV ãè¿ããŸãã
SV* GvSV(GV* gv)
gv_const_sv
"gv" ãããµãã«ãŒãã³ ãšã³ããªãå®æ° sub ã§ãã typeglob ã®å Žåã
ã€ã³ã©ã€ã³åããŸãã¯ãgvãã¯ããã®ãããªãã®ã«ææ Œããããã¬ãŒã¹ãã«ããŒåç §ã§ãã
typeglob ã¯ããµãã«ãŒãã³ã«ãã£ãŠè¿ãããå€ãè¿ããŸãã ãã以å€ã®å Žåã¯ãNULL ãè¿ããŸãã
SV* gv_const_sv(GV* gv)
gv_fetchmeth
ãgv_fetchmeth_pvnããšäŒŒãŠããŸãããflags ãã©ã¡ãŒã¿ããããŸããã
GV* gv_fetchmeth(HV* ã¹ã¿ãã·ã¥ãconst char* åã
STRLEN ã¬ã³ãI32 ã¬ãã«)
gv_fetchmethod_autoload
ã¡ãœãããåŒã³åºãããã«åŒã³åºããµãã«ãŒãã³ãå«ãã°ãããè¿ããŸãã
ãé ãå Žæãã å®éãèªåããŒããååšããå Žåãããã¯æ¬¡ã® glob ã§ããå¯èœæ§ããããŸãã
ããªãŒãããŒããã ãã®å Žåã察å¿ããå€æ° $AUTOLOAD ã¯ãã§ã«èšå®ãããŠããŸãã
ãgv_fetchmethod_autoloadãã® XNUMX çªç®ã®ãã©ã¡ãŒã¿ã¯ãAUTOLOAD ãã©ããã決å®ããŸãã
æå®ãããã¡ãœãããååšããªãå Žåãã«ãã¯ã¢ãããå®è¡ãããŸãããŒã以å€ã¯ãã¯ãããæå³ããŸãã
ãªãŒãããŒãçšã ãŒãã¯ããããAUTOLOAD ãæ€çŽ¢ããªãããšãæå³ããŸãã ãgv_fetchmethodãã®åŒã³åºãã¯
ãŒã以å€ã®ãautoloadããæå®ããŠãgv_fetchmethod_autoloadããåŒã³åºãã®ãšåç
ãã©ã¡ãŒã¿ã«äžèŽããæåã®ããã€ã¹ã®ãªã¢ãŒãã³ã³ãããŒã« URL ãè¿ããŸãã
ãããã®é¢æ°ã¯ãã¡ãœããåã®ãã¬ãã£ãã¯ã¹ãšããŠãSUPERãããŒã¯ã³ãä»äžããŸãã å Žåã«æ³šæããŠãã ããã
è¿ãããã°ãããé·æéä¿åãããå Žåã¯ããããä¿åãããŠãããã©ããã確èªããå¿ èŠããããŸãã
ãAUTOLOADããåŸã§åŒã³åºãã«ãã£ãŠå¥ã®ãµãã«ãŒãã³ãããŒããããå¯èœæ§ãããããã
$AUTOLOAD ã«ãã®å€ãå€æŽããŸãã å¯äœçšãšããŠäœæããã glob ã䜿çšããŠå®è¡ããŸã
ãããã®é¢æ°ã«ã¯ããlevel==0ããæå®ãããgv_fetchmethããšåãå¯äœçšããããŸãã ã®
ãgv_fetchmethãã«ãã£ãŠè¿ããã GV ããcall_svãã«æž¡ãããšã«å¯ŸããèŠåãé©çšãããŸã
ãããã®æ©èœãåæ§ã§ãã
GV* gv_fetchmethod_autoload(HV* ã¹ã¿ãã·ã¥,
const char* ååã
I32 ãªãŒãããŒã)
gv_fetchmeth_autoload
ããã¯ãgv_fetchmeth_pvn_autoloadãã®å€ã圢åŒã§ãããflags ãã©ã¡ãŒã¿ããããŸããã
GV* gv_fetchmeth_autoload(HV* ã¹ã¿ãã·ã¥,
const char* ååã
STRLEN ã¬ã³ãI32 ã¬ãã«)
gv_fetchmeth_pv
ãgv_fetchmeth_pvnããšãŸã£ããåãã§ãããæååã®ä»£ããã« NULL ã§çµããæååãåãåããŸãã
æåå/é·ãã®ãã¢ã
GV* gv_fetchmeth_pv(HV* ã¹ã¿ãã·ã¥ãconst char* ååã
I32 ã¬ãã«ãU32 ãã©ã°)
gv_fetchmeth_pvn
æå®ããããååããšå®çŸ©ããããµãã«ãŒãã³ãŸãã¯ãNULLããæã€ã°ãããè¿ããŸãã ã®
glob ã¯ãæå®ããããã¹ã¿ãã·ã¥ãããŸã㯠@ISA çµç±ã§ã¢ã¯ã»ã¹ã§ããã¹ã¿ãã·ã¥ã«ååšãã
ãŠãããŒãµã«::ã
åŒæ°ãlevelã㯠0 ãŸã㯠-1 ã®ããããã§ãªããã°ãªããŸããã ãlevel==0ãã®å Žåãå¯äœçšãšããŠ
æå®ããããstashãã«æå®ããããååãã®ã°ãããäœæããŸãã
success ã«ã¯ãµãã«ãŒãã³ã®ãšã€ãªã¢ã¹ãå«ãŸããŠããããã®ãµãã«ãŒãã³ã®ãã£ãã·ã¥æ å ±ãèšå®ããŸãã
ã°ããã
ããã©ã°ãã®éèŠãªå€ã¯ GV_SUPER ãš SVf_UTF8 ã®ã¿ã§ãã
GV_SUPER ã¯ãã¡ãœãããã¹ãŒããŒã¯ã©ã¹ã§æ€çŽ¢ããããšã瀺ããŸãã
ãé ãå Žæãã
ãgv_fetchmethãããè¿ããã GV ã¯ã¡ãœãã ãã£ãã·ã¥ ãšã³ããªã§ããå¯èœæ§ããããŸãããããã¯ã¡ãœãã ãã£ãã·ã¥ ãšã³ããªã§ã¯ãããŸããã
Perlã³ãŒãããèŠããããã«ãªããŸãã ãããã£ãŠããcall_svããåŒã³åºããšãã¯ãGV ã䜿çšããªãã§ãã ããã
çŽæ¥; 代ããã«ãã¡ãœããã® CV ã䜿çšããå¿ èŠããããŸããCV ã¯ã
ãGvCVããã¯ãã䜿çšãã GVã
GV* gv_fetchmeth_pvn(HV* ã¹ã¿ãã·ã¥ãconst char* åã
STRLEN ã¬ã³ãI32 ã¬ãã«ã
U32 ãã©ã°)
gv_fetchmeth_pvn_autoload
ãšåã gv_fetchmeth_pvn()ããã ããèªåããŒãããããµãã«ãŒãã³ãæ¢ããŸãã ãè¿ããŸã
ãµãã«ãŒãã³ã®ã°ããã
GV ã®ãªãèªåããŒãããããµãã«ãŒãã³ã®å Žåããã¬ãã« < 0ãã§ãã£ãŠã GV ãäœæããŸãã
ã¹ã¿ãã®ãªãèªåããŒãããããµãã«ãŒãã³ã®å Žåã GvCV() çµæã¯ãŒãã«ãªãå¯èœæ§ããããŸãã
çŸåšããflagsãã®å¯äžã®éèŠãªå€ã¯ SVf_UTF8 ã§ãã
GV* gv_fetchmeth_pvn_autoload(HV* ã¹ã¿ãã·ã¥ã
const char* ååã
STRLEN ã¬ã³ãI32 ã¬ãã«ã
U32 ãã©ã°)
gv_fetchmeth_pv_autoload
ãgv_fetchmeth_pvn_autoloadããšãŸã£ããåãã§ãããnull ã§çµããæååãåãåããŸã
æååãšé·ãã®ãã¢ã®ä»£ããã«ã
GV* gv_fetchmeth_pv_autoload(HV* ã¹ã¿ãã·ã¥,
const char* ååã
I32 ã¬ãã«ãU32 ãã©ã°)
gv_fetchmeth_sv
ãgv_fetchmeth_pvnããšãŸã£ããåãã§ãããSV ã®åœ¢åŒã§ååæååãåãåããŸãã
æååãšé·ãã®ãã¢ã®ä»£ããã«ã
GV* gv_fetchmeth_sv(HV* ã¹ã¿ãã·ã¥ãSV* ååvã
I32 ã¬ãã«ãU32 ãã©ã°)
gv_fetchmeth_sv_autoload
ãgv_fetchmeth_pvn_autoloadããšãŸã£ããåãã§ãããååæååã次ã®åœ¢åŒã§åãåããŸãã
æååãšé·ãã®ãã¢ã®ä»£ããã« SV ã䜿çšããŸãã
GV* gv_fetchmeth_sv_autoload(HV* ã¹ã¿ãã·ã¥ãSV* ååvã
I32 ã¬ãã«ãU32 ãã©ã°)
gv_init ã®å€ãåœ¢åŒ gv_init_pvn()ã UTF8 æååã§ã¯æ©èœããŸããã
ãã©ã°ãã©ã¡ãŒã¿ã ãmultiããã©ã¡ãŒã¿ãèšå®ãããŠããå ŽåãGV_ADDMULTI ãã©ã°ã¯æ¬¡ã®ããã«ãªããŸãã
ã«æž¡ããã gv_init_pvn().
void gv_init(GV* gv, HV* stash, const char* åå,
STRLEN lenãint multi)
gv_init_pv
ãšåã gv_init_pvn()ãã ããååã«ã¯ä»£ããã« NULL ã§çµããæååã䜿çšããŸãã
char * ãã©ã¡ãŒã¿ãš length ãã©ã¡ãŒã¿ãåããŸãã
void gv_init_pv(GV* gv, HV* ã¹ã¿ãã·ã¥, const char* åå,
U32 ãã©ã°)
gv_init_pvn
ã¹ã«ã©ãŒãã¿ã€ãã°ããã«å€æããŸãã ããã¯åŒ·å¶äžå¯èœãª typeglob ã§ãã ãå²ãåœãŠã
ãããžã®åç §ã¯ã次ã®ããã«äžæžãããã®ã§ã¯ãªãããã®ã¹ãããã® XNUMX ã€ã«å²ãåœãŠãããŸãã
SvSetSV ã«ãã£ãŠäœæããã typeglobs ã§çºçããŸãã ä»»æã®ã¹ã«ã©ãŒãå€æãããšã SvOK()
äºæž¬ã§ããªãçµæãçããå¯èœæ§ããããperl ã®å éšäœ¿çšã®ããã«äºçŽãããŠããŸãã
ãgvãã¯å€æãããã¹ã«ã©ãŒã§ãã
ãstashãã¯ã芪ã¹ã¿ãã·ã¥/ããã±ãŒãž (ååšããå Žå) ã§ãã
ãnameããšãlenãã¯ååãäžããŸãã ååã¯ä¿®é£ŸãããŠããªãå¿ èŠããããŸãã ã€ãŸããããããå¿ èŠããããŸã
ããã±ãŒãžåã¯å«ããªãã§ãã ããã ãgvãã stash èŠçŽ ã®å Žåãããã¯åŒã³åºãå ã®èŠçŽ ã§ãã
ãã®é¢æ°ã«æž¡ãããååã次ã®ååãšäžèŽããããšã確èªãã責任ããããŸãã
èŠçŽ ã äžèŽããªãå ŽåãPerl ã®å éšç°¿èšã¯æ©èœããªããªããŸãã
åæã
ãnameãã UTF8 æååã®å ŽåããŸãã¯æ»ãå€ã®å Žåããflagsã㯠SVf_UTF8 ã«èšå®ã§ããŸãã
SvUTF8(sv)ã GV_ADDMULTI ãã©ã°ã䜿çšããããšãã§ããŸããããã¯ã次ã®ãããªãµããããããšãæå³ããŸãã
GV ã¯ä»¥åã«èŠãããããšããã (ã€ãŸãããäžåºŠäœ¿çšãããããšããèŠåãæå¶ããŸã)ã
void gv_init_pvn(GV* gv, HV* ã¹ã¿ãã·ã¥, const char* åå,
STRLEN ã¬ã³ãU32 ãã©ã°)
gv_init_sv
ãšåã gv_init_pvn()ãã ããååã«ã¯åå¥ã®æå * ã®ä»£ããã« SV * ã䜿çšãããŸãã
ãããŠé·ãã®ãã©ã¡ãŒã¿ã ãflagsãã¯çŸåšäœ¿çšãããŠããŸããã
void gv_init_sv(GV* gvãHV* ã¹ã¿ãã·ã¥ãSV* namesvã
U32 ãã©ã°)
gv_stashpv
æå®ãããããã±ãŒãžã®ã¹ã¿ãã·ã¥ãžã®ãã€ã³ã¿ãŒãè¿ããŸãã ãstrlenãã䜿çšããŠã
ãnameãã®é·ãã決å®ãããgv_stashpvn()ããåŒã³åºããŸãã
HV* gv_stashpv(const char* ååãI32 ãã©ã°)
gv_stashvn
æå®ãããããã±ãŒãžã®ã¹ã¿ãã·ã¥ãžã®ãã€ã³ã¿ãŒãè¿ããŸãã ãnamelenããã©ã¡ãŒã¿
ãååãã®é·ãããã€ãåäœã§ç€ºããŸãã ããã©ã°ããæž¡ããã
ãgv_fetchpvn_flags()ããªã®ã§ããGV_ADDãã«èšå®ãããšã次ã®å Žåã«ããã±ãŒãžãäœæãããŸãã
ããã¯ãã§ã«ååšããŸããã ããã±ãŒãžãååšããããflagsãã 0 (ãŸãã¯ä»»æã®
ããã±ãŒãžãäœæããªããã®ä»ã®èšå®ïŒã®å Žåã¯ãNULL ãè¿ãããŸãã
ãã©ã°ã¯æ¬¡ã®ããããã«ãªããŸãã
GV_ADD
SVf_UTF8
GV_NOADD_NOINIT
GV_NOINIT
GV_NOEXPAND
GV_ADDMG
ãã®äžã§æãéèŠãªã®ã¯ããããã GV_ADD ãš SVf_UTF8 ã§ãããã
å¯èœãªå Žåã¯ããgv_stashvnãã§ã¯ãªããgv_stashsvãã䜿çšããããšã匷ããå§ãããŸãã
ããã©ãŒãã³ã¹äžã®çç±ããæšå¥šãããŸãã
HV* gv_stashpvn(const char* åå, U32 åålen,
I32 ãã©ã°)
gv_stashvs
ãgv_stashpvnããšäŒŒãŠããŸãããæååãšé·ãã®ãã¢ã®ä»£ããã«ãªãã©ã«æååãåãåããŸãã
HV* gv_stashpvs(const char* ååãI32 äœæ)
gv_stashsv
æå®ãããããã±ãŒãžã®ã¹ã¿ãã·ã¥ãžã®ãã€ã³ã¿ãŒãè¿ããŸãã ãgv_stashpvnããåç §ããŠãã ããã
ããã©ãŒãã³ã¹ã®èŠ³ç¹ããããã®ã€ã³ã¿ãŒãã§ã€ã¹ã¯ãgv_stashpvnãããã匷ãåªå ãããããšã«æ³šæããŠãã ããã
çç±ã
HV* gv_stashsv(SV* svãI32 ãã©ã°)
ããã©ã«ãèšå®
åºåçšã®ããã©ã«ãã®ãã¡ã€ã« ãã³ãã«ã§ãã PL_defoutgv ããtypeglob ã§æž¡ããããã®ã«èšå®ããŸãã
PL_defoutgv ã¯ãã® typeglob äžã®åç §ããææãããŠããããããã® typeglob ã®åç §ã«ãŠã³ãã¯
typeglob ã§æž¡ãããé¢æ°ã¯ XNUMX ã€å¢å ããtypeglob ã®åç §ã«ãŠã³ããå¢å ããŸãã
PL_defoutgv ãæãå€ã XNUMX æžããŸãã
void setdefout(GV* gv)
ãã³ã㣠䟡å€èŠ³
Nullav Null AV ãã€ã³ã¿ã
(éæšå¥š - 代ããã«ã(AV *)NULLãã䜿çšããŠãã ãã)
Nullch Null æåãã€ã³ã¿ã (ãPERL_COREããå®çŸ©ãããŠããå Žåã¯äœ¿çšã§ããªããªããŸãã)
Nullcv Null CV ãã€ã³ã¿ã
(éæšå¥š - 代ããã«ã(CV *)NULLãã䜿çšããŠãã ãã)
Nullhv Null HV ãã€ã³ã¿ã
(éæšå¥š - 代ããã«ã(HV *)NULLãã䜿çšããŠãã ãã)
Nullsv Null SV ãã€ã³ã¿ã (ãPERL_COREããå®çŸ©ãããŠããå Žåã¯äœ¿çšã§ããªããªããŸãã)
ããã·ã¥ æäœ æ©èœ
HV æ§é 㯠Perl ããã·ã¥ãè¡šããŸãã ããã¯äž»ã«ãã€ã³ã¿ãŒã®é åã§æ§æãããŸãã
ãã®ãã¡ãHE æ§é ã®ãªã³ã¯ããããªã¹ããæããŸãã é åã¯ããã·ã¥ã«ãã£ãŠã€ã³ããã¯ã¹ä»ããããŸã
ããŒã®æ©èœã«ãããåãªã³ã¯ ãªã¹ãã¯åãå€ãæã€ãã¹ãŠã®ããã·ã¥ ãšã³ããªãè¡šããŸãã
ããã·ã¥å€ã å HE ã«ã¯ãå®éã®å€ãžã®ãã€ã³ã¿ã«å ããŠãHEK ãžã®ãã€ã³ã¿ãå«ãŸããŠããŸãã
ããŒãšããã·ã¥å€ãä¿æããæ§é äœã
cop_fetch_label
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
èŠå®ã«ä»ããããã©ãã«ãè¿ããŸãã ãã©ã°ãã€ã³ã¿ã¯ãSVf_UTF8ãã«èšå®ãããå¯èœæ§ããããŸã
ãŸãã¯0ã
const char * cop_fetch_label(COP *const cop,
STRLEN *ã¬ã³ãU32 *ãã©ã°)
èŠå®ã¹ãã¢ã©ãã«
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
ã©ãã«ããcop_hints_hashãã«ä¿åããŸãã ãã©ã°ããSVf_UTF8ãã«èšå®ããå¿ èŠããããŸãã
utf-8ã©ãã«ã
void cop_store_label(COP *const cop,
const char *labelãSTRLEN lenã
U32 ãã©ã°)
get_hv æå®ããã Perl ããã·ã¥ã® HV ãè¿ããŸãã ããã©ã°ãã¯ãgv_fetchpvãã«æž¡ãããŸãã
ãGV_ADDããèšå®ãããŠãããPerl å€æ°ãååšããªãå Žåã¯äœæãããŸãã
ãflagsãããŒãã§å€æ°ãååšããªãå Žåã¯ãNULL ãè¿ãããŸãã
泚: ãã®é¢æ°ã® perl_ 圢åŒã¯éæšå¥šã§ãã
HV* get_hv(const char *name, I32 ãã©ã°)
HEf_SVKEY
ãã®ãã©ã°ã¯ãããã·ã¥ ãšã³ããªãšããžãã¯æ§é ã®é·ãã¹ãããã§äœ¿çšããã
æ§é äœã«ã¯ããchar*ããã€ã³ã¿ãäºæãããå Žæã«ãSV*ããã€ã³ã¿ãå«ãŸããŠããŸãã
(æ å ±æäŸã®ã¿ãç®çãšããŠããã䜿çšããªãã§ãã ãã)ã
HeHASH ããã·ã¥ ãšã³ããªã«ä¿åãããŠããèšç®ãããããã·ã¥ãè¿ããŸãã
U32 HeHASH(ãã»ã)
HeKEY ããã·ã¥ ãšã³ããªã®ã㌠ã¹ãããã«æ ŒçŽãããŠããå®éã®ãã€ã³ã¿ãè¿ããŸãã ãã€ã³ã¿
ãHeKLEN()ãã®å€ã«å¿ããŠããchar*ããŸãã¯ãSV*ãã®ããããã«ãªããŸãã ã§ãã
ã«å²ãåœãŠãããã éåžžã¯ããHePV()ããŸãã¯ãHeSVKEY()ããã¯ããæšå¥šãããŸãã
ããŒã®å€ãèŠã€ããããšã
void* HeKEY(HE*ã)
HeKLEN ãããè² ã®å€ã§ããHEf_SVKEYãã«çžåœããå Žåããšã³ããªãä¿æããŠããããšã瀺ããŸãã
ãSV*ãããŒã ãã以å€ã®å Žåã¯ãããŒã®å®éã®é·ããä¿æããŸãã ã«å²ãåœãŠãããšãã§ããŸãã
éåžžãããŒã®é·ããèŠã€ããã«ã¯ãHePV()ããã¯ããé©ããŠããŸãã
ã¹ãã¬ã³ã»ãã¯ã¬ã³(ãã»ã)
HePV ããã·ã¥ ãšã³ããªã®ã㌠ã¹ãããããchar*ãå€ãšããŠè¿ããå¿ èŠãªåŠçãå®è¡ããŸãã
ãããããSV*ãããŒã®éåç §ã ãlenãã«ã¯æååã®é·ããå ¥ããŸãã
(ããã¯ãã¯ããªã®ã§ã &len ã䜿çšããŸã)ã é·ããæ°ã«ããªããªã
éèŠãªã®ã¯ãã°ããŒãã«å€æ°ãPL_naãã䜿çšã§ããããšã§ãããããã¯ããªãå°ãªãã§ãã
ããŒã«ã«å€æ°ã䜿çšããããå¹ççã§ãã ãã ããperl ã§ã¯ããã·ã¥ããŒãèŠããŠãããŠãã ããã
åã蟌㿠null ãèªç±ã«å«ããããšãã§ããããããstrlen()ããªã©ã®äœ¿çšã¯é©åã§ã¯ãããŸããã
ããã·ã¥ããŒã®é·ãã調ã¹ãæ¹æ³ã ããã¯ãSvPV()ããã¯ãã«éåžžã«ãã䌌ãŠããŸãã
ãã®ããã¥ã¡ã³ãã®ä»ã®å Žæã§èª¬æãããŠããŸãã ãHeUTF8ããåç §ããŠãã ããã
ãHePVãã䜿çšããŠå€ãååŸãããnewSVpvn()ãã«æž¡ããŠæ°ãã SV ãäœæããŠããå Žåã
ããå¹ççã§ããããããnewSVhek(HeKEY_hek(he))ãã®äœ¿çšãæ€èšããŠãã ããã
char* HePV(HE* he, STRLEN len)
HeSVKEY ããŒããSV*ããšããŠè¿ãããããã·ã¥ ãšã³ããªã«ãSV*ããå«ãŸããŠããªãå Žåã¯ãNULLããè¿ããŸãã
ããŒã
SV* HeSVKEY(HE*ã)
HeSVKEY_force
ããŒããSV*ããšããŠè¿ããŸãã 次ã®å Žåãäžæçãªå®åœã®ãSV*ããäœæããŠè¿ããŸãã
ããã·ã¥ ãšã³ããªã«ã¯ãchar*ãããŒã®ã¿ãå«ãŸããŸãã
SV* HeSVKEY_force(HE* 圌)
HeSVKEY_set
é©åãªãã©ã°ãèšå®ããããã«æ³šæããªãããããŒãæå®ããããSV*ãã«èšå®ããŸãã
ãSV*ãããŒã®ååšã瀺ããåããSV*ããè¿ããŸãã
SV* HeSVKEY_set(HE* he, SV* sv)
HeUTF8 ãHePVãã«ãã£ãŠè¿ããããchar *ãå€ã UTF-8 ã§ãšã³ã³ãŒããããŠãããã©ãããè¿ããŸãã
ãããããSV*ãããŒã®å¿ èŠãªéåç §ã è¿ãããå€ã¯0ã«ãªããŸã
ãŸã㯠0 以å€ãå¿ ããã 1 (ãŸãã¯äžäœããããèšå®ãããå€) ã§ããå¿ èŠã¯ãããŸããã do
ãboolãã¯ãcharãã® typedef ã§ããå¯èœæ§ãããããããããç²ç®çã«ãboolãå€æ°ã«ä»£å ¥ããŸãã
U32 HeUTF8(ãã»ã)
HeVAL ããã·ã¥ ãšã³ããªã«æ ŒçŽãããŠããå€ã¹ããã (ã¿ã€ã "SV*") ãè¿ããŸãã ã«å²ãåœãŠãããšãã§ããŸãã
SV *foo= HeVAL(hv);
HeVAL(hv)= sv;
SV* HeVAL(ã*ã)
HvENAME ã¹ã¿ãã·ã¥ã®å®å¹åãè¿ãããååšããªãå Žå㯠NULL ãè¿ããŸãã å¹æçãªã®ã¯
name ã¯ããã®ã¹ã¿ãã·ã¥ãååšããã·ã³ãã« ããŒãã«å ã®å Žæãè¡šããŸãã ããã¯
ããã±ãŒãžããšã€ãªã¢ã¹åããããåé€ããããšãèªåçã«æŽæ°ãããŸãã ãªãé ãå Žæ
ã·ã³ãã«ããŒãã«ã«ã¯æå¹ãªååããªããªããŸããã ãã®ååã®æ¹ãæãŸããã§ã
MRO ç·åœ¢åããã³ isa ãã£ãã·ã¥ã§äœ¿çšãããHvNAMEãã
char* HvENAME(HV* ã¹ã¿ãã·ã¥)
ããšãã¡ã¬ã³
ã¹ã¿ãã·ã¥ã®å®å¹åã®é·ããè¿ããŸãã
STRLEN HvENAMELEN(HV *ã¹ã¿ãã·ã¥)
HvENAMEUTF8
å®å¹åã UTF8 ãšã³ã³ãŒãã£ã³ã°ã§ããå Žå㯠true ãè¿ããŸãã
unsigned char HvENAMEUTF8(HV *stash)
HvNAME ã¹ã¿ãã·ã¥ã®ããã±ãŒãžåãè¿ããŸãããstashããã¹ã¿ãã·ã¥ã§ãªãå Žå㯠NULL ãè¿ããŸãã èŠã
ãSvSTASHãããCvSTASHãã
char* HvNAME(HV* ã¹ã¿ãã·ã¥)
ãã¡ã¬ã³
ã¹ã¿ãã·ã¥ã®ååã®é·ããè¿ããŸãã
STRLEN HvNAMELEN(HV *é ãå Žæ)
HvNAMEUTF8
ååã UTF8 ãšã³ã³ãŒãã£ã³ã°ã§ããå Žå㯠true ãè¿ããŸãã
unsigned char HvNAMEUTF8(HV *stash)
hv_assert
ããã·ã¥ãå éšçã«äžè²«ããç¶æ ã§ããããšã確èªããŸãã
void hv_assert(HV *hv)
hv_clear
ããã·ã¥ã®ãã¹ãŠã®èŠçŽ ã解æŸãã空ã®ãŸãŸã«ããŸãã XSçžåœã®ãã®
ã%ããã·ã¥ = ()ãã ãhv_undefããåç §ããŠãã ããã
æ»ãæã«ããã·ã¥ãç¡å¹ã«ãªãå¯èœæ§ãããããšã«ã€ããŠã¯ããav_clearããåç §ããŠãã ããã
void hv_clear(HV *hv)
hv_clear_placeholders
ããã·ã¥ãããã¬ãŒã¹ãã«ããŒãã¯ãªã¢ããŸãã å¶éä»ãããã·ã¥ã«ããŒã®ãããããå«ãŸããŠããå Žå
èªã¿åãå°çšãšããŠããŒã¯ããããã®åŸããŒãåé€ãããå ŽåãããŒã¯å®éã«ã¯åé€ãããŸãã
åé€ãããŸãããã&PL_sv_placeholder ã®å€ãå²ãåœãŠãããšã§ããŒã¯ãããŠããŸãã ããã«ã¿ã°ãä»ããŸã
ãããã£ãŠãããã·ã¥ã®å埩åŠçãªã©ã®å°æ¥ã®æäœã§ã¯ç¡èŠãããŸããã
å°æ¥çã«ã¯ãããã·ã¥ã®å€ãããŒã«åå²ãåœãŠããããšãã§ããŸãã
ãã€ã³ãã ãã®é¢æ°ã¯ããã®ãããªãã¬ãŒã¹ãã«ã㌠ããŒãããã·ã¥ããã¯ãªã¢ããŸãã èŠã
ããã·ã¥::ãŠãŒãã£ãªãã£::lock_keys() ãã®äœ¿çšäŸã«ã€ããŠã¯ã
void hv_clear_placeholders(HV *hv)
hv_copy_hints_hv
ã%^Hããã³ããŒããããã®ãnewHVhvãã®ç¹æ®ããŒãžã§ã³ã OHV ãžã®ãã€ã³ã¿ã§ãªããã°ãªããŸãã
ããã·ã¥ (ã%^Hãã®éæ³ãããå ŽåããããŸãããéåžžã¯éæ³ã§ã¯ãªãã¯ãã§ã)ããŸãã¯ãNULLã
(空ã®ããã·ã¥ãšããŠè§£éãããŸã)ã ã®å 容 OHV æ°ããããã·ã¥ã«ã³ããŒãããŸãã
ã%^Hãç¹æã®éæ³ãè¿œå ãããŠããŸãã æ°ããããã·ã¥ãžã®ãã€ã³ã¿ãè¿ãããŸãã
HV * hv_copy_hints_hv(HV *ohv)
hv_delete
ããã·ã¥å ã®ããŒãšå€ã®ãã¢ãåé€ããŸãã å€ã® SV ãããã·ã¥ããåé€ããã
èŽåœçã«ãªããåŒã³åºãå ã«æ»ããŸããã ãklenãã®çµ¶å¯Ÿå€ã¯
ããŒã®é·ãã ãklenããè² ã®å ŽåãããŒã¯æ¬¡ã®å Žæã«ãããšã¿ãªãããŸãã
UTF-8 ã§ãšã³ã³ãŒãããã Unicodeã ããã©ã°ãå€ã¯éåžžã¯ãŒãã§ãã ã«èšå®ãããŠããå Žå
G_DISCARD ã®å Žå㯠NULL ãè¿ãããŸãã ããŒã次ã®å Žåã«ã NULL ãè¿ãããŸãã
èŠã€ãããŸããã
SV* hv_delete(HV *hv, const char *key, I32 klen,
I32 ãã©ã°)
hv_delete_ent
ããã·ã¥å ã®ããŒãšå€ã®ãã¢ãåé€ããŸãã å€ SV ãããã·ã¥ããåé€ããã
æ»ãã¹ããã®ãšãªããåŒã³åºãå ã«è¿ãããŸããã ããã©ã°ãå€ã¯éåžžã¯ãŒãã§ãã ãã
G_DISCARD ã«èšå®ãããšãNULL ãè¿ãããŸãã 次ã®å Žåã«ã NULL ãè¿ãããŸãã
ããŒãèŠã€ãããŸããã ãhashãã«ã¯ãäºåã«èšç®ãããæå¹ãªããã·ã¥å€ããŸãã¯èŠæ±ãã 0 ãæå®ã§ããŸãã
ããã¯èšç®ãããããšã«ãªããŸãã
SV* hv_delete_ent(HV *hvãSV *keysvãI32 ãã©ã°ã
U32 ããã·ã¥)
hv_exists
æå®ãããããã·ã¥ ããŒãååšãããã©ããã瀺ãããŒã«å€ãè¿ããŸãã 絶察çãª
ãklenãã®å€ã¯ããŒã®é·ãã§ãã ãklenããè² ã®å ŽåãããŒã¯æ¬¡ã®ããã«ãªããŸãã
UTF-8 ã§ãšã³ã³ãŒãããã Unicode ã§ãããšæ³å®ãããŸãã
bool hv_exists(HV *hv, const char *key, I32 klen)
hv_exists_ent
æå®ãããããã·ã¥ ããŒãååšãããã©ããã瀺ãããŒã«å€ãè¿ããŸãã ãããã·ã¥ãã¯æ¬¡ã®ããšãã§ããŸã
äºåã«èšç®ãããæå¹ãªããã·ã¥å€ããŸãã¯èšç®ãèŠæ±ããå Žå㯠0ã
bool hv_exists_ent(HV *hvãSV *keysvãU32 ããã·ã¥)
hv_fetch
ããã·ã¥å ã®æå®ãããããŒã«å¯Ÿå¿ãã SV ãè¿ããŸãã 絶察çãª
ãklenãã®å€ã¯ããŒã®é·ãã§ãã ãklenããè² ã®å ŽåãããŒã¯æ¬¡ã®ããã«ãªããŸãã
UTF-8 ã§ãšã³ã³ãŒãããã Unicode ã§ãããšæ³å®ãããŸãã ãlvalããèšå®ãããŠããå Žåããã§ããã¯æ¬¡ã®ããã«ãªããŸãã
åºèã®äžéšã ããã¯ãé¢é£ä»ããããããã·ã¥ã«å€ããªãå Žåãæå³ããŸãã
æå®ãããããŒã®å ŽåãããŒãäœæããããããžã®ãã€ã³ã¿ãŒãè¿ãããŸãã ãSV*ããã
ã«ãã€ã³ããå²ãåœãŠãããšãã§ããŸãã ãã ããæ»ãå€ã null ã§ãªãããšãåžžã«ç¢ºèªããŠãã ãã
ãSV*ãã«éåç §ããåã«ã
詳现ã«ã€ããŠã¯ãperlguts ã®ãçµåããã·ã¥ãšé åã®éæ³ã«ã€ããŠããåç §ããŠãã ããã
ã¿ã€ã ããã·ã¥ã§ãã®é¢æ°ã䜿çšããæ¹æ³ã«é¢ããæ å ±ã
SV** hv_fetch(HV *hv, const char *key, I32 klen,
I32 lval)
hv_fetchs
ãhv_fetchããšäŒŒãŠããŸãããæååãšé·ãã®ãã¢ã®ä»£ããã«ãªãã©ã«æååãåãåããŸãã
SV** hv_fetchs(HV* tbãconst char* ããŒãI32 lval)
hv_fetch_ent
ããã·ã¥å ã®æå®ãããããŒã«å¯Ÿå¿ããããã·ã¥ ãšã³ããªãè¿ããŸãã "ããã·ã¥"
æå®ããããããŒãã«å¯ŸããŠäºåã«èšç®ãããæå¹ãªããã·ã¥çªå·ããŸãã¯å¿ èŠãªå Žå㯠0 ã§ãªããã°ãªããŸããã
ãããèšç®ããé¢æ°ã§ãã ãlvalããèšå®ãããŠããå Žåããã§ããã¯ã¹ãã¢ã®äžéšã«ãªããŸãã
ã¢ã¯ã»ã¹ããåã«ãæ»ãå€ã null ã§ãªãããšã確èªããŠãã ããã ãšãã®æ»ãå€
ãhvãã¯çµåãããããã·ã¥ã§ãããéçãªå Žæãžã®ãã€ã³ã¿ã§ãããããå¿ ãã³ããŒãäœæããŠãã ãã
æ§é ãã©ããã«ä¿åããå¿ èŠãããå Žåã¯ãæ§é ãä¿åããŸãã
詳现ã«ã€ããŠã¯ãperlguts ã®ãçµåããã·ã¥ãšé åã®éæ³ã«ã€ããŠããåç §ããŠãã ããã
ã¿ã€ã ããã·ã¥ã§ãã®é¢æ°ã䜿çšããæ¹æ³ã«é¢ããæ å ±ã
HE* hv_fetch_ent(HV *hv, SV *keysv, I32 lval,
U32 ããã·ã¥)
hv_fill 䜿çšäžã®ããã·ã¥ ãã±ããã®æ°ãè¿ããŸãã ãã®æ©èœã¯
ãã¯ããHvFILLãã§ã©ãããããŸãã
以åã¯ããã®å€ã¯åžžã« HV æ§é ã«æ ŒçŽãããŠããŸããã
äœãã®ãã¹ãŠã®ããã·ã¥ (ããã³ã»ãŒãã¹ãŠã®ãªããžã§ã¯ã) ã®ãªãŒããŒããã
ã»ãšãã©äœ¿ãããŸããã ä»åã¯ãåããŠå¿ èŠã«ãªã£ããšãã«ãªã³ããã³ãã§èšç®ããŸãã
èšç®ãç¹°ãè¿ãã®ã«ã³ã¹ãããããå Žåã¯ãããããã£ãã·ã¥ããŸãã ãã£ãã·ã¥ãããå€ã¯
æ¿å ¥ãšåé€ã«ãã£ãŠæŽæ°ãããŸãããããã·ã¥ã次ã®å Žå㯠(çŸåš) ç Žæ£ãããŸãã
ã¹ããªããã
STRLEN hv_fill(HV *const hv)
hv_iterinit
ããã·ã¥ ããŒãã«ãèµ°æ»ããããã®éå§ç¹ãæºåããŸãã å ã®ããŒã®æ°ãè¿ããŸãã
ããã·ã¥ (ã€ãŸãããHvUSEDKEYS(hv)ããšåã)ã æ»ãå€ã¯çŸåšã®ã¿ã§ã
ã¿ã€ããžãã¯ã䜿çšããªãããã·ã¥ã«å¯ŸããŠæå³ããããŸãã
泚: ããŒãžã§ã³ 5.004_65 ããåã§ã¯ããhv_iterinitãã¯ããã·ã¥ã®æ°ãè¿ãããã«äœ¿çšãããŠããŸããã
ããŸããŸäœ¿çšãããŠãããã±ãã é£è§£ãªå€ããŸã å¿ èŠãªå Žåã¯ã次ã®ããã«ããããšãã§ããŸãã
ãã¯ããHvFILL(hv)ããéããŠååŸããŸãã
I32 hv_iterinit(HV *hv)
hv_iterkey
ããã·ã¥å埩åã®çŸåšäœçœ®ããããŒãè¿ããŸãã èŠã
ãhv_iterinitãã
char* hv_iterkey(HE* ãšã³ããªãI32* retlen)
hv_iterkeysv
ããã·ã¥å埩åã®çŸåšäœçœ®ããããŒããSV*ããšããŠè¿ããŸãã ã®
æ»ãå€ã¯åžžã«ããŒã®æ°žä¹ ã³ããŒã«ãªããŸãã ãhv_iterinitããåç §ããŠãã ããã
SV* hv_iterkeysv(HE* ãšã³ããª)
hv_iternext
ããã·ã¥å埩åãããšã³ããªãè¿ããŸãã ãhv_iterinitããåç §ããŠãã ããã
ã€ãã¬ãŒã¿ãäœæããããã·ã¥ãšã³ããªã«å¯ŸããŠãhv_deleteããŸãã¯ãhv_delete_entããåŒã³åºãããšãã§ããŸãã
å Žæã倱ã£ããã€ãã¬ãŒã¿ãç¡å¹ã«ãããããããšãªããçŸåšã¯ ãæããŠããŸãã
ãã®å ŽåãçŸåšã®ãšã³ããªãããã·ã¥ããåé€ãããããšã«æ³šæããŠãã ããã
ãããžã®æåŸã®åç §ãä¿æããã€ãã¬ãŒã¿ã ã€ãã¬ãŒã¿ã«ã¯ã
次ã®ãhv_iternextãåŒã³åºãæã«ãšã³ããªãè¿œå ããããããã€ãã¬ãŒã¿ãç Žæ£ããªãã§ãã ããã
ããããªããšãšã³ããªããªãŒã¯ããŸã - ãhv_iternextããåŒã³åºããŠãªãœãŒã¹ãããªã¬ãŒããŸã
å²ãåœãŠè§£é€ã
HE* hv_iternext(HV *hv)
hv_iternextsv
ãhv_iternextãããhv_iterkeyãããhv_itervalãã XNUMX åã®æäœã§å®è¡ããŸãã
SV* hv_iternextsv(HV *hv, char **key, I32 *retlen)
hv_iternext_flags
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
ããã·ã¥å埩åãããšã³ããªãè¿ããŸãã ãhv_iterinitãããã³ãhv_iternextããåç §ããŠãã ããã ã®
ãflagsãå€ã¯éåžžã¯ãŒãã§ãã HV_ITERNEXT_WANTPLACEHOLDERS ãèšå®ãããŠããå Žåã
éåžžã®ããŒã«å ããŠããã¬ãŒã¹ãã«ã㌠ã㌠(å¶éä»ãããã·ã¥çš) ãè¿ãããŸãã
ããŒã ããã©ã«ãã§ã¯ããã¬ãŒã¹ãã«ããŒã¯èªåçã«ã¹ããããããŸãã çŸåšã
ãã¬ãŒã¹ãã«ããŒã¯ã&PL_sv_placeholder ãšããå€ã§å®è£ ãããŸãã 泚æããŠãã ããã
ãã¬ãŒã¹ãã«ããŒãšå¶éä»ãããã·ã¥ã®å®è£ ã¯å€æŽãããå¯èœæ§ããããŸãã
çŸåšãå®è£ ã¯æœè±¡åãäžååã§ãããå€æŽãé©åã«è¡ãããšãã§ããŸããã
HE* hv_iternext_flags(HV *hvãI32 ãã©ã°)
hv_interval
ããã·ã¥å埩åã®çŸåšäœçœ®ããå€ãè¿ããŸãã èŠã
ãhv_iterkeyãã
SV* hv_iterval(HV *hv, HE *ãšã³ããª)
hv_magic
ããã·ã¥ã«éæ³ãè¿œå ããŸãã ãsv_magicããåç §ããŠãã ããã
void hv_magic(HV *hv, GV *gv, int how)
hv_ã¹ã«ã©ãŒ
ã¹ã«ã©ãŒã³ã³ããã¹ãã§ããã·ã¥ãè©äŸ¡ããçµæãè¿ããŸãã éæ³ãæ±ããšã
ããã·ã¥ã¯çµã³ã€ããŠããŸãã
SV* hv_scalar(HV *hv)
hv_store
SV ãããã·ã¥ã«ä¿åããŸãã ããã·ã¥ããŒã¯ãkeyããšçµ¶å¯Ÿå€ã§æå®ããŸãã
ãklenãã®éšåã¯ããŒã®é·ãã§ãã ãklenããè² ã®å ŽåãããŒã¯æ¬¡ã®ããã«ä»®å®ãããŸãã
UTF-8 ã§ãšã³ã³ãŒãããã Unicode ã§ããå¿ èŠããããŸãã ãhashããã©ã¡ãŒã¿ã¯ãäºåã«èšç®ãããããã·ã¥å€ã§ãã
ãŒãã®å Žåã¯ãPerl ãèšç®ããŸãã
æäœã倱æããå ŽåããŸãã¯å€ãå¿ èŠãªãå Žåãæ»ãå€ã¯ NULL ã«ãªããŸãã
å®éã«ã¯ããã·ã¥å ã«æ ŒçŽãããŸã (çµåããã·ã¥ã®å Žåãšåæ§)ã ãããªããš
ãããéåç §ããŠãå ã®ãSV*ããååŸã§ããŸãã çºä¿¡è ã¯æ¬¡ã®ãšããã§ããããšã«æ³šæããŠãã ããã
åã«ãvalãã®åç §ã«ãŠã³ããé©åã«ã€ã³ã¯ãªã¡ã³ããã責任ããããŸãã
ãåŒã³åºããé¢æ°ã NULL ãè¿ããå Žåã¯å€ããã¯ãªã¡ã³ãããŸãã äºå®äžæåãã
hv_store ã¯ããvalããžã® XNUMX ã€ã®åç §ã®æææš©ãååŸããŸãã ããã¯éåžžãããªããè¡ãããšã§ã
欲ãã; æ°ããäœæããã SV ã®åç §ã«ãŠã³ã㯠XNUMX ãªã®ã§ãã³ãŒããå®è¡ãããã¹ãŠã®ããšã
SV ãäœæããŠããã·ã¥ã«ä¿åãããšãhv_store ããã®ãžã®å¯äžã®åç §ãææããŸãã
æ°ãã SV ãªã®ã§ãã³ãŒããæŽçããããã«ãã以äžäœãããå¿ èŠã¯ãããŸããã hv_store ã¯
hv_store_ent ãžã®åŒã³åºããšããŠå®è£ ãããŠããããäžæç㪠SV ã¯äœæãããŸããã
ããŒãªã®ã§ãããŒããŒã¿ããŸã SV 圢åŒã«ãªã£ãŠããªãå Žåã¯ãhv_store ã䜿çšããŸãã
hv_store_ent ãåªå ããŸãã
詳现ã«ã€ããŠã¯ãperlguts ã®ãçµåããã·ã¥ãšé åã®éæ³ã«ã€ããŠããåç §ããŠãã ããã
ã¿ã€ã ããã·ã¥ã§ãã®é¢æ°ã䜿çšããæ¹æ³ã«é¢ããæ å ±ã
SV** hv_store(HV *hv, const char *key, I32 klen,
SV *valãU32 ããã·ã¥)
hv_stores
ãhv_storeããšäŒŒãŠããŸãããæååãšé·ãã®ãã¢ã®ä»£ããã«ãªãã©ã«æååãåãåããŸãã
ããã·ã¥ãã©ã¡ãŒã¿ã¯çç¥ããŸãã
SV** hv_stores(HV* tb, const char* ããŒ,
NULLOK SV* å€)
hv_store_ent
ãvalããããã·ã¥ã«æ ŒçŽããŸãã ãkeyãã«ã¯ããã·ã¥ããŒãæå®ããŸãã ãããã·ã¥ããã©ã¡ãŒã¿
äºåã«èšç®ãããããã·ã¥å€ã§ãã ãŒãã®å Žåã¯ãPerl ãèšç®ããŸãã ã®
æ»ãå€ã¯ãäœæãããæ°ããããã·ã¥ ãšã³ããªã§ãã æäœã®å Žå㯠NULL ã«ãªããŸã
倱æããå ŽåããŸãã¯å®éã«å€ãããã·ã¥å ã«ä¿åããå¿ èŠããªãã£ãå ŽåïŒæ¬¡ã®ããã«ïŒ
ã¿ã€ãããã·ã¥ã®å ŽåïŒã ãã以å€ã®å Žåãæ»ãå€ã®å 容ã¯æ¬¡ã®ããã«ãªããŸãã
ãHe?ãã䜿çšããŠã¢ã¯ã»ã¹ããŸãã ããã§èª¬æãããŠãããã¯ãã çºä¿¡è ã¯æ¬¡ã®ãšããã§ããããšã«æ³šæããŠãã ããã
åã«ãvalãã®åç §ã«ãŠã³ããé©åã«ã€ã³ã¯ãªã¡ã³ããã責任ããããŸãã
ãåŒã³åºããé¢æ°ã NULL ãè¿ããå Žåã¯å€ããã¯ãªã¡ã³ãããŸãã äºå®äžæåãã
hv_store_ent ã¯ããvalããžã® XNUMX ã€ã®åç §ã®æææš©ãååŸããŸãã ããã¯éåžžãããªããè¡ãããšã§ã
欲ãã; æ°ããäœæããã SV ã®åç §ã«ãŠã³ã㯠XNUMX ãªã®ã§ãã³ãŒããå®è¡ãããã¹ãŠã®ããšã
SV ãäœæããŠããã·ã¥ã«ä¿åãããšãhv_store ããã®ãžã®å¯äžã®åç §ãææããŸãã
æ°ãã SV ãªã®ã§ãã³ãŒããæŽçããããã«ãã以äžäœãããå¿ èŠã¯ãããŸããã ãäºæ¿ãã ãã
hv_store_ent ã¯ãããŒãã®ã¿ãèªã¿åããŸãã ãvalããšã¯ç°ãªããæææš©ãååŸããŸããã
ãããã£ãŠããkeyãã®æ£ããåç §ã«ãŠã³ããç¶æããã®ã¯å®å šã«åŒã³åºãå ã®è²¬ä»»ã§ãã
責任ã hv_store 㯠hv_store_ent ã®åŒã³åºããšããŠå®è£ ãããŠããŸããã
ããŒã®äžæç㪠SV ãäœæããªããããã㌠ããŒã¿ããŸã SV ã«ãªãå Žå
ãã©ãŒã ã§ã¯ãhv_store_ent ã§ã¯ãªã hv_store ã䜿çšããŸãã
詳现ã«ã€ããŠã¯ãperlguts ã®ãçµåããã·ã¥ãšé åã®éæ³ã«ã€ããŠããåç §ããŠãã ããã
ã¿ã€ã ããã·ã¥ã§ãã®é¢æ°ã䜿çšããæ¹æ³ã«é¢ããæ å ±ã
HE* hv_store_ent(HV *hvãSV *keyãSV *valãU32 ããã·ã¥)
hv_undef
ããã·ã¥ã®å®çŸ©ã解é€ããŸãã XS ã§ã¯ãundef(%hash)ãã«çžåœããŸãã
ããã·ã¥ã®ãã¹ãŠã®èŠçŽ ã解æŸããã ãã§ãªãïŒ hv_clear())ããããç¡æã§ã
ããã·ã¥ã«é¢é£ä»ããããè£å©ããŒã¿ãšã¹ãã¬ãŒãžã
æ»ãæã«ããã·ã¥ãç¡å¹ã«ãªãå¯èœæ§ãããããšã«ã€ããŠã¯ããav_clearããåç §ããŠãã ããã
void hv_undef(HV *hv)
newHV æ°ãã HV ãäœæããŸãã åç §ã«ãŠã³ã㯠1 ã«èšå®ãããŸãã
HV* newHV()
ãã㯠æäœ
ãããã®é¢æ°ã¯ãããã¯å€æ°ãæäœããããã®äŸ¿å©ã§ã¹ã¬ããã»ãŒããªæ段ãæäŸããŸãã
ã©ãããªããã§ãã«ãŒ
æå®ãããæäœã¿ã€ãã®ãã§ãã¯é¢æ°ã®ãã§ãŒã³ã« C é¢æ°ãè¿œå ããŸãã ãã
ããã¯ããPL_checkãé åãæäœããããã®æšå¥šãããæ¹æ³ã§ãã ãªãã³ãŒã ã©ã¡ããæå®ããã
æäœã®ã¿ã€ãã圱é¿ãåããŸãã æ°ãããã§ãã«ãŒ C é¢æ°ãžã®ãã€ã³ã¿ã§ãã
ãã®ãªãã³ãŒãã®ãã§ãã¯ãã§ãŒã³ã«è¿œå ãããããã㊠old_checker_p ã¹ãã¬ãŒãžãæããŸã
ãã§ãŒã³å ã®æ¬¡ã®é¢æ°ãžã®ãã€ã³ã¿ãŒãä¿åãããå Žæã ã®
ã®å€ æ°ãããã€ã³ã¿ å€ã¯ãPL_checkãé åã«æžã蟌ãŸããŸããã
以åã«ããã«ä¿åãããŠãããã®ã«æžã蟌ãŸããŸã *old_checker_p.
é¢æ°ã¯æ¬¡ã®ããã«å®çŸ©ããå¿ èŠããããŸãã
éç OP *new_checker(pTHX_ OP *op) { ... }
ããã¯æ¬¡ã®æ¹æ³ã§åŒã³åºãããšãç®çãšããŠããŸãã
new_checker(aTHX_op)
old_checker_p 次ã®ããã«å®çŸ©ããå¿ èŠããããŸã:
éç Perl_check_t old_checker_p;
ãPL_checkãã¯ããã»ã¹å šäœãšãop ãããã¯ããã¢ãžã¥ãŒã«ã«å¯ŸããŠã°ããŒãã«ã§ãã
ãã§ãã¯ã¯ããã»ã¹ããšã«è€æ°ååŒã³åºãããå Žåããããéåžžã¯
ç°ãªãã¹ã¬ããã ãã®ç¶æ³ã«å¯ŸåŠããããã«ããã®é¢æ°ã¯åªçã§ãã ã®
å Žæ *old_checker_p æåã« (ããã»ã¹ããšã« XNUMX å) NULL ãã€ã³ã¿ãŒãå«ããå¿ èŠããããŸãã
éçæéã® AC å€æ° (ãã¡ã€ã« ã¹ã³ãŒãã§å®£èšãããéåžžã¯ããŒã¯ãä»ããããŸã)
å éšãªã³ã±ãŒãžãäžããããã®ãstaticãïŒã¯æé»çã«åæåãããŸã
æ瀺çãªåæååããªãå Žåã¯ãé©åã«èšå®ãããŸãã ãã®æ©èœã¯ã
ãã§ã㯠ãã§ãŒã³ãèŠã€ãã£ãå Žåã«ã®ã¿ãå®éã«ãã§ã㯠ãã§ãŒã³ãå€æŽããŸãã *old_checker_p ãã«ã«ãªãã ãã
ãã®é¢æ°ã¯å°èŠæš¡ã§ã¯ã¹ã¬ããã»ãŒãã§ããããŸãã é©åãªããã¯ã䜿çšããŠã
ãPL_checkãã«ã¢ã¯ã»ã¹ããéã®ç«¶åç¶æ ãåé¿ããŸãã
ãã®é¢æ°ãåŒã³åºããããšãã«ãã£ãŠåç §ãããé¢æ°ã æ°ãããã§ãã«ãŒ æºåãã§ããŠããªããã°ãªããŸãã
åŒã³åºãããã®ã¯äŸå€ã§ã *old_checker_p æºããããŠããªãããšã ã¹ã¬ããç¶æ³ã§ã¯ã
æ°ãããã§ãã«ãŒ ãã®é¢æ°ãè¿ãããåã§ãã£ãŠããããã«åŒã³åºãããšãã§ããŸãã
*old_checker_p åã«åžžã«é©åã«èšå®ãããŸã æ°ãããã§ãã«ãŒ ãšåŒã°ããŸãã å Žå
æ°ãããã§ãã«ãŒ äžãããã op ã«å¯ŸããŠç¹å¥ãªããšã¯äœãããªãããšã決å®ããŸã (ããã¯
ããã¯ãop ãã§ã㯠ããã¯ã®ã»ãšãã©ã®äœ¿çšã®éåžžã®ã±ãŒã¹ã§ã)ããã§ãã¯ããã§ãŒã³ããå¿ èŠããããŸã
ã«ãã£ãŠåç §ãããé¢æ° *old_checker_p.
ç¹å®ã®ãµãã«ãŒãã³ãžã®åŒã³åºãã®ã³ã³ãã€ã«ã«åœ±é¿ãäžãããå Žåã¯ã次ã䜿çšããŸãã
ãã¹ãŠã®ãentersubãæäœã®ããã¯ãã§ãã¯ã§ã¯ãªããcv_set_call_checkerãã
void Wrap_op_checker(Optype ãªãã³ãŒã,
Perl_check_t new_checkerã
Perl_check_t *old_checker_p)
ã¬ã¯ãµãŒ ã€ã³ã¿ãã§ãŒã¹
ãã㯠Perl ããŒãµãŒã®äžäœå±€ã§ãããæåãšããŒã¯ã³ã管çããŸãã
lex_bufutf8
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
ã¬ã¯ãµãŒãããã¡ãŒå ã®ãªã¯ããã (ãPL_parser->linestrã) ã次ã®ããã«ãããã©ããã瀺ããŸãã
Unicode æåã® UTF-8 ãšã³ã³ãŒãã£ã³ã°ãšããŠè§£éãããŸãã ããã§ãªãå Žåã¯ããããã¹ãã§ã
Latin-1 æåãšããŠè§£éãããŸãã ããã¯ã次ã®ãSvUTF8ããã©ã°ã«äŒŒãŠããŸãã
ã¹ã«ã©ãŒã
UTF-8 ã¢ãŒãã§ã¯ãã¬ã¯ãµãŒ ãããã¡ãŒã«å®éã«æå¹ãªããŒã¿ãå«ãŸãããã©ããã¯ä¿èšŒãããŸããã
UTF-8ã åå¥è§£æã³ãŒãã¯ãç¡å¹ãªãšã³ã³ãŒãã«çŽé¢ããŠãå ç¢ã§ããå¿ èŠããããŸãã
ãPL_parser->linestrãã¹ã«ã©ãŒã®å®éã®ãSvUTF8ããã©ã°ã¯éèŠã§ããã
å ¥åæåãšã³ã³ãŒãã£ã³ã°ã«é¢ãããã¹ãŠã®è©±ã§ã¯ãããŸããã éåžžããã¡ã€ã«ã
ãèªã¿åãããŠãããã¹ã«ã©ãŒã«ã¯ãªã¯ããããå«ãŸããŠããããã®ãSvUTF8ããã©ã°ã¯ãªãã§ããã
ãuse utf8ããã©ã°ããæå¹ãªå Žåããªã¯ããã㯠UTF-8 ãšããŠè§£éãããå¿ èŠããããŸãã
ãã ããæååã®è©äŸ¡äžã«ãã¹ã«ã©ãŒã«ãSvUTF8ããã©ã°ããªã³ã«ãªãå ŽåããããŸãã
ãã®å Žåããuse bytesããã©ã°ãã䜿çšããªãéãããã®ãªã¯ããã㯠UTF-8 ãšããŠè§£éãããå¿ èŠããããŸãã
ãæå¹ã«ãªã£ãŠããŸãã ãã®ããžãã¯ã¯å°æ¥å€æŽãããå¯èœæ§ããããŸãã 代ããã«ãã®é¢æ°ã䜿çšããŠãã ãã
ããžãã¯ãèªåã§å®è£ ããŸãã
ããŒã« lex_bufutf8()
lex_discard_to
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
ãPL_parser->linestrããããã¡ã®æåã®éšåãç Žæ£ããŸãã PTRãéžæããŸãã
ãããã¡ãŒã®æ®ãã®ã³ã³ãã³ãã¯ç§»åããããã¹ãŠã®ãã€ã³ã¿ãŒã¯ãããã¡ãŒã«ç§»åãããŸãã
é©åã«æŽæ°ãããŸããã PTR ãããã¡å ã§æ¬¡ã®äœçœ®ããåŸã§ãã£ãŠã¯ãªããŸãã
ãPL_parser->bufptrã: ãŸã åå¥è§£æãããŠããªãããã¹ããç Žæ£ããããšã¯èš±å¯ãããŠããŸããã
éåžžããããçŽæ¥è¡ãå¿ èŠã¯ãããŸããã
ãlex_next_chunkããšããã«åºã¥ããã®ã®æé»çãªç Žæ£åäœã
ãã ããããŒã¯ã³ãè€æ°è¡ã«ãŸããã£ãŠãããåå¥è§£æã³ãŒãã
ãã®ç®çã®ããã«ãããã¡ãŒã«è€æ°è¡ã®ããã¹ããå ¥ããå®äºåŸã«
äžèŠã«ãªã£ã以åã®è¡ãæ瀺çã«ç Žæ£ããããšãè³¢æãªããŒã¯ã³ã
å°æ¥ã®è€æ°è¡ããŒã¯ã³ã«ãã£ãŠãããã¡ãŒãééãªãå¢å€§ããã®ãé¿ããããã
void lex_discard_to(char *ptr)
lex_grow_linestr
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
å°ãªããšã察å¿ã§ããããã«ã¬ã¯ãµãŒ ãããã¡ (ãPL_parser->linestrã) ãåå²ãåœãŠããŸãã LEN
ãªã¯ããã (çµç«¯ãNULããå«ã)ã åå²ãåœãŠããããªããžã§ã¯ããžã®ãã€ã³ã¿ãè¿ããŸãã
ãããã¡ã ããã¯ãããã¡ãçŽæ¥å€æŽããåã«å¿ èŠã§ãã
ããã¯é·ãã䌞ã°ãããšã«ãªããŸãã ãlex_stuff_pvnãã¯ããã䟿å©ãªæ¹æ³ãæäŸããŸãã
ããã¹ãããããã¡ã«æ¿å ¥ããŸãã
ãPL_parser->linestrãã§ãSvGROWããŸãã¯ãsv_growããçŽæ¥äœ¿çšããªãã§ãã ããã ãã®æ©èœ
ãããã¡ãçŽæ¥æãã¬ã¯ãµãŒã®å€æ°ããã¹ãŠæŽæ°ããŸãã
char * lex_grow_linestr(STRLEN len)
lex_next_chunk
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
åå¥è§£æãã次ã®ããã¹ãã®ãã£ã³ã¯ãèªã¿åããããããPL_parser->linestrãã«è¿œå ããŸãã
ããã¯ãåå¥è§£æã³ãŒããçŸåšã®ãã£ã³ã¯ã®æåŸãŸã§æ€çŽ¢ãããšãã«åŒã³åºãããå¿ èŠããããŸãã
ãããŠãã£ãšç¥ããããšæã£ãŠããŸãã åå¥è§£æã§ã¯éåžžã次ã®ããã«ããå¿ èŠããããŸãããå¿ é ã§ã¯ãããŸããã
çŸæç¹ã§ã¯çŸåšã®ãã£ã³ã¯å šäœãæ¶è²»ãããŠããŸãã
ãPL_parser->bufptrããçŸåšã®ãã£ã³ã¯ã®æåŸãæããŠããå Žå (ã€ãŸãã
çŸåšã®ãã£ã³ã¯ã¯å®å šã«æ¶è²»ãããŠããŸã)ãéåžžãçŸåšã®ãã£ã³ã¯ã¯
æ°ãããã£ã³ã¯ãèªã¿èŸŒãŸãããšåæã«ç Žæ£ãããŸãã ãã©ã° å«ãŸ
ãLEX_KEEP_PREVIOUSãã®å ŽåãçŸåšã®ãã£ã³ã¯ã¯ç Žæ£ãããŸããã çŸåšã®å Žå
ãã£ã³ã¯ãå®å šã«æ¶è²»ãããŠããªãå Žåããã£ã³ã¯ã¯ç¡èŠãããŸããã
æã
æ°ããããã¹ãããããã¡ã«è¿œå ãããå Žå㯠true ãè¿ãããããã¡ã«ããã¹ããè¿œå ãããå Žå㯠false ãè¿ããŸãã
å ¥åããã¹ãã®çµããã«éããŸããã
bool lex_next_chunk(U32 ãã©ã°)
lex_peek_unichar
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
çŸåšåå¥è§£æãããŠããããã¹ãå ã® XNUMX æå (Unicode) ãå èªã¿ããŸãã æ»ãå€
次ã®æåã®ã³ãŒããã€ã³ã (笊å·ãªãæŽæ°å€)ããŸãã¯åå¥è§£æã«åé¡ãããå Žå㯠-1
å ¥åããã¹ãã®çµããã«éããŸããã ããŒã¯ãããã£ã©ã¯ã¿ãŒãæ¶è²»ããã«ã¯ã次ã䜿çšããŸãã
ãlex_read_unicharãã
次ã®æåãå ¥åããã¹ãã®æ¬¡ã®ãã£ã³ã¯å ã«ãã (ãŸãã¯ãã®äžã«åºãã£ãŠãã) å Žåã
次ã®ãã£ã³ã¯ãèªã¿èŸŒãŸããŸããéåžžãçŸåšã®ãã£ã³ã¯ã¯æ¬¡ã®æç¹ã§ç Žæ£ãããŸãã
åæã«ãããããã ãã©ã° ãLEX_KEEP_PREVIOUSããå«ãŸããŠããå ŽåãçŸåšã®ãã£ã³ã¯ã¯
æšãŠãããªãããšã
å ¥åã UTF-8 ãšããŠè§£éãããUTF-8 ãšã³ã³ãŒã ãšã©ãŒãçºçããå Žå
ééãããšäŸå€ãçæãããŸãã
I32 lex_peek_unichar(U32 ãã©ã°)
lex_read_space
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
çŸåšåå¥è§£æãããŠããããã¹ãå ã®ãªãã·ã§ã³ã®ã¹ããŒã¹ã Perl ã¹ã¿ã€ã«ã§èªã¿åããŸãã ã®
ã¹ããŒã¹ã«ã¯ãéåžžã®ç©ºçœæåãš Perl ã¹ã¿ã€ã«ã®ã³ã¡ã³ããå«ãŸããå ŽåããããŸãã
ã#lineããã£ã¬ã¯ãã£ããèŠã€ãã£ãå Žåã¯åŠçãããŸãã ãPL_parser->bufptrãã移åãããŸãã
ã¹ããŒã¹ãè¶ããŠãã¹ããŒã¹ä»¥å€ã®æå (ãŸãã¯æååã®æ«å°Ÿ) ãæãããã«ããŸãã
å ¥åããã¹ãïŒã
ã¹ããŒã¹ãå ¥åããã¹ãã®æ¬¡ã®ãã£ã³ã¯ã«ãŸã§åã¶å Žåã次ã®ãã£ã³ã¯ãèªã¿åãããŸãã
éåžžãçŸåšã®ãã£ã³ã¯ã¯åæã«ç Žæ£ãããŸããã ãã©ã°
ãLEX_KEEP_PREVIOUSããå«ãŸããŠããå ŽåãçŸåšã®ãã£ã³ã¯ã¯ç Žæ£ãããŸããã
void lex_read_space(U32 ãã©ã°)
lex_read_to
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
ãPL_parser->bufptrããã次ãŸã§ã®ã¬ã¯ãµãŒãããã¡å ã®ããã¹ããæ¶è²»ããŸãã PTRã ãã®
äžèŽããããã«ãPL_parser->bufptrããé²ããŸã PTRãæ£ããç°¿èšãå®è¡ãã
æ¹è¡æåãæž¡ããããã³ã«ã ãã㯠lexed ã䜿çšããéåžžã®æ¹æ³ã§ã
ããã¹ãã
ãããã¡ã®ãªã¯ãããã®è§£éã¯ãããããª
é«ã¬ãã«é¢æ°ãlex_peek_unicharãããã³ãlex_read_unicharãã
void lex_read_to(char *ptr)
lex_read_unichar
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
çŸåšåå¥è§£æãããŠããããã¹ãå ã®æ¬¡ã® (Unicode) æåãèªã¿åããŸãã ãè¿ããŸã
æåã®ã³ãŒããã€ã³ãïŒç¬Šå·ãªãæŽæ°å€ïŒãèªã¿åã£ãŠç§»åããŸãã
æåãè¶ ãããšãPL_parser->bufptrãããŸãã¯åå¥è§£æãå°éããå Žå㯠-1 ãè¿ããŸãã
å ¥åããã¹ãã®çµããã 次ã®æåãéç Žå£çã«èª¿ã¹ãã«ã¯ã次ã䜿çšããŸãã
代ããã«ãlex_peek_unicharãã䜿çšããŸãã
次ã®æåãå ¥åããã¹ãã®æ¬¡ã®ãã£ã³ã¯å ã«ãã (ãŸãã¯ãã®äžã«åºãã£ãŠãã) å Žåã
次ã®ãã£ã³ã¯ãèªã¿èŸŒãŸããŸããéåžžãçŸåšã®ãã£ã³ã¯ã¯æ¬¡ã®æç¹ã§ç Žæ£ãããŸãã
åæã«ãããããã ãã©ã° ãLEX_KEEP_PREVIOUSããå«ãŸããŠããå ŽåãçŸåšã®ãã£ã³ã¯ã¯
æšãŠãããªãããšã
å ¥åã UTF-8 ãšããŠè§£éãããUTF-8 ãšã³ã³ãŒã ãšã©ãŒãçºçããå Žå
ééãããšäŸå€ãçæãããŸãã
I32 lex_read_unichar(U32 ãã©ã°)
lex_start
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
æ°ããã¬ã¯ãµãŒ/ããŒãµãŒç¶æ ãªããžã§ã¯ããäœæããŠåæåããã³ã³ããã¹ããæäŸããŸãã
ããã Perl ã³ãŒãã®æ°ãããœãŒã¹ãã lex ããã³è§£æããŸãã æ°ããç¶æ ãžã®ãã€ã³ã¿
ãªããžã§ã¯ãã¯ãPL_parserãã«é 眮ãããŸãã ä¿åã¹ã¿ãã¯ã«ãšã³ããªãäœæãããããã
æ°ããç¶æ ãªããžã§ã¯ããå·»ãæ»ããšããªããžã§ã¯ãã¯ç Žæ£ããã以åã®å€ã¯ç Žæ£ãããŸãã
ãPL_parserãã埩å ãããŸãã 解æãã¯ãªãŒã³ã¢ããããããã«ä»ã«äœãããå¿ èŠã¯ãããŸãã
ã³ã³ããã¹ãã
解æãããã³ãŒãã¯æ¬¡ã®ãã®ããæ¥ãŸã ã©ã€ã³ ãš rsfp. ã©ã€ã³ãnull ã§ãªãå Žåã¯ã
解æããã³ãŒããå«ãæåå (SV 圢åŒ)ã æååã®ã³ããŒãäœæããã
ãã®åŸã®å€æŽ ã©ã€ã³ 解æã«ã¯åœ±é¿ããŸããã rsfpãnull ã§ãªãå Žåã
解æããããã«ã³ãŒããèªã¿åãããå ¥åã¹ããªãŒã ãæäŸããŸãã äž¡æ¹ããå Žå
null 以å€ã®ã³ãŒã ã©ã€ã³ æåã«æ¥ãŠã次ã®å®å šãªè¡ã§æ§æãããŠããå¿ èŠããããŸãã
å ¥åããã㊠rsfp ãœãŒã¹ã®æ®ãã®éšåãäŸçµŠããŸãã
ãã® ãã©ã° ãã©ã¡ãŒã¿ã¯å°æ¥ã®äœ¿çšã®ããã«äºçŽãããŠããŸãã çŸåšã¯ perl ã®ã¿ã§äœ¿çšãããŠããŸã
å éšçã«ã¯ãã®ãããæ¡åŒµæ©èœã§ã¯åžžã«ãŒããæž¡ãå¿ èŠããããŸãã
void lex_start(SV *lineãPerlIO *rsfpãU32 ãã©ã°)
lex_stuff_pv
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
ã¬ã¯ãµãŒãããã¡ãŒ (ãPL_parser->linestrã) ã®çŽåŸã«æåãæ¿å ¥ããŸãã
çŸåšã®ã¬ã¯ã·ã³ã° ãã€ã³ã (ãPL_parser->bufptrã)ã次ã®å Žåã«ãããã¡ãåå²ãåœãŠããŸãã
å¿ èŠã ããã¯ãåŸã§å®è¡ãããåå¥è§£æã³ãŒãã§ã¯æåã次ã®ããã«èªèãããããšãæå³ããŸãã
ããããå ¥åã«çŸããå Žåã ãããäžéšãšããŠè¡ãããšã¯ãå§ãã§ããŸãã
éåžžã®è§£æã§ã¯ããã®æ©èœã®ã»ãšãã©ã®äœ¿çšã«ã¯ãæ¿å ¥ããã
æåãæå³ããªãæ¹æ³ã§è§£éãããã
æ¿å ¥ãããæååã¯ã次ããå§ãŸããªã¯ãããã§è¡šãããŸãã pv ç¶ããŸã
æåã®ãã«ãŸã§ã ãããã®ãªã¯ããã㯠UTF-8 ãŸã㯠Latin-1 ãšããŠè§£éãããŸãã
ãLEX_STUFF_UTF8ããã©ã°ãèšå®ãããŠãããã©ããã«å¿ã㊠ãã©ã°ã ãã£ã©ã¯ã¿ãŒ
ãããã¡ã®çŸåšã®ç¶æ ã«å¿ããŠãã¬ã¯ãµãŒãããã¡çšã«åã³ãŒãåãããŸãã
解éãããŸã (ãlex_bufutf8ã)ã æååã NULL ã§çµäºããã®ãäžäŸ¿ãªå Žåã¯ã
æ¿å ¥ããå Žåã¯ããlex_stuff_pvnãé¢æ°ã®æ¹ãé©åã§ãã
void lex_stuff_pv(const char *pvãU32 ãã©ã°)
lex_stuff_pvn
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
ã¬ã¯ãµãŒãããã¡ãŒ (ãPL_parser->linestrã) ã®çŽåŸã«æåãæ¿å ¥ããŸãã
çŸåšã®ã¬ã¯ã·ã³ã° ãã€ã³ã (ãPL_parser->bufptrã)ã次ã®å Žåã«ãããã¡ãåå²ãåœãŠããŸãã
å¿ èŠã ããã¯ãåŸã§å®è¡ãããåå¥è§£æã³ãŒãã§ã¯æåã次ã®ããã«èªèãããããšãæå³ããŸãã
ããããå ¥åã«çŸããå Žåã ãããäžéšãšããŠè¡ãããšã¯ãå§ãã§ããŸãã
éåžžã®è§£æã§ã¯ããã®æ©èœã®ã»ãšãã©ã®äœ¿çšã«ã¯ãæ¿å ¥ããã
æåãæå³ããªãæ¹æ³ã§è§£éãããã
æ¿å ¥ããæååã¯æ¬¡ã®ããã«è¡šãããŸãã LEN ã§å§ãŸããªã¯ããã pvã ããã
ãªã¯ãããã¯ã
ãLEX_STUFF_UTF8ããã©ã°ãèšå®ãããŠããŸã ãã©ã°ã æåã¯ã¬ã¯ãµãŒçšã«åã³ãŒãåãããŸã
ãããã¡ããããã¡ãçŸåšã©ã®ããã«è§£éãããŠãããã«å¿ããŠ
(ãlex_bufutf8ã)ã æ¿å ¥ããæååã Perl ã¹ã«ã©ãŒãšããŠå©çšå¯èœãªå Žåã
ãlex_stuff_svãé¢æ°ã®æ¹ã䟿å©ã§ãã
void lex_stuff_pvn(const char *pv, STRLEN len,
U32 ãã©ã°)
lex_stuff_pvs
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
ãlex_stuff_pvnããšäŒŒãŠããŸãããæååãšé·ãã®ãã¢ã®ä»£ããã«ãªãã©ã«æååãåãåããŸãã
void lex_stuff_pvs(const char *pvãU32 ãã©ã°)
lex_stuff_sv
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
ã¬ã¯ãµãŒãããã¡ãŒ (ãPL_parser->linestrã) ã®çŽåŸã«æåãæ¿å ¥ããŸãã
çŸåšã®ã¬ã¯ã·ã³ã° ãã€ã³ã (ãPL_parser->bufptrã)ã次ã®å Žåã«ãããã¡ãåå²ãåœãŠããŸãã
å¿ èŠã ããã¯ãåŸã§å®è¡ãããåå¥è§£æã³ãŒãã§ã¯æåã次ã®ããã«èªèãããããšãæå³ããŸãã
ããããå ¥åã«çŸããå Žåã ãããäžéšãšããŠè¡ãããšã¯ãå§ãã§ããŸãã
éåžžã®è§£æã§ã¯ããã®æ©èœã®ã»ãšãã©ã®äœ¿çšã«ã¯ãæ¿å ¥ããã
æåãæå³ããªãæ¹æ³ã§è§£éãããã
æ¿å ¥ãããæååã¯ã次ã®æååå€ã§ãã svã æåãåã³ãŒãåããã
ã¬ã¯ãµãŒãããã¡ã®å Žåããããã¡ãçŸåšã©ã®ããã«è§£éãããŠãããã«å¿ããŠ
(ãlex_bufutf8ã)ã æ¿å ¥ãããæååããŸã Perl ã¹ã«ã©ãŒã§ãªãå Žåã
ãlex_stuff_pvnãé¢æ°ã䜿çšãããšãã¹ã«ã©ãŒãæ§ç¯ããå¿ èŠããªããªããŸãã
void lex_stuff_sv(SV *svãU32 ãã©ã°)
lex_unstuff
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
ãPL_parser->bufptrããã次ã®ã¬ãã«ãŸã§ãåå¥è§£æãããããšããŠããããã¹ããç Žæ£ããŸãã PTRã ããã¹ã
ãã©ããŒäž PTR ã移åããããããã¡ãççž®ãããŸãã ããã«ãããç Žæ£ããããã®ãé衚瀺ã«ãªããŸã
ããã¹ãããŸã£ããåºçŸããªãã£ããã®ããã«ãåŸã§å®è¡ãããåå¥è§£æã³ãŒãã®ããã¹ãã
ããã¯ãåå¥è§£æãããããã¹ãã䜿çšããéåžžã®æ¹æ³ã§ã¯ãããŸããã ãã®ããã«ã¯ããlex_read_toãã䜿çšããŸãã
void lex_unstuff(char *ptr)
parse_arithexpr
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
Perl ç®è¡åŒã解æããŸãã ããã«ã¯åªå é äœãäœãæŒç®åãå«ãŸããå¯èœæ§ããããŸã
ãããã·ããæŒç®åã«ã åŒã¯ç¶è¡ããå¿ èŠããããŸã (ãããã£ãŠçµäºããå¿ èŠããããŸã)ã
æ¯èŒæŒç®åãåªå é äœã®äœãæŒç®åããããã¯
éåžžã¯ã»ãã³ãã³ãªã©ã®åŒãçµäºããŸãã ãã ãã©ã° å«ãŸ
ãPARSE_OPTIONALãã®å ŽåãåŒã¯ãªãã·ã§ã³ã§ãããã以å€ã®å Žåã¯å¿ é ã§ãã ãã
åçããŒãµãŒã®ç¶æ (ãPL_parserããªã©) ã確å®ã«
解æãããã³ãŒãã®ãœãŒã¹ãšèªåœãåæ ããããã«æ£ããèšå®ãããŠããŸãã
åŒã®ã³ã³ããã¹ãã
åŒãè¡šã op ããªãŒãè¿ãããŸãã ãªãã·ã§ã³ã®åŒã
ååšããªãå Žå㯠null ãã€ã³ã¿ãè¿ãããããã§ãªãå Žåã¯ãã€ã³ã¿ã¯é null ã«ãªããŸãã
解æãŸãã¯ã³ã³ãã€ã«äžã«ãšã©ãŒãçºçããå Žåãã»ãšãã©ã®å Žåãæå¹ãª op ããªãŒã¯ç¡å¹ã«ãªããŸãã
ãšã«ããæ»ã£ãã ãšã©ãŒã¯ããŒãµãŒã®ç¶æ ã«åæ ãããéåžžã¯æ¬¡ã®ãããªçµæãåŸãããŸãã
ãã¹ãŠã®ã³ã³ãã€ã«ãã«ããŒãã解æã®æäžäœã¬ãã«ã§ã® XNUMX ã€ã®äŸå€ã§
çºçãããšã©ãŒã ãã ããäžéšã®ã³ã³ãã€ã« ãšã©ãŒã§ã¯äŸå€ãã¹ããŒãããŸãã
ããã«ã
OP * parse_arithexpr(U32 ãã©ã°)
parse_barestmt
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
åäžã®é£ŸãããŠããªã Perl ã¹ããŒãã¡ã³ãã解æããŸãã ããã¯éåžžã®åœä»€ãããããŸãã
ã³ã³ãã€ã«æã«åœ±é¿ãäžããã¹ããŒãã¡ã³ããŸãã¯å®£èšã äœãå«ãŸããŠããŸãã
ã©ãã«ããã®ä»ã®ä»å±åã åçã§ããããšã確èªãããã©ããã¯åŒã³åºãåŽã®è²¬ä»»ã§ãã
ããŒãµãŒç¶æ (ãPL_parserããªã©) ã¯ããœãŒã¹ãåæ ããããã«æ£ããèšå®ãããŠããŸãã
解æããã³ãŒããšã¹ããŒãã¡ã³ãã®èªåœã³ã³ããã¹ãã
ã¹ããŒãã¡ã³ããè¡šã op ããªãŒãè¿ãããŸãã 次ã®å Žåãããã¯ãã«ãã€ã³ã¿ã§ããå¯èœæ§ããããŸãã
ã¹ããŒãã¡ã³ã㯠null ã§ããããšãã°ãã¹ããŒãã¡ã³ããå®éã«ãµãã«ãŒãã³å®çŸ©ã ã£ãå Žåãªã©ã§ãã
(ã³ã³ãã€ã«æã®å¯äœçšããããŸã)ã null ã§ãªãå Žåã¯ãçŽæ¥ ops ã«ãªããŸã
ãnewSTATEOPãã«æž¡ãã®ã«é©ããã¹ããŒãã¡ã³ããå®è£ ããŸãã ãªããªã
éåžžããnextstateããŸãã¯åçã®æäœãå«ãŸããŸãïŒãã ãã
ã¹ã³ãŒãã¯ã¹ããŒãã¡ã³ãå ã«å®å šã«å«ãŸããŸã)ã
解æãŸãã¯ã³ã³ãã€ã«äžã«ãšã©ãŒãçºçããå Žåãã»ãšãã©ã®å Žåãæå¹ãª op ããªãŒ (ã»ãšãã©ã®å Žåã
null ã®å¯èœæ§ãé«ã) ããšã«ããè¿ãããŸãã ãšã©ãŒã¯ããŒãµãŒã®ç¶æ ã«åæ ãããŸãã
éåžžã解æã®æäžäœã¬ãã«ã§ XNUMX ã€ã®äŸå€ãçºçããŸãã
çºçãããã¹ãŠã®ã³ã³ãã€ã« ãšã©ãŒã ãã ããäžéšã®ã³ã³ãã€ã« ãšã©ãŒã¯ã
ããã«äŸå€ãã¹ããŒããŸãã
ãã® ãã©ã° ãã©ã¡ãŒã¿ã¯å°æ¥ã®äœ¿çšã®ããã«äºçŽãããŠãããåžžã«ãŒãã«ããå¿ èŠããããŸãã
OP * parse_barestmt(U32 ãã©ã°)
解æãããã¯
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
åäžã®å®å šãª Perl ã³ãŒã ãããã¯ã解æããŸãã ããã¯å·Šäžæ¬åŒ§ã
ã¹ããŒãã¡ã³ãã®ã·ãŒã±ã³ã¹ãšå³äžæ¬åŒ§ã ãããã¯ã¯èªåœãæ§æããŸã
ã¹ã³ãŒãå ã«ããããããmyãå€æ°ãšããŸããŸãªã³ã³ãã€ã«æã®å¹æãã¹ã³ãŒãå ã«å«ããããšãã§ããŸãã
ããã åçããŒãµãŒã®ç¶æ (ãPL_parserã) ã確èªããã®ã¯åŒã³åºãå ã®è²¬ä»»ã§ãã
et al) ã¯ã解æãããã³ãŒãã®ãœãŒã¹ãåæ ããããã«æ£ããèšå®ãããŠããã
ã¹ããŒãã¡ã³ãã®èªåœã³ã³ããã¹ãã
ã³ãŒã ãããã¯ãè¡šã op ããªãŒãè¿ãããŸãã ããã¯åžžã«æ¬åœã®äœæŠã§ãã
決ããŠãã«ãã€ã³ã¿ã§ã¯ãããŸããã éåžžã¯ããnextstateããå«ããlineseqããªã¹ãã«ãªããŸãã
ãŸãã¯åçã®æäœã ããããçš®é¡ã®ã©ã³ã¿ã€ã ã¹ã³ãŒããæ§ç¯ããããã®æäœã¯å«ãŸããŠããŸããã
ãããã¯ã§ãããšããå©ç¹ããããŸãã
解æãŸãã¯ã³ã³ãã€ã«äžã«ãšã©ãŒãçºçããå Žåãã»ãšãã©ã®å Žåãæå¹ãª op ããªãŒ (ã»ãšãã©ã®å Žåã
null ã®å¯èœæ§ãé«ã) ããšã«ããè¿ãããŸãã ãšã©ãŒã¯ããŒãµãŒã®ç¶æ ã«åæ ãããŸãã
éåžžã解æã®æäžäœã¬ãã«ã§ XNUMX ã€ã®äŸå€ãçºçããŸãã
çºçãããã¹ãŠã®ã³ã³ãã€ã« ãšã©ãŒã ãã ããäžéšã®ã³ã³ãã€ã« ãšã©ãŒã¯ã
ããã«äŸå€ãã¹ããŒããŸãã
ãã® ãã©ã° ãã©ã¡ãŒã¿ã¯å°æ¥ã®äœ¿çšã®ããã«äºçŽãããŠãããåžžã«ãŒãã«ããå¿ èŠããããŸãã
OP * parse_block(U32 ãã©ã°)
parse_fullexpr
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
åäžã®å®å šãª Perl åŒã解æããŸãã ããã«ãããå®å šãªè¡šçŸææ³ãå¯èœã«ãªããŸãã
ãorããªã©ã®æãåªå é äœã®äœãæŒç®åãå«ãŸããŸãã åŒã¯æ¬¡ã®ããã«ããå¿ èŠããããŸã
åŒãé垞次ã®ããã«ç¶ãããŒã¯ã³ãåŸã«ç¶ããŸã (ãããã£ãŠçµäºããŸã)ã
ãã¡ã€ã«ã®çµãããå³æ¬åŒ§å¥èªç¹ãã»ãã³ãã³ããŸãã¯æ¬¡ã®ããããã§çµäºããŸãã
åŸçœ®åŒã¹ããŒãã¡ã³ã修食åãéç¥ããããŒã¯ãŒãã ãã ãã©ã°
ãPARSE_OPTIONALããå«ãŸããŠããå ŽåãåŒã¯ãªãã·ã§ã³ã§ãããã以å€ã®å Žåã¯ãåŒã¯ãªãã·ã§ã³ã§ãã
å¿ é ã åçããŒãµãŒã®ç¶æ ã確èªããã®ã¯åŒã³åºãå ã®è²¬ä»»ã§ãã
(ãPL_parserããªã©) ã¯ãã³ãŒãã®ãœãŒã¹ãåæ ããããã«æ£ããèšå®ãããŠããŸãã
解æãããåŒã®èªåœã³ã³ããã¹ãã
åŒãè¡šã op ããªãŒãè¿ãããŸãã ãªãã·ã§ã³ã®åŒã
ååšããªãå Žå㯠null ãã€ã³ã¿ãè¿ãããããã§ãªãå Žåã¯ãã€ã³ã¿ã¯é null ã«ãªããŸãã
解æãŸãã¯ã³ã³ãã€ã«äžã«ãšã©ãŒãçºçããå Žåãã»ãšãã©ã®å Žåãæå¹ãª op ããªãŒã¯ç¡å¹ã«ãªããŸãã
ãšã«ããæ»ã£ãã ãšã©ãŒã¯ããŒãµãŒã®ç¶æ ã«åæ ãããéåžžã¯æ¬¡ã®ãããªçµæãåŸãããŸãã
ãã¹ãŠã®ã³ã³ãã€ã«ãã«ããŒãã解æã®æäžäœã¬ãã«ã§ã® XNUMX ã€ã®äŸå€ã§
çºçãããšã©ãŒã ãã ããäžéšã®ã³ã³ãã€ã« ãšã©ãŒã§ã¯äŸå€ãã¹ããŒãããŸãã
ããã«ã
OP * parse_fullexpr(U32 ãã©ã°)
parse_fullstmt
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
åäžã®å®å šãª Perl ã¹ããŒãã¡ã³ãã解æããŸãã ããã¯éåžžã®åœä»€æãããããŸãã
ãŸãã¯ã³ã³ãã€ã«æã«å¹æãããããªãã·ã§ã³ã®ã©ãã«ãå«ããããšãã§ãã宣èšã
åçããŒãµãŒã®ç¶æ (ãPL_parserããªã©) ã確èªããã®ã¯åŒã³åºãåŽã®è²¬ä»»ã§ãã
解æãããã³ãŒãã®ãœãŒã¹ãšèªåœãåæ ããããã«æ£ããèšå®ãããŠããŸãã
ã¹ããŒãã¡ã³ãã®ã³ã³ããã¹ãã
ã¹ããŒãã¡ã³ããè¡šã op ããªãŒãè¿ãããŸãã 次ã®å Žåãããã¯ãã«ãã€ã³ã¿ã§ããå¯èœæ§ããããŸãã
ã¹ããŒãã¡ã³ã㯠null ã§ããããšãã°ãã¹ããŒãã¡ã³ããå®éã«ãµãã«ãŒãã³å®çŸ©ã ã£ãå Žåãªã©ã§ãã
(ã³ã³ãã€ã«æã®å¯äœçšããããŸã)ã null ã§ãªãå Žåã¯ã
ãnewSTATEOPãåŒã³åºããéåžžã¯ãnextstateããŸãã¯åçã®æäœãå«ãŸããŸãã
解æãŸãã¯ã³ã³ãã€ã«äžã«ãšã©ãŒãçºçããå Žåãã»ãšãã©ã®å Žåãæå¹ãª op ããªãŒ (ã»ãšãã©ã®å Žåã
null ã®å¯èœæ§ãé«ã) ããšã«ããè¿ãããŸãã ãšã©ãŒã¯ããŒãµãŒã®ç¶æ ã«åæ ãããŸãã
éåžžã解æã®æäžäœã¬ãã«ã§ XNUMX ã€ã®äŸå€ãçºçããŸãã
çºçãããã¹ãŠã®ã³ã³ãã€ã« ãšã©ãŒã ãã ããäžéšã®ã³ã³ãã€ã« ãšã©ãŒã¯ã
ããã«äŸå€ãã¹ããŒããŸãã
ãã® ãã©ã° ãã©ã¡ãŒã¿ã¯å°æ¥ã®äœ¿çšã®ããã«äºçŽãããŠãããåžžã«ãŒãã«ããå¿ èŠããããŸãã
OP * parse_fullstmt(U32 ãã©ã°)
解æã©ãã«
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
Perl ã®ãã¬ãã£ãã¯ã¹ãšãªãã¿ã€ãã®åäžã©ãã« (å Žåã«ãã£ãŠã¯ãªãã·ã§ã³) ã解æããŸãã
声æã åçããŒãµãŒã®ç¶æ ã確èªããã®ã¯åŒã³åºãå ã®è²¬ä»»ã§ãã
(ãPL_parserããªã©) ã¯ãã³ãŒãã®ãœãŒã¹ãåæ ããããã«æ£ããèšå®ãããŠããŸãã
解æãããã ãã ãã©ã° ãPARSE_OPTIONALããå«ãŸããŠããå Žåãã©ãã«ã¯ãªãã·ã§ã³ã§ãããã以å€ã®å Žåã¯ã
ãããå¿ é ã§ãã
ã©ãã«ã®ååã¯æ°ããã¹ã«ã©ãŒã®åœ¢åŒã§è¿ãããŸãã ãªãã·ã§ã³ã®å Žå
ã©ãã«ãååšããªãå Žåã¯ãnull ãã€ã³ã¿ãè¿ãããŸãã
解æäžã«ãšã©ãŒãçºçããå Žå (ã©ãã«ãå¿ é ã®å Žåã«ã®ã¿çºçããå¯èœæ§ããããŸã)ã
ãšã«ããæå¹ãªã©ãã«ãè¿ãããŸãã ãšã©ãŒã¯ããŒãµãŒã®ç¶æ ã«åæ ãããŸãã
éåžžã解æã®æäžäœã¬ãã«ã§ XNUMX ã€ã®äŸå€ãçºçããŸãã
çºçãããã¹ãŠã®ã³ã³ãã€ã« ãšã©ãŒã
SV * parse_label(U32 ãã©ã°)
parse_listexpr
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
Perl ãªã¹ãåŒã解æããŸãã ããã«ã¯ã以äžã®åªå é äœã®æŒç®åãå«ãŸããå ŽåããããŸãã
ã«ã³ãæŒç®åã åŒã¯æ¬¡ã®ããããã®åŸã«ç¶ã (ãããã£ãŠçµäºãã) å¿ èŠããããŸãã
ãorããªã©ã®åªå é äœã®äœãè«çæŒç®åããŸãã¯
éåžžã¯ã»ãã³ãã³ãªã©ã®åŒãçµäºããŸãã ãã ãã©ã° å«ãŸ
ãPARSE_OPTIONALãã®å ŽåãåŒã¯ãªãã·ã§ã³ã§ãããã以å€ã®å Žåã¯å¿ é ã§ãã ãã
åçããŒãµãŒã®ç¶æ (ãPL_parserããªã©) ã確å®ã«
解æãããã³ãŒãã®ãœãŒã¹ãšèªåœãåæ ããããã«æ£ããèšå®ãããŠããŸãã
åŒã®ã³ã³ããã¹ãã
åŒãè¡šã op ããªãŒãè¿ãããŸãã ãªãã·ã§ã³ã®åŒã
ååšããªãå Žå㯠null ãã€ã³ã¿ãè¿ãããããã§ãªãå Žåã¯ãã€ã³ã¿ã¯é null ã«ãªããŸãã
解æãŸãã¯ã³ã³ãã€ã«äžã«ãšã©ãŒãçºçããå Žåãã»ãšãã©ã®å Žåãæå¹ãª op ããªãŒã¯ç¡å¹ã«ãªããŸãã
ãšã«ããæ»ã£ãã ãšã©ãŒã¯ããŒãµãŒã®ç¶æ ã«åæ ãããéåžžã¯æ¬¡ã®ãããªçµæãåŸãããŸãã
ãã¹ãŠã®ã³ã³ãã€ã«ãã«ããŒãã解æã®æäžäœã¬ãã«ã§ã® XNUMX ã€ã®äŸå€ã§
çºçãããšã©ãŒã ãã ããäžéšã®ã³ã³ãã€ã« ãšã©ãŒã§ã¯äŸå€ãã¹ããŒãããŸãã
ããã«ã
OP * parse_listexpr(U32 ãã©ã°)
parse_stmtseq
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
XNUMX å以äžã® Perl ã¹ããŒãã¡ã³ãã®ã·ãŒã±ã³ã¹ã解æããŸãã ãããã¯éåžžã®åœä»€ãããããŸãã
ãªãã·ã§ã³ã®ã©ãã«ãå«ãã¹ããŒãã¡ã³ãããŸãã¯ã³ã³ãã€ã«æã®ãã宣èš
å¹æããŸãã¯ãããã®æ··åç©ã ã¹ããŒãã¡ã³ã ã·ãŒã±ã³ã¹ã¯ãå³äžãã£ãã§çµäºããŸãã
ãŸãã¯ãæ°ããã¹ããŒãã¡ã³ããæå¹ã«ååšããå¯èœæ§ãããå Žæã§ãã¡ã€ã«ã®çµãããæ€åºãããŸããã
å§ããŸããã åçããŒãµãŒã®ç¶æ ã確èªããã®ã¯åŒã³åºãå ã®è²¬ä»»ã§ãã
(ãPL_parserããªã©) ã¯ãã³ãŒãã®ãœãŒã¹ãåæ ããããã«æ£ããèšå®ãããŠããŸãã
解æãããã¹ããŒãã¡ã³ãã®èªåœã³ã³ããã¹ãã
ã¹ããŒãã¡ã³ãã·ãŒã±ã³ã¹ãè¡šã op ããªãŒãè¿ãããŸãã ãã㯠null ã®å¯èœæ§ããããŸã
ã¹ããŒãã¡ã³ãããã¹ãŠ null ã ã£ãå Žåã®ãã€ã³ã¿ãŒ (ã¹ããŒãã¡ã³ããååšããªãã£ãå Žåãªã©)
ãŸãã¯ããµãã«ãŒãã³å®çŸ© (ã³ã³ãã€ã«æåŽãæã€) ã®ã¿ããã£ãå Žå
å¹æïŒã null ã§ãªãå Žåãéåžžã¯æ¬¡ã®ãã®ãå«ãŸãã "lineseq" ãªã¹ãã«ãªããŸãã
ãnextstateããŸãã¯åçã®æäœã
解æãŸãã¯ã³ã³ãã€ã«äžã«ãšã©ãŒãçºçããå Žåãã»ãšãã©ã®å Žåãæå¹ãª op ããªãŒã¯ç¡å¹ã«ãªããŸãã
ãšã«ããæ»ã£ãã ãšã©ãŒã¯ããŒãµãŒã®ç¶æ ã«åæ ãããéåžžã¯æ¬¡ã®ãããªçµæãåŸãããŸãã
ãã¹ãŠã®ã³ã³ãã€ã«ãã«ããŒãã解æã®æäžäœã¬ãã«ã§ã® XNUMX ã€ã®äŸå€ã§
çºçãããšã©ãŒã ãã ããäžéšã®ã³ã³ãã€ã« ãšã©ãŒã§ã¯äŸå€ãã¹ããŒãããŸãã
ããã«ã
ãã® ãã©ã° ãã©ã¡ãŒã¿ã¯å°æ¥ã®äœ¿çšã®ããã«äºçŽãããŠãããåžžã«ãŒãã«ããå¿ èŠããããŸãã
OP * parse_stmtseq(U32 ãã©ã°)
parse_termexpr
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
Perl çšèªåŒã解æããŸãã ããã«ã¯ã以äžã®åªå é äœã®æŒç®åãå«ãŸããå ŽåããããŸãã
ä»£å ¥æŒç®åã åŒã¯ç¶è¡ããå¿ èŠããããŸã (ãããã£ãŠçµäºããå¿ èŠããããŸã)ã
ã«ã³ããŸãã¯åªå é äœã®äœãæŒç®åããŸãã¯éåžžã¯
ã»ãã³ãã³ãªã©ã®åŒãçµäºããŸãã ãã ãã©ã° ãPARSE_OPTIONALããå«ã
ãã®å ŽåãåŒã¯ãªãã·ã§ã³ã§ãããã以å€ã®å ŽåãåŒã¯å¿ é ã§ãã ããã¯ã
åçããŒãµãŒã®ç¶æ (ãPL_parserããªã©) ãæ£ããã§ããããšã確èªããåŒã³åºãå
解æãããã³ãŒãã®ãœãŒã¹ãšãã®èªåœã³ã³ããã¹ããåæ ããããã«èšå®ãããŸãã
åŒã§ãã
åŒãè¡šã op ããªãŒãè¿ãããŸãã ãªãã·ã§ã³ã®åŒã
ååšããªãå Žå㯠null ãã€ã³ã¿ãè¿ãããããã§ãªãå Žåã¯ãã€ã³ã¿ã¯é null ã«ãªããŸãã
解æãŸãã¯ã³ã³ãã€ã«äžã«ãšã©ãŒãçºçããå Žåãã»ãšãã©ã®å Žåãæå¹ãª op ããªãŒã¯ç¡å¹ã«ãªããŸãã
ãšã«ããæ»ã£ãã ãšã©ãŒã¯ããŒãµãŒã®ç¶æ ã«åæ ãããéåžžã¯æ¬¡ã®ãããªçµæãåŸãããŸãã
ãã¹ãŠã®ã³ã³ãã€ã«ãã«ããŒãã解æã®æäžäœã¬ãã«ã§ã® XNUMX ã€ã®äŸå€ã§
çºçãããšã©ãŒã ãã ããäžéšã®ã³ã³ãã€ã« ãšã©ãŒã§ã¯äŸå€ãã¹ããŒãããŸãã
ããã«ã
OP * parse_termexpr(U32 ãã©ã°)
PL_ããŒãµãŒ
çŸåšã®è§£ææäœã®ç¶æ ãã«ãã»ã«åããæ§é äœãžã®ãã€ã³ã¿
é²è¡äžã ãã€ã³ã¿ãããŒã«ã«ã«å€æŽããŠããã¹ãããã解æãå®è¡ã§ããŸãã
å€éšè§£æã®ç¶æ ã«å¹²æžããŸãã ãPL_parserãã®åã ã®ã¡ã³ããŒ
ç¬èªã®ããã¥ã¡ã³ããæã£ãŠããŸãã
PL_parser->bufend
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
çŸåšåå¥è§£æãããŠããããã¹ãã®ãã£ã³ã¯ã®çµãããã€ãŸãããã¹ãã®çµãããžã®çŽæ¥ãã€ã³ã¿ãŒ
ã¬ã¯ãµãŒãããã¡ãŒã ããã¯ããSvPVX(PL_parser->linestr) +ããšçãããªããŸãã
SvCUR(PL_parser->linestr)"ããNULãæå (ãŒã ãªã¯ããã) ã¯åžžã«æ¬¡ã®äœçœ®ã«ãããŸãã
ãããã¡ã®çµããã§ããããããã¡ã®å 容ã®äžéšãšããŠã«ãŠã³ããããŸããã
PL_parser->bufptr
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
ã¬ã¯ãµãŒãããã¡ãŒå ã®ã¬ã¯ãµãŒã®çŸåšäœçœ®ãæããŸãã ãã£ã©ã¯ã¿ãŒ
ãã®ãããã¯ã ã§åºåãããç¯å²å ã§èªç±ã«æ€èšã§ããŸãã
ãSvPVX("PL_parser->linestr")ãããã³ãPL_parser->bufendãã ãããã¡ã®ãªã¯ããã
ã§ç€ºãããããã«ãUTF-8 ãŸã㯠Latin-1 ãšããŠè§£éãããããã«æå³ãããŠããå¯èœæ§ããããŸãã
ãlex_bufutf8ãã
åå¥è§£æã³ãŒã (Perl ã³ã¢å ãã©ããã«é¢ä¿ãªã) ã¯ããã®ãã€ã³ã¿ãŒã次ã®å€ãè¶ ããŠç§»åããŸãã
æ¶è²»ããæåæ°ã ç°¿èšæ¥åãè¡ãäºå®ã§ã
æ¹è¡æåãæ¶è²»ããããã³ã«ã ãã®ç§»åããã䟿å©ã«ãªããŸã
ããã¯ãæ¹è¡ãé©åã«åŠçããé¢æ°ãlex_read_toãã«ãã£ãŠå®è¡ãããŸãã
ãããã¡ã®ãªã¯ãããã®è§£éã¯ãããããª
é«ã¬ãã«é¢æ°ãlex_peek_unicharãããã³ãlex_read_unicharãã
PL_parser->linestart
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
ã¬ã¯ãµãŒãããã¡ãŒå ã®çŸåšã®è¡ã®å é ãæããŸãã ããã¯äŸ¿å©ã§ã
ã©ã®åã§ãšã©ãŒãçºçãããã瀺ãããã®ãã®ã§ããã以å€ã¯ããŸã圹ã«ç«ã¡ãŸããã ããã¯ãã£ãš
æ¹è¡ã䜿çšããåå¥è§£æã³ãŒãã«ãã£ãŠæŽæ°ãããŸãã é¢æ°ãlex_read_toã
ãã®è©³çŽ°ãåŠçããŸãã
PL_parser->linestr
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
çŸåšããã¹ããæ€èšããŠãããã£ã³ã¯ãå«ããããã¡ ã¹ã«ã©ãŒ
çŸåšã¬ã¯äžã§ãã ããã¯åžžã«ãã¬ãŒã³ãªæååã¹ã«ã©ãŒã§ã (ãSvPOKãã¯
çå®ïŒã éåžžã®ã¹ã«ã©ãŒæ段ã§ã¹ã«ã©ãŒãšããŠäœ¿çšããããšã¯æå³ãããŠããŸããã ãã®ä»£ãã
以äžã«èª¬æãããã€ã³ã¿å€æ°ã«ãã£ãŠãããã¡ãçŽæ¥åç §ããŸãã
ã¬ã¯ãµãŒã¯ããPL_parser->linestrãå ã®ãã®ãžã®ããŸããŸãªãchar*ããã€ã³ã¿ãŒãç¶æããŸãã
ãããã¡ã ãPL_parser->linestrããåå²ãåœãŠãããå Žåããããã®ãã€ã³ã¿ã¯ãã¹ãŠåå²ãåœãŠãããå¿ èŠããããŸãã
æŽæ°ããŸãã ãããæåã§å®è¡ããããšããããlex_grow_linestrãã䜿çšããŠãã ããã
ãããã¡ãåå²ãåœãŠããå¿ èŠãããå Žåã
ãããã¡å ã®ããã¹ã ãã£ã³ã¯ã®å 容ã¯éåžžãå®å šãª XNUMX è¡ã§ãã
æ¹è¡ã¿ãŒãããŒã¿ãŸã§ã®å ¥åãå«ããããšãã§ããŸãããç¶æ³ã«ãã£ãŠã¯
ããã¯ããã§ã¯ãããŸããã ãããã¡ã®ãªã¯ãããã¯æ¬¡ã®ããã«è§£éãããããšãæå³ããŠããå¯èœæ§ããããŸãã
UTF-8 ãŸã㯠Latin-1 ã®ããããã é¢æ°ãlex_bufutf8ããã©ã¡ãã§ãããã瀺ããŸãã 䜿ã£ãŠã¯ãããŸãã
ãã®ã¹ã«ã©ãŒã®ãSvUTF8ããã©ã°ã¯ããããšäžèŽããªãå¯èœæ§ããããŸãã
ãããã¡ãçŽæ¥èª¿ã¹ãå Žåãå€æ°ãPL_parser->bufendãã¯ä»¥äžãæããŸãã
ãããã¡ã®çµããã çŸåšã®ã¬ã¯ã·ã³ã°äœçœ®ã¯æ¬¡ã®ããã«æå®ãããŸãã
ãPL_parser->bufptrãã éåžžã¯ããããã®ãã€ã³ã¿ãçŽæ¥äœ¿çšããããšããå§ãããŸãã
éåžžã®ã¹ã«ã©ãŒæ段ã«ããã¹ã«ã©ãŒã®æ€æ»ã
ãã±ãŒã«é¢é£ æ©èœ ãš ãã¯ã
DECLARATION_FOR_LC_NUMERIC_MANIPULATION
ãã®ãã¯ãã¯ã¹ããŒãã¡ã³ããšããŠäœ¿çšããå¿ èŠããããŸãã ãã©ã€ããŒãå€æ°ã宣èšããŸãïŒãã®
ååã¯ã¢ã³ããŒã¹ã³ã¢ã§å§ãŸããŸã)ãããã¯ããã®äžã®ä»ã®ãã¯ãã§å¿ èŠã§ãã
ã»ã¯ã·ã§ã³ã ãããæ£ããå«ããªããšãæ§æãšã©ãŒãçºçããŸãã ã®ããã«
C89 C ã³ã³ãã€ã©ãšã®äºææ§ã®ãããã³ã³ãã€ã©ã®åã®ãããã¯ã«é 眮ããå¿ èŠããããŸãã
å®è¡å¯èœãªã¹ããŒãã¡ã³ãã
ç¡å¹ãª DECLARATION_FOR_LC_NUMERIC_MANIPULATION
RESTORE_LC_NUMERIC
ããã¯ããã¯ãã® XNUMX ã€ãšçµã¿åãããŠäœ¿çšââãããŸãã
ãSTORE_LC_NUMERIC_SET_TO_NEEDEDãããã³ãSTORE_LC_NUMERIC_FORCE_TO_UNDERLYINGã
ãLC_NUMERICãç¶æ ãé©åã«åŸ©å ããŸãã
宣èšããã«ã¯ããDECLARATION_FOR_LC_NUMERIC_MANIPULATIONãã®åŒã³åºããè¡ãããŠããå¿ èŠããããŸãã
ã³ã³ãã€ã«æã«ããã®ãã¯ããš XNUMX ã€ã®ãSTOREãå€æ°ã«ãã£ãŠäœ¿çšããããã©ã€ããŒãå€æ°ã
ãã®ãã¯ãã¯ãåŒã§ã¯ãªãåäžã®ã¹ããŒãã¡ã³ããšããŠåŒã³åºãå¿ èŠããããŸãã
次ã®ãããªç©ºã®åŒæ°ãªã¹ã:
{
DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
...
RESTORE_LC_NUMERIC();
...
}
void RESTORE_LC_NUMERIC()
STORE_LC_NUMERIC_FORCE_TO_UNDERLYING
ããã¯ããã±ãŒã«ã匷å¶ããããã«ãLC_NUMERICããã±ãŒã«ãèªèãã XS ã³ãŒãã«ãã£ãŠäœ¿çšãããŸãã
ã«ããŽãª "LC_NUMERIC" ããperl ãçŸåšã®åºç€ãšãªããã±ãŒã«ãšèãããã®ã«ããŸãã
(Perl ã€ã³ã¿ããªã¿ã¯ãåºç€ãšãªããã±ãŒã«ãå®éã«äœã§ãããã«ã€ããŠééã£ãŠããå¯èœæ§ããããŸã)
äžéšã® C ãŸã㯠XS ã³ãŒãã C ã©ã€ãã©ãªé¢æ°ãåŒã³åºããå Žå ãã±ãŒã«ã®èšå®(3) ãã®èåŸã«ãã
æ»ã; ãã®ãã¯ããåŒã³åºãåã«ãsync_localeããåŒã³åºããšãPerl ã®ã¬ã³ãŒããæŽæ°ãããŸãã)
宣èšããã«ã¯ããDECLARATION_FOR_LC_NUMERIC_MANIPULATIONãã®åŒã³åºããè¡ãããŠããå¿ èŠããããŸãã
ã³ã³ãã€ã«æã«ãã®ãã¯ãã«ãã£ãŠäœ¿çšããããã©ã€ããŒãå€æ°ã ãã®ãã¯ãã¯æ¬¡ã®ããã«ããå¿ èŠããããŸã
åŒã§ã¯ãªãã空ã®åŒæ°ãªã¹ãã䜿çšããŠåäžã®ã¹ããŒãã¡ã³ããšããŠåŒã³åºãããŸãã
ãã®ãããªïŒ
{
DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
...
STORE_LC_NUMERIC_FORCE_TO_UNDERLYING();
...
RESTORE_LC_NUMERIC();
...
}
ãã©ã€ããŒãå€æ°ã¯çŸåšã®ãã±ãŒã«ç¶æ ãä¿åããããã«äœ¿çšãããŸãã
å¿ èŠã«å¿ããŠäžèŽãããRESTORE_LC_NUMERICããåŒã³åºããšåŸ©å ã§ããŸãã
void STORE_LC_NUMERIC_FORCE_TO_UNDERLYING()
STORE_LC_NUMERIC_SET_TO_NEEDED
ããã¯ããLC_NUMERICããã±ãŒã«ãèªèãã XS ãŸã㯠C ã³ãŒããã©ããããã®ã«åœ¹ç«ã¡ãŸãã
ãã®ãã±ãŒã« ã«ããŽãªã¯éåžžãPerl ã«ãã£ãŠéæ¹åã« C ãã±ãŒã«ã«èšå®ããããŸãŸã«ãªããŸãã
äºææ§ããããæµ®åå°æ°ç¹å€ãèªã¿åãã»ãšãã©ã® XS ã³ãŒãã察å¿ã§ããããã§ãã
XNUMX é²æ°ã®åºæ°æåããããã§ããå Žåã®ã¿ã
ãã®ãã¯ãã¯ãçŸåšã® "LC_NUMERIC" ç¶æ ãé©åã«èšå®ãããŠããããšã確èªããŸãã
Perl ããã°ã©ã ãã XS ãŸã㯠C ã³ãŒããžã®åŒã³åºãããã±ãŒã«å ããè¡ãããå Žåã¯ããã±ãŒã«ã®
ã䜿çšãã±ãŒã«ãã®ç¯å²ã ãŸãã¯ãåŒã³åºããå€éšããã®å Žåã¯ãã±ãŒã«ãç¡èŠããŸãã
ãã®ãããªç¯å²ã
ãã®ãã¯ãã¯ãC ãŸã㯠XS ã³ãŒãã®ã©ããã®éå§ç¹ã§ãã ã©ãããšã³ãã£ã³ã°ã¯æ¬¡ã®ããã«è¡ãããŸãã
æäœåŸã«ãRESTORE_LC_NUMERICããã¯ããåŒã³åºããŸãã ããã§ãªããã°å·
ä»ã® XS ã³ãŒãã«æªåœ±é¿ãäžããå€æŽãè¡ãããå¯èœæ§ããããŸãã
宣èšããã«ã¯ããDECLARATION_FOR_LC_NUMERIC_MANIPULATIONãã®åŒã³åºããè¡ãããŠããå¿ èŠããããŸãã
ã³ã³ãã€ã«æã«ãã®ãã¯ãã«ãã£ãŠäœ¿çšããããã©ã€ããŒãå€æ°ã ãã®ãã¯ãã¯æ¬¡ã®ããã«ããå¿ èŠããããŸã
åŒã§ã¯ãªãã空ã®åŒæ°ãªã¹ãã䜿çšããŠåäžã®ã¹ããŒãã¡ã³ããšããŠåŒã³åºãããŸãã
ãã®ãããªïŒ
{
DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
...
STORE_LC_NUMERIC_SET_TO_NEEDED();
...
RESTORE_LC_NUMERIC();
...
}
void STORE_LC_NUMERIC_SET_TO_NEEDED()
åæãã±ãŒã«
ããã°ã©ã ã®ãã±ãŒã«ã®å€æŽã¯ãXS ã³ãŒãã«ãã£ãŠåé¿ããå¿ èŠããããŸãã ããã§ãã確ããª
XS ããåŒã³åºããããGtkããªã©ã®é Perl ã©ã€ãã©ãªã¯ããããŸãã ãããèµ·ãããšãPerl
ãã±ãŒã«ãå€æŽãããããšãéç¥ããå¿ èŠããããŸãã ããããåã«ããã®é¢æ°ã䜿çšããŠãã ããã
ããŒã«ã«æ»ããŸãã
void sync_locale()
éæ³ã® æ©èœ
mg_clear
SV ãè¡šãéæ³ã®ãããªãã®ãã¯ãªã¢ããŸãã ãsv_magicããåç §ããŠãã ããã
int mg_clear(SV* sv)
mg_copy ãã SV ããå¥ã® SV ã«ããžãã¯ãã³ããŒããŸãã ãsv_magicããåç §ããŠãã ããã
int mg_copy(SV *sv, SV *nsv, const char *key,
I32ã¯ã¬ã³)
mg_find SV ã«äžèŽããåã®ããžã㯠ãã€ã³ã¿ãæ€çŽ¢ããŸãã ãsv_magicããåç §ããŠãã ããã
MAGIC* mg_find(const SV* sv, int å)
mg_findext
ãSVãã«æå®ããããvtblããæã€ãtypeãã®ããžã㯠ãã€ã³ã¿ãæ€çŽ¢ããŸãã èŠã
ãsv_magicextãã
MAGIC* mg_findext(const SV* sv, int å,
const MGVTBL *vtbl)
mg_free SV ã䜿çšããããžã㯠ã¹ãã¬ãŒãžã解æŸããŸãã ãsv_magicããåç §ããŠãã ããã
int mg_free(SV* sv)
mg_free_type
ã¿ã€ãã®éæ³ããã¹ãŠåé€ããŸã ã® SVãã svã ãsv_magicããåç §ããŠãã ããã
void mg_free_type(SV *sv, int how)
mg_get SV ããå€ãååŸããåã«ããžãã¯ãå®è¡ããŸãã SV ã®ã¿ã€ã㯠>= ã§ãªããã°ãªããŸãã
SVt_PVMGã ãsv_magicããåç §ããŠãã ããã
int mg_get(SV* sv)
mg_length
å»æ¢ãããŸãã! ãã®é¢æ°ã¯ Perl ã®å°æ¥ã®ãªãªãŒã¹ããåé€ãããäºå®ã§ãã
æ°ããã³ãŒãã«ã¯äœ¿çšããªãã§ãã ããã æ¢åã®ã³ãŒãããåé€ããŠãã ããã
SV ã®é·ãããã€ãåäœã§ã¬ããŒãããå¯èœãªå Žåã¯é·ãããžãã¯ãåŒã³åºããŸããã
SV ã« UTF8 ãã©ã°ãèšå®ããªãã§ãã ããã ååšããªãå Žåã¯ããgetãããžãã¯ã«æ»ããŸãã
ãlengthãããžãã¯ã§ããããgetãããžãã¯ãåŒã³åºãããã©ããã¯äžæã§ãã ãã
SV ã PVMG 以äžã§ããããšãåæãšããŠããŸãã äœ¿çš sv_len() ã代ããã«ã䜿ããã ããã
U32 mg_length(SV* sv)
mg_magical
SV ã®éæ³ã®ã¹ããŒã¿ã¹ããªã³ã«ããŸãã ãsv_magicããåç §ããŠãã ããã
void mg_magical(SV* sv)
mg_set å€ã SV ã«å²ãåœãŠãããåŸã«ããžãã¯ãå®è¡ããŸãã ãsv_magicããåç §ããŠãã ããã
int mg_set(SV* sv)
SVGETMAGIC
ãgetãããžãã¯ãããå ŽåãSV äžã§ãmg_getããåŒã³åºããŸãã ããšãã°ãããã¯æ¬¡ã®ããã«åŒã³åºããŸã
ã¿ã€ãå€æ°ã®ãFETCHãã ãã®ãã¯ãã¯åŒæ°ãè€æ°åè©äŸ¡ããŸãã
void SvGETMAGIC(SV* sv)
SvLOCK é©åãªã¢ãžã¥ãŒã«ã
ããŒããããŸããã
void SvLOCK(SV* sv)
SvSETMAGIC
SV ã«ãsetãããžãã¯ãããå ŽåãSV äžã§ãmg_setããåŒã³åºããŸãã ããã¯ãã®åŸã«å¿ èŠã§ã
$| ã®ãããªéæ³ã®å€æ°ã®å Žåã¯ãã¹ã«ã©ãŒãå€æŽããŸãã ãŸãã¯çµåå€æ°
(ãã¹ãã¢ããšåŒã³ãŸã)ã ãã®ãã¯ãã¯åŒæ°ãè€æ°åè©äŸ¡ããŸãã
void SvSETMAGIC(SV* sv)
SvSetMagicSV
ãSvSetSVããšäŒŒãŠããŸãããåŸã§å¿ èŠãªèšå®ããžãã¯ãå®è¡ããŸãã
void SvSetMagicSV(SV* dsv, SV* ssv)
SvSetMagicSV_nosteal
ãSvSetSV_nostealããšäŒŒãŠããŸãããåŸã§å¿ èŠãªã»ããéæ³ãå®è¡ããŸãã
void SvSetMagicSV_nosteal(SV* dsv, SV* ssv)
SvSetSV dsv ã ssv ãšåãã§ãªãå Žåããsv_setsvããåŒã³åºããŸãã 以äžã®åŒæ°ãè©äŸ¡ããå¯èœæ§ããããŸã
äžåºŠã å®å SV ã§ã¯ãsetãããžãã¯ãåŠçããŸããã
void SvSetSV(SV* dsv, SV* ssv)
SvSetSV_nosteal
dsv ã ssv ãšåãã§ãªãå Žåã¯ãéç Žå£ããŒãžã§ã³ã®ãsv_setsvããåŒã³åºããŸãã XNUMXæ
åŒæ°ãè€æ°åè©äŸ¡ããŸãã
void SvSetSV_nosteal(SV* dsv, SV* ssv)
SvSHARE é©åãªã¢ãžã¥ãŒã«ãããŒããããŠããå Žåãã¹ã¬ããé㧠sv ãå ±æãããããã«æé ããŸãã
void SvSHARE(SV* sv)
SvUNLOCK
é©åãªã¢ãžã¥ãŒã«ãããŒããããŠããå ŽåãSV ã®çžäºæä»ããã¯ã解é€ããŸãã
void SvUNLOCK(SV* sv)
ã¡ã¢ãª ãããžã¡ã³ã
XSUB ã©ã€ã¿ãŒã®ã€ã³ã¿ãŒãã§ã€ã¹ã C ã® "memcpy" é¢æ°ã«ã³ããŒããŸãã ãsrcãã¯ãœãŒã¹ã§ãã
ãdestãã¯å®å ããnitemsãã¯é ç®ã®æ°ããtypeãã¯é ç®ã§ãã
ã¿ã€ãã éè€ããã³ããŒã§ã¯å€±æããå¯èœæ§ããããŸãã ã移åããåç §ããŠãã ããã
void Copy(void* src, void* dest, int niitems, type)
CopyD ãCopyããšäŒŒãŠããŸãããdest ãè¿ããŸãã ã³ã³ãã€ã©ãŒã«æ«å°ŸåŒã³åºããä¿ãã®ã«åœ¹ç«ã¡ãŸã
æé©åã
void * CopyD(void* src, void* dest, int niitems, type)
XSUB ã©ã€ã¿ãŒã®ã€ã³ã¿ãŒãã§ã€ã¹ã C ã® "memmove" é¢æ°ã«ç§»åããŸãã ãsrcãã¯ãœãŒã¹ã§ãã
ãdestãã¯å®å ããnitemsãã¯é ç®ã®æ°ããtypeãã¯é ç®ã§ãã
ã¿ã€ãã ãªãŒããŒã©ããåäœãå¯èœã ãã³ããŒããåç §ããŠãã ããã
void Move(void* src, void* dest, int niitems, type)
MoveD ãMoveããšäŒŒãŠããŸãããdest ãè¿ããŸãã ã³ã³ãã€ã©ãŒã«æ«å°ŸåŒã³åºããä¿ãã®ã«åœ¹ç«ã¡ãŸã
æé©åã
void * MoveD(void* src, void* dest, int niitems, type)
Newx XSUB ã©ã€ã¿ãŒã® C ã®ãmallocãé¢æ°ãžã®ã€ã³ã¿ãŒãã§ã€ã¹ã
ããã«ãã£ãŠåŸãããã¡ã¢ãªã¯ã ãã£ãã® ãSafefreeãã§è§£æŸãããŸãã
5.9.3幎ã«ã¯ã æ°ãã() ãããŠåéã幎äžã®äººã«åã£ãŠä»£ãã æ°èŠïŒïŒ API ãåé€ããæåã® API ãåé€ããŸã
ãã©ã¡ãŒã¿ã xãåŒã³åºãå ãèªåèªèº«ãèå¥ã§ããããã«ãããããã°è£å©ã ãã®æŽå©ã¯
æ°ãããã«ã ãªãã·ã§ã³ PERL_MEM_LOG ã«çœ®ãæããããŸãã (ãPERL_MEM_LOGããåç §)
perlhacktips)ã å€ã API ã¯ãXS ã¢ãžã¥ãŒã«ã§äœ¿çšããããã«ãŸã ååšããŠããŸãã
å€ãããŒã«ã
void Newx(void* ptr, int niitems, type)
Newxc ãã£ã¹ãã䜿çšãããC ã® "malloc" é¢æ°ãžã® XSUB ã©ã€ã¿ãŒã®ã€ã³ã¿ãŒãã§ã€ã¹ã ãã¡ããåç §
ããã¥ãŒã¯ã¹ãã
ããã«ãã£ãŠåŸãããã¡ã¢ãªã¯ã ãã£ãã® ãSafefreeãã§è§£æŸãããŸãã
void Newxc(void* ptr, int niitems, type, Cast)
Newxz C ã® "malloc" é¢æ°ãžã® XSUB ã©ã€ã¿ãŒã®ã€ã³ã¿ãŒãã§ã€ã¹ã å²ãåœãŠãããã¡ã¢ãªã¯ã
ãmemzeroãã§ãŒãåãããŸãã ããã¥ãŒã¯ã¹ããåç §ã
ããã«ãã£ãŠåŸãããã¡ã¢ãªã¯ã ãã£ãã® ãSafefreeãã§è§£æŸãããŸãã
void Newxz(void* ptr, int niitems, type)
æ¯ ãã€ãºã³ãŠã£ãº(0xEF) 解æŸãããã¡ã¢ãªãžã®ã¢ã¯ã»ã¹ããã£ããããŸãã
void Poison(void* dest, int niitems, type)
ãã€ãºã³ããªãŒ
ãã€ãºã³ãŠã£ãº(0xEF) 解æŸãããã¡ã¢ãªãžã®ã¢ã¯ã»ã¹ããã£ããããŸãã
void PoisonFree(void* dest, int niitems, type)
æ¯æ°ãã
ãã€ãºã³ãŠã£ãº(0xAB) å²ãåœãŠãããŠãããåæåãããŠããªãã¡ã¢ãªãžã®ã¢ã¯ã»ã¹ããã£ããããŸãã
void PoisonNew(void* dest, int niitems, type)
ãã€ãºã³ãŠã£ãº
ã¡ã¢ãªããã€ã ãã¿ãŒã³ (äœåºŠãç¹°ãè¿ããããã€ã) ã§åããŸãã
ããŸãããã°ãåæåãããŠããªãã¡ã¢ãªãžã®ã¢ã¯ã»ã¹ã®è©Šã¿ããã£ããã§ããŸãã
void PoisonWith(void* dest, int niitems, type,
U8ãã€ãïŒ
XSUB ã©ã€ã¿ãŒã® C ã® "realloc" é¢æ°ãžã®ã€ã³ã¿ãŒãã§ã€ã¹ãæŽæ°ããŸãã
ããã«ãã£ãŠåŸãããã¡ã¢ãªã¯ã ãã£ãã® ãSafefreeãã§è§£æŸãããŸãã
void Renew(void* ptr, int niitems, type)
Renewc ãã£ã¹ãã䜿çšãããC ã® "realloc" é¢æ°ãžã® XSUB ã©ã€ã¿ãŒã®ã€ã³ã¿ãŒãã§ã€ã¹ã
ããã«ãã£ãŠåŸãããã¡ã¢ãªã¯ã ãã£ãã® ãSafefreeãã§è§£æŸãããŸãã
void Renewc(void* ptr, int niitems, type, Cast)
ã»ãŒãããªãŒ
XSUB ã©ã€ã¿ãŒã® C ã®ãããªãŒãé¢æ°ãžã®ã€ã³ã¿ãŒãã§ã€ã¹ã
ããã¯ãã¹ã ãã£ãã® ããã¥ãŒã¯ã¹ããšä»²éãã¡ã䜿ã£ãŠåŸãæãåºã䜿çšã§ããŸãã
void Safefree(void* ptr)
savepv ãstrdup()ãã® Perl ããŒãžã§ã³ã æ°ããå²ãåœãŠãããæååãžã®ãã€ã³ã¿ãè¿ããŸãã
ãpvãã®è€è£œã§ãã æååã®ãµã€ãºã¯ãstrlen()ãã«ãã£ãŠæ±ºãŸããŸãã
åã蟌ã¿ãNULãæåãå«ããããšã¯ã§ãããæ«å°Ÿã«ãNULããå¿ èŠã§ããããšãæå³ããŸãã
æ°ããæååã«å²ãåœãŠãããã¡ã¢ãªã¯ããSafefree()ãã§è§£æŸã§ããŸãã
æ©èœã
Windows ãªã©ã®äžéšã®ãã©ãããã©ãŒã ã§ã¯ãã¹ã¬ãããææãããã¹ãŠã®å²ãåœãŠã¡ã¢ãªã
ãã®ã¹ã¬ãããçµäºãããšå²ãåœãŠã解é€ãããŸãã ãããã£ãŠããããèµ·ãããªãããã«ããå¿ èŠãããå Žåã¯ã次ã®ããã«ããå¿ èŠããããŸã
ãsavesharedpvããªã©ã®å ±æã¡ã¢ãªé¢æ°ã䜿çšããŸãã
char* savepv(const char* pv)
savepvn ãstrndup()ããååšããå Žåã® Perl ã®ããŒãžã§ã³ã ãžã®ãã€ã³ã¿ãè¿ããŸãã
ãpvãã®æåã®ãlenããã€ãã®è€è£œã§ãããæ°ããå²ãåœãŠãããæååã
æ«å°Ÿã«ãNULããã€ããè¿œå ãããŸãã æ°ããæååã«å²ãåœãŠãããã¡ã¢ãªã解æŸã§ããŸãã
ãSafefree()ãé¢æ°ã䜿çšããŸãã
Windows ãªã©ã®äžéšã®ãã©ãããã©ãŒã ã§ã¯ãã¹ã¬ãããææãããã¹ãŠã®å²ãåœãŠã¡ã¢ãªã
ãã®ã¹ã¬ãããçµäºãããšå²ãåœãŠã解é€ãããŸãã ãããã£ãŠããããèµ·ãããªãããã«ããå¿ èŠãããå Žåã¯ã次ã®ããã«ããå¿ èŠããããŸã
ãsavesharedpvnããªã©ã®å ±æã¡ã¢ãªé¢æ°ã䜿çšããŸãã
char* savepvn(const char* pv, I32 len)
savepvs ãsavepvnããšäŒŒãŠããŸãããæååã®ä»£ããã«ãªãã©ã«ã®ãNULãã§çµããæååãåãåããŸãã
æåå/é·ãã®ãã¢ã
char* savepvs(const char* s)
ä¿åå ±æpv
éè€ããæååãã¡ã¢ãªã«å²ãåœãŠããsavepv()ãã®ããŒãžã§ã³ã
ã¹ã¬ããéã§å ±æãããŸãã
char* savesharedpv(const char* pv)
ä¿åå ±æpvn
éè€ããæååãã¡ã¢ãªã«å²ãåœãŠããsavepvn()ãã®ããŒãžã§ã³ã
ã¹ã¬ããéã§å ±æãããŸãã (å ·äœçãªéãã¯ãNULL ãã€ã³ã¿ãŒã¯ããã§ã¯ãªããšããããšã§ãã
蚱容ã§ããïŒ
char* savesharedpvn(const char *const pv,
const STRLEN len)
ä¿åå ±æ pvs
éè€ããæååãã¡ã¢ãªã«å²ãåœãŠããsavepvs()ãã®ããŒãžã§ã³ã
ã¹ã¬ããéã§å ±æãããŸãã
char* savesharedpvs(const char* s)
savesharedsvpv
éè€ããæååãã¡ã¢ãªã«å²ãåœãŠããsavesharedpv()ãã®ããŒãžã§ã³ã
ã¹ã¬ããéã§å ±æãããŸãã
char* savesharedsvpv(SV *sv)
vpv ãä¿å
ãsavepv()ã/ãsavepvn()ãã®ããŒãžã§ã³ãè€è£œããæååã
ãSvPV()ãã䜿çšããŠSVã§æž¡ãããŸã
Windows ãªã©ã®äžéšã®ãã©ãããã©ãŒã ã§ã¯ãã¹ã¬ãããææãããã¹ãŠã®å²ãåœãŠã¡ã¢ãªã
ãã®ã¹ã¬ãããçµäºãããšå²ãåœãŠã解é€ãããŸãã ãããã£ãŠããããèµ·ãããªãããã«ããå¿ èŠãããå Žåã¯ã次ã®ããã«ããå¿ èŠããããŸã
ãsavesharedsvpvããªã©ã®å ±æã¡ã¢ãªé¢æ°ã䜿çšããŸãã
char* savesvpv(SV* sv)
æ§é ã³ããŒ
ããã¯ãããæ§é ãå¥ã®æ§é ã«ã³ããŒãããã¢ãŒããã¯ãã£ã«äŸåããªããã¯ãã§ãã
void StructCopy(type *src, type *dest, type)
Zero XSUB ã©ã€ã¿ãŒã® C ã®ãmemzeroãé¢æ°ãžã®ã€ã³ã¿ãŒãã§ã€ã¹ã ãç®çå°ããšã¯ã
ãnitemsãã¯ã¢ã€ãã ã®æ°ããtypeãã¯ã¿ã€ãã§ãã
void Zero(void* dest, int niitems, type)
ZeroD ãZeroããšäŒŒãŠããŸãããdest ãè¿ããŸãã ã³ã³ãã€ã©ãŒã«æ«å°ŸåŒã³åºããä¿ãã®ã«åœ¹ç«ã¡ãŸã
æé©åã
void * ZeroD(void* dest, int niitems, type)
ãã®ä» æ©èœ
dump_c_backtrace
C ããã¯ãã¬ãŒã¹ãæå®ããã fp ã«ãã³ãããŸãã
ããã¯ãã¬ãŒã¹ãååŸã§ããå Žå㯠trueãååŸã§ããªãã£ãå Žå㯠false ãè¿ããŸãã
bool dump_c_backtrace(PerlIO* fp, int max_ Depth,
intã¹ããã)
fbm_compile
æååãåæããŠãé«éæ€çŽ¢ãå®è¡ããŸãã fbm_instr() -- ã¯
ãã€ã€ãŒã»ã ãŒã¢ã¢ã«ãŽãªãºã ã
void fbm_compile(SV* svãU32 ãã©ã°)
fbm_instr
ãbigããšãbigendãã§åºåãããæååå ã® SV ã®äœçœ®ãè¿ããŸãã ãã
æååãèŠã€ãããªãå Žåã¯ãNULLããè¿ããŸãã ãsvãã¯å¿ é ã§ã¯ãããŸãã
fbm_compiled ã§ãããæ€çŽ¢ã¯ããã»ã©é«éã§ã¯ãããŸããã
char* fbm_instr(unsigned char* big,
unsigned char* bigendãSV* littlestrã
U32 ãã©ã°)
foldEQ æåå s1 ãš s2 ã®å é ã® len ãã€ããåãå Žåã« true ãè¿ããŸãã
ç¡ç¥çµã«ã ãã以å€ã®å Žå㯠falseã 倧æåãšå°æåã® ASCII ç¯å²ãã€ããäžèŽãã
èªåèªèº«ãšãã®å察ã®ã±ãŒã¹ã®å¯Ÿå¿è ã 倧æåãšå°æåãåºå¥ããªãé ASCII ç¯å²
ãã€ãã¯ããèªäœã®ã¿ã«äžèŽããŸãã
I32foldEQ(const char* a, const char* b, I32 len)
ãã©ãŒã«ãEQ_ãã±ãŒã«
æåå s1 ãš s2 ã®å é ã® len ãã€ããåãå Žåã« true ãè¿ããŸãã
çŸåšã®ãã±ãŒã«ã§ç¡ç¥çµã«ã ãã以å€ã®å Žå㯠falseã
I32foldEQ_locale(const char* a, const char* b,
I32ã¬ã³)
form sprintf ã¹ã¿ã€ã«ã®ãã©ãŒããã ãã¿ãŒã³ãšåŸæ¥ã® (é SV) åŒæ°ãåãåããŸãã
ãã©ãŒããããããæååãè¿ããŸãã
(char *) Perl_form(pTHX_ const char* pat, ...)
æåå (char *) ãå¿ èŠãªå Žæãªãã©ãã§ã䜿çšã§ããŸãã
char * s = Perl_form("%d.%d",ã¡ãžã£ãŒ,ãã€ããŒ);
åäžã®ãã©ã€ããŒã ãããã¡ã䜿çšãããããè€æ°ã®æååããã©ãŒãããããå Žåã¯ã
以åã®æååãæ瀺çã«ã³ããŒããŠåé€ããŸã (å®äºãããã³ããŒã解æŸããŸã)ã
char* 圢åŒ(const char* pat, ...)
getcwd_sv
SV ã«çŸåšã®äœæ¥ãã£ã¬ã¯ããªãå ¥åããŸã
int getcwd_sv(SV* sv)
get_c_backtrace_dump
| Depth| ã®ãã³ããšã㊠SV ãè¿ããŸãã åŒã³åºãã¹ã¿ãã¯ã®ãã¬ãŒã ãã¹ããããã|skip|
äžçªå¥¥ã®ãã®ã éåžžã¯æ·±ã 20 ã§ååã§ãã
è¿œå ãããåºåã¯æ¬¡ã®ããã«ãªããŸãã
... 1 10e004812:0082 Perl_croak util.c:1716 / usr / bin / perl 2
10df8d6d2:1d72 perl_parse perl.c:3975 / usr / bin / perl ...
ãã£ãŒã«ãã¯ã¿ãã§åºåãããŠããŸãã æåã®åã¯æ·±ãã§ã (ãŒãã¯æ·±ãã§ã)
æãå åŽã®ã¹ããããããŠããªããã¬ãŒã ïŒã hex:offset ã® XNUMX é²æ°ã¯ãããã°ã©ã ãé 眮ãããå Žæã§ãã
ã«ãŠã³ã¿ãŒã¯ S_parse_body ã«ããã:offset (æ¬ èœããŠããå¯èœæ§ããããŸã) ããã®éã瀺ããŸãã
S_parse_body å ã«ããã°ã©ã ã«ãŠã³ã¿ãŒããããŸããã
util.c:1716 ã¯ãœãŒã¹ ã³ãŒã ãã¡ã€ã«ãšè¡çªå·ã§ãã
ãã® / usr / bin / perl ããã¯æããã§ãïŒã§ããã°ïŒã
äžæãªãã®ã¯ã-ãã§ãã æ®å¿µãªãããæªç¥ã®äºæ ã¯éåžžã«ç°¡åã«çºçããå¯èœæ§ããããŸãã
æ å ±ã®ååŸã¯ãµããŒããããŠããŸããã ãã€ããªã«ãããã°ããªãå Žå
æ å ±; ãªããã£ãã€ã¶ãã€ã³ã©ã€ã³åãªã©ã«ãã£ãŠã³ãŒããå€æããå Žåã
SV* get_c_backtrace_dump(int max_ Depth, int Skip)
ibcmp ãã㯠(! ãã©ãŒã«ãEQ())
I32 ibcmp(const char* a, const char* b, I32 len)
ibcmp_locale
ãã㯠(! foldEQ_locale())
I32 ibcmp_locale(const char* a, const char* b,
I32ã¬ã³)
is_safe_syscall
æå®ããããpvãã«å éšã®ãNULãæåãå«ãŸããŠããªãããšããã¹ãããŸãã ããã§ããã°
å®è¡ãããšããerrnoãã ENOENT ã«èšå®ãããªãã·ã§ã³ã§èŠåããFALSE ãè¿ããŸãã
ååãå®å šãªå Žå㯠TRUE ãè¿ããŸãã
ã«ãã£ãŠäœ¿çšãããŸã IS_SAFE_SYSCALL() ãã¯ãã
bool is_safe_syscall(const char *pv, STRLEN len,
const char *äœã
const char *op_name)
memEQ XNUMX ã€ã®ãããã¡ (ãNULãæåãåã蟌ãŸããŠããå¯èœæ§ããã) ããã¹ãããŠããããã
çããã ãlenããã©ã¡ãŒã¿ã¯ãæ¯èŒãããã€ãæ°ã瀺ããŸãã æ»ãå€
çããå Žåã¯ãŒããçãããªãå Žåã¯éãŒãã
bool memEQ(char* s1, char* s2, STRLEN len)
memNE XNUMX ã€ã®ãããã¡ (ãNULãæåãåã蟌ãŸããŠããå¯èœæ§ããã) ããã¹ãããŠããããã
çãããããŸããã ãlenããã©ã¡ãŒã¿ã¯ãæ¯èŒãããã€ãæ°ã瀺ããŸãã æ»ãå€
çãããªãå Žåã¯ãŒããçããå Žåã¯éãŒãã
bool memNE(char* s1, char* s2, STRLEN len)
sprintf ã¹ã¿ã€ã«ã®ãã©ãŒããã ãã¿ãŒã³ãšåŒæ°ãªã¹ããååŸããŸãã ãããã¯çæããããã«äœ¿çšãããŸã
æååã¡ãã»ãŒãžã ã¡ãã»ãŒãžãæ¹è¡ã§çµãã£ãŠããªãå Žåã¯ã次ã®ããã«ãªããŸãã
説æãããŠããããã«ãã³ãŒãå ã®çŸåšã®äœçœ®ã瀺ããã®ãè¿œå ããŠæ¡åŒµãããŠããŸãã
ãmess_svãã®å Žåã
éåžžãçµæã®ã¡ãã»ãŒãžã¯æ°ããæçµç㪠SV ã§è¿ãããŸãã ã°ããŒãã«æéäž
åäžã® SV ãç Žæ£ãããšããã®é¢æ°ã®äœ¿çšéã§å ±æãããå ŽåããããŸãã
SV * æ··ä¹±(const char *pat, ...)
mess_sv ãŠãŒã¶ãŒåãã®ã¡ãã»ãŒãžãå±éããŠãçŸåšã®ã¡ãã»ãŒãžãå«ããŸãã
ã¡ãã»ãŒãžããŸã å®äºããŠããªãããã«èŠããå Žåã¯ãã³ãŒãå ã®å Žæã確èªããŠãã ããã
ãbasemsgãã¯æåã®ã¡ãã»ãŒãžãŸãã¯ãªããžã§ã¯ãã§ãã åèã«ãªãã°äœ¿ãããŠããã ããŸã
çŸç¶ã®ãŸãŸã§ããããã®é¢æ°ã®çµæã«ãªããŸãã ãã以å€ã®å Žåã¯æååãšããŠäœ¿çšãããŸãã
ãã§ã«æ¹è¡ã§çµãã£ãŠããå Žåã¯ãå®å šãªãã®ãšã¿ãªãããçµæã¯
ãã®é¢æ°ã® ã¯åãæååã«ãªããŸãã ã¡ãã»ãŒãžã次ã®æåã§çµãã£ãŠããªãå Žåã¯ã
æ¹è¡ã®å Žåããat foo.pl line 37ãã®ãããªã»ã°ã¡ã³ããè¿œå ãããå Žåã«ãã£ãŠã¯
ä»ã®å¥ã¯çŸåšã®å®è¡ç¶æ ã瀺ããŸãã çµæã®ã¡ãã»ãŒãž
ããããšæ¹è¡ã§çµãããŸãã
éåžžãçµæã®ã¡ãã»ãŒãžã¯æ°ããæçµç㪠SV ã§è¿ãããŸãã ã°ããŒãã«æéäž
åäžã® SV ãç Žæ£ãããšããã®é¢æ°ã®äœ¿çšéã§å ±æãããå ŽåããããŸãã ãæ¶è²»ãããå Žå
true ã®å Žåãé¢æ°ã¯å€æŽããŠè¿ãããšãèš±å¯ãããŸã (å¿ é ã§ã¯ãããŸãã)ã
æ°ãã SV ãå²ãåœãŠã代ããã«ãbasemsgãã䜿çšããŸãã
SV * mess_sv(SV *basemsgãããŒã«æ¶è²»)
my_snprintf
C ã©ã€ãã©ãªã®ãsnprintfãæ©èœïŒå©çšå¯èœã§æšæºã«æºæ ããŠããå ŽåïŒïŒäœ¿çš
å®éã«ã¯ãvsnprintfãã§ãïŒã ãã ãããvsnprintfããå©çšã§ããªãå Žåã¯ã
æ®å¿µãªãããå®å šã§ã¯ãªããvsprintfãã䜿çšãããšããããã¡ããªãŒããŒã©ã³ããå¯èœæ§ããããŸãïŒ
ãªãŒããŒã©ã³ ãã§ãã¯ãå®è¡ããŸãããæé ãã«ãªãå¯èœæ§ããããŸã)ã 代ããã«ãsv_vcatpvfãã®äœ¿çšãæ€èšããŠãã ããããŸãã¯
ãvsnprintfããååŸããŸãã
int my_snprintf(char *buffer, const Size_t len,
const char *圢åŒ, ...)
my_sprintf
C ã©ã€ãã©ãªãsprintfãã¯ãå¿ èŠã«å¿ããŠã©ããããã確å®ã«
ãããã¡ã«æžã蟌ãŸããæååã®é·ãã ãŸã㪠ANSI 以åã®ã·ã¹ãã ã®ã¿ãå¿ èŠãšãªããŸãã
ã©ãããŒé¢æ° - éåžžãããã¯ãsprintfããžã®çŽæ¥åŒã³åºãã§ãã
int my_sprintf(char *buffer, const char *pat, ...)
my_strlcat
C ã©ã€ãã©ãªãstrlcatãïŒå©çšå¯èœãªå ŽåïŒããŸãã¯ãã® Perl å®è£ ã ãã
C ã®ãNULãã§çµããæååãæäœããŸãã
ãmy_strlcat()ãã¯ãæååãsrcãããdstãã®æ«å°Ÿã«è¿œå ããŸãã å€ããŠãè¿œå ãããŸã
ããµã€ãº - strlen(dst) - 1ãæåã ãsizeãã§ãªãéãããNULãã§çµäºããŸãã
0ã§ããããå ã®ãdstãæååããsizeãããé·ãã£ãïŒå®éã«ã¯ããã¯
ããã¯ãããµã€ãºããééã£ãŠãããããdstããæ£ãããªãããšãæå³ãããããèµ·ãããŸããã
é©åãªãNULãã§çµããæååïŒã
ããµã€ãºãã¯å®å ãããã¡ã®ãã«ãµã€ãºã§ãããçµæã¯æ¬¡ã®ããã«ãªããŸãã
äœè£ãããå Žåã¯ããNULãã§çµäºããããšãä¿èšŒãããŸãã ãNULãã®äœå°ãããããšã«æ³šæããŠãã ãã
ããµã€ãºãã«å«ããå¿ èŠããããŸãã
Size_t my_strlcat(char *dst, const char *src,
ãµã€ãº_tãµã€ãº)
my_strlcpy
C ã©ã€ãã©ãªãstrlcpyãïŒå©çšå¯èœãªå ŽåïŒããŸãã¯ãã® Perl å®è£ ã ãã
C ã®ãNULãã§çµããæååãæäœããŸãã
ãmy_strlcpy()ãã¯ãæååãsrcãããæ倧ãsize - 1ãæåããdstãã«ã³ããŒããŸãã
ãNULã - ããµã€ãºãã 0 ã§ãªãå ŽåãçµæãçµäºããŸãã
Size_t my_strlcpy(char *dst, const char *src,
ãµã€ãº_tãµã€ãº)
my_vsnprintf
C ã©ã€ãã©ãªãvsnprintfãïŒå©çšå¯èœã§æšæºã«æºæ ããŠããå ŽåïŒã ãã ããããä»®ã«
ãvsnprintfãã¯å©çšã§ããŸãããæ®å¿µãªããå®å šã§ã¯ãªããvsprintfãã䜿çšãããŸãã
ãããã¡ããªãŒããŒã©ã³ããå¯èœæ§ããããŸãïŒãªãŒããŒã©ã³ãã§ãã¯ã¯ãããŸãããããã¯ãããããå¯èœæ§ããããŸãïŒ
é ãïŒã 代ããã«ãsv_vcatpvfãã䜿çšãããããvsnprintfããååŸããããšãæ€èšããŠãã ããã
int my_vsnprintf(char *buffer, const Size_t len,
const char *formatãva_list ap)
PERL_SYS_INIT
å®è¡ã«å¿ èŠãª C ã©ã³ã¿ã€ã ç°å¢ã®ã·ã¹ãã åºæã®èª¿æŽãæäŸããŸãã
Perl ã€ã³ã¿ããªã¿ã ããã¯ãPerl ãäœæããåã« XNUMX åã ãåŒã³åºãå¿ èŠããããŸãã
éèš³ã
void PERL_SYS_INIT(int *argc, char*** argv)
PERL_SYS_INIT3
å®è¡ã«å¿ èŠãª C ã©ã³ã¿ã€ã ç°å¢ã®ã·ã¹ãã åºæã®èª¿æŽãæäŸããŸãã
Perl ã€ã³ã¿ããªã¿ã ããã¯ãPerl ãäœæããåã« XNUMX åã ãåŒã³åºãå¿ èŠããããŸãã
éèš³ã
void PERL_SYS_INIT3(int *argc, char*** argv,
char*** ç°å¢)
PERL_SYS_TERM
Perl ã®å®è¡åŸã« C ã©ã³ã¿ã€ã ç°å¢ã®ã·ã¹ãã åºæã®ã¯ãªãŒã³ã¢ãããæäŸããŸãã
éèš³è ã ããã¯ãæ®ãã® Perl ã解æŸããåŸã« XNUMX åã ãåŒã³åºãå¿ èŠããããŸãã
éèš³ã
void PERL_SYS_TERM()
quadmath_format_needed
quadmath_format_needed() ãã©ãŒãããæååã«æ¬¡ã®ãã®ãå«ãŸããå Žå㯠true ãè¿ããŸãã
Q æ¥é èŸã®ãªã %[efgaEFGA] 圢åŒæå®åãå°ãªããšã XNUMX ã€æå®ãããããã以å€ã®å Žå㯠false ãè¿ããŸãã
ãã©ãŒãããæå®åã®æ€åºã¯å®å šãª printf æ§ææ€åºã§ã¯ãããŸãããã
æãäžè¬çãªã±ãŒã¹ããã£ããã§ããã¯ãã§ãã
true ãè¿ãããå Žåããããã®åŒæ°ã¯ ãã¹ã çè«çã«ã¯æ¬¡ã®ããã«åŠçãããŸã
quadmath_snprintf()ãã ãããã®ãããªæžåŒæå®åãè€æ°ããå Žåã«åã㊠(ã
"quadmath_format_single")ããããè¶ ãããã®ãããã° (ããã«
ã»ãã® XNUMX ãã€ãïŒã åŠçããããã quadmath_snprintf() éåžžã«ãã
å³å¯ã§ãXNUMX ã€ã®åœ¢åŒä»æ§ã®ã¿ãåãå ¥ããä»ã¯äœãåãå ¥ããŸããã ãã®å Žåãã³ãŒãã¯
ãããã倱æããã¯ãã§ãã
boolquadmath_format_needed(const char* 圢åŒ)
quadmath_format_single
quadmath_snprintf() ãã©ãŒãããæååãéåžžã«å³å¯ã§ããããã倱æããŸãã
圢åŒãç¡å¹ãªå Žå㯠-1 ãè¿ããŸãã XNUMX ã€ã®åœ¢åŒä»æ§ã®ã¿ãåãå ¥ããŸãã
quadmath_format_single() æå³ããåäžã®ä»æ§ãæ£åžžã§ãããã©ããããã§ãã¯ããŸãã
"%" ãããã"%" ã XNUMX ã€ã ãããã"[efgaEFGA]" ã§çµããããã®åã« "Q" ããããŸãã ãã
ããã¯å®å šãªãprintf æ§æãã§ãã¯ãã§ã¯ãªããåãªãåºæ¬ã§ãã
圢åŒãæå¹ãªå Žåã¯ãã®åœ¢åŒãè¿ããããã§ãªãå Žå㯠NULL ãè¿ããŸãã
quadmath_format_single() äžè¶³ããŠãããQãããããããããšãã§ããå®éã«ããããé©çšããŸãã
å¿ èŠã ãã®å Žåããã©ãŒãããã®å€æŽãããã³ããŒãè¿ãããŸãã which ã
çºä¿¡è æå¿ å¿ èŠ ããž ç¡æã
ãquadmath_format_neededããåç §ããŠãã ããã
const char*quadmath_format_single(const char* ãã©ãŒããã)
READ_XDIGIT
ASCII ç¯å²ã® XNUMX é²æ°ã®å€ãè¿ããæååãã€ã³ã¿ãé²ããŸãã
åäœã¯ãisXDIGIT(*str) ã true ã®å Žåã«ã®ã¿æ確ã«å®çŸ©ãããŸãã
U8 READ_XDIGIT(char str*)
strEQ XNUMX ã€ã®æååãçãããã©ããããã¹ãããŸãã true ãŸã㯠false ãè¿ããŸãã
bool strEQ(char* s1, char* s2)
strGE 1 ã€ã®æååããã¹ãããŠãæåã®æååãsXNUMXãã次ã®æåå以äžã§ãããã©ããã確èªããŸãã
2çªç®ã¯ãsXNUMXãã§ãã true ãŸã㯠false ãè¿ããŸãã
bool strGE(char* s1, char* s2)
strGT 1 ã€ã®æååããã¹ãããŠãæåã®æååãs2ãã XNUMX çªç®ã®æååãsXNUMXããã倧ãããã©ããã確èªããŸãã
true ãŸã㯠false ãè¿ããŸãã
bool strGT(char* s1, char* s2)
strLE 1 ã€ã®æååããã¹ãããŠãæåã®æåå "sXNUMX" ã XNUMX çªç®ã®æåå以äžã§ãããã©ããã確èªããŸãã
ãs2ãã true ãŸã㯠false ãè¿ããŸãã
bool strLE(char* s1, char* s2)
strLT 1 ã€ã®æååããã¹ãããŠãæåã®æååãs2ãã XNUMX çªç®ã®æååãsXNUMXãããå°ãããã©ããã確èªããŸãã
true ãŸã㯠false ãè¿ããŸãã
bool strLT(char* s1, char* s2)
strNE XNUMX ã€ã®æååããã¹ãããŠãããããç°ãªããã©ããã確èªããŸãã true ãŸã㯠false ãè¿ããŸãã
bool strNE(char* s1, char* s2)
strnEQ XNUMX ã€ã®æååãçãããã©ããããã¹ãããŸãã ãlenããã©ã¡ãŒã¿ã¯ã
æ¯èŒãããã€ãæ°ã true ãŸã㯠false ãè¿ããŸãã (ãstrncmpãã®ã©ãããŒ)ã
bool strnEQ(char* s1, char* s2, STRLEN len)
strnNE XNUMX ã€ã®æååããã¹ãããŠãããããç°ãªããã©ããã確èªããŸãã ãlenããã©ã¡ãŒã¿ã¯ã
æ¯èŒãããã€ãæ°ã true ãŸã㯠false ãè¿ããŸãã (ãstrncmpãã®ã©ãããŒ)ã
bool strnNE(char* s1, char* s2, STRLEN len)
sv_destroyable
å ±æããªãå Žåã«ãªããžã§ã¯ããç Žæ£ãããå¯èœæ§ãããããšãå ±åãããã㌠ã«ãŒãã³
ã¢ãžã¥ãŒã«ãååšããŸãã åäžã® SV åŒæ°ãç¡èŠãããtrueããè¿ããŸãã ãŸã§ååšãã
NULL é¢æ°ãã€ã³ã¿ãŒã®ãã¹ãã¯é¿ããŠãã ããããŸãã以äžã®å Žåã«èŠåãçºçããå¯èœæ§ãããããã§ãã
ããçšåºŠã®å³ããã
bool sv_destroyable(SV *sv)
sv_nosharing
å ±æã¢ãžã¥ãŒã«ãååšããªãå Žåã« SV ããå ±æããããã㌠ã«ãŒãã³ã ãŸãã¯
ããããããã¯ãããŸãã ãŸãã¯ãããã¯ã解é€ãããŸãã ã€ãŸããåäžã® SV åŒæ°ãç¡èŠããŸãã
NULL é¢æ°ãã€ã³ã¿ãŒã®ãã¹ããåé¿ããããã«ååšããŸãããŸããæœåšçã«ãã¹ããè¡ââãããå¯èœæ§ãããããã
ããçšåºŠã®å³å¯ãã®äžã§èŠåããŸãã
void sv_nosharing(SV *sv)
vmess ã®ãpatããšãargsã㯠sprintf ã¹ã¿ã€ã«ã®ãã©ãŒããã ãã¿ãŒã³ã§ãããã«ãã»ã«åãããåŒæ°ã§ã
ãªã¹ãã ãããã¯æååã¡ãã»ãŒãžãçæããããã«äœ¿çšãããŸãã ã¡ãã»ãŒãžãçµãããªãå Žå
æ¹è¡ã䜿çšãããšãçŸåšã®å 容ã瀺ããã®ã§æ¡åŒµãããŸãã
ãmess_svãã§èª¬æãããŠããããã«ãã³ãŒãå ã®å Žæã
éåžžãçµæã®ã¡ãã»ãŒãžã¯æ°ããæçµç㪠SV ã§è¿ãããŸãã ã°ããŒãã«æéäž
åäžã® SV ãç Žæ£ãããšããã®é¢æ°ã®äœ¿çšéã§å ±æãããå ŽåããããŸãã
SV * vmess(const char *pat, va_ââlist *args)
MRO æ©èœ
ãããã®é¢æ°ã¯ãPerl ã¯ã©ã¹ã®ã¡ãœãã解決é åºã«é¢é£ããŠããŸãã
mro_get_linear_isa
æå®ãããã¹ã¿ãã·ã¥ã® mro ç·åœ¢åãè¿ããŸãã ããã©ã«ãã§ã¯ãããã¯æ¬¡ã®ããã«ãªããŸã
ä»ã® MRO ãæå¹ã§ãªãéãããmro_get_linear_isa_dfsããè¿ããã®
é ãå Žæã æ»ãå€ã¯èªã¿åãå°çšã® AV* ã§ãã
ä¿åããå Žåã¯ãæ»ãå€ã®ãSvREFCNT_inc()ããæ åœããå¿ èŠããããŸãã
åæ°žä¹ çã«ã©ãã«ã§ãä¿åã§ããŸãïŒããããªããšããŠãŒã¶ãŒã®äžããåé€ãããå¯èœæ§ããããŸãïŒ
次åãã£ãã·ã¥ãç¡å¹ã«ãªããšã)ã
AV* mro_get_linear_isa(HV* ã¹ã¿ãã·ã¥)
mro_method_changed_in
æå®ãããã¹ã¿ãã·ã¥ã®åã¯ã©ã¹ã®ã¡ãœãã ãã£ãã·ã¥ãç¡å¹ã«ããŸãã
ãã®å€åã«æ°ã¥ããããããŸããã
çæ³çã«ã¯ãPerl ãœãŒã¹å ã®ãPL_sub_generation++ãã®ãã¹ãŠã®ã€ã³ã¹ã¿ã³ã¹ãã ãã¹ã¿ãŒã·ãŒ
㯠this ã®åŒã³åºãã«çœ®ãæããå¿ èŠããããŸãã
Perl ã¯ãã¡ãœãããåå®çŸ©ããäžè¬çãªæ¹æ³ã®ã»ãšãã©ãèªåçã«åŠçããŸãã
ãã ããã¹ã¿ãã·ã¥å ã®ã¡ãœãããå€æŽããæ¹æ³ãããã€ããããŸãã
ãã£ãã·ã¥ ã³ãŒããèªèãããããããã®å Žåã¯åŸã§ãã®ã¡ãœãããåŒã³åºãå¿ èŠããããŸãã
1) XS ã³ãŒãããã¹ã¿ãã·ã¥ HV ãšã³ããªãçŽæ¥æäœããŸãã
2) èªã¿åãå°çšã¹ã«ã©ãŒå®æ°ãžã®åç §ã stash ãšã³ããªã«é çªã«ä»£å ¥ããŸãã
å®æ°ãµãã«ãŒãã³ãäœæããŸã (constant.pm ãšåæ§)ã
ãããšåãã¡ãœãããçŽç²ãª Perl ããå©çšã§ããŸãã
ãmro::method_changed_in(ã¯ã©ã¹å)ãã
void mro_method_changed_in(HV* ã¹ã¿ãã·ã¥)
mro_register
ã«ã¹ã¿ã mro ãã©ã°ã€ã³ãç»é²ããŸãã 詳现ã«ã€ããŠã¯ãperlmroapi ãåç §ããŠãã ããã
void mro_register(const struct mro_alg *mro)
ãã«ãã³ãŒã« æ©èœ
dãã«ãã³ãŒã«
ãã«ãã³ãŒã«ã®ããŒã«ã«å€æ°ã宣èšããŸãã perlcall ã®ã軜éã³ãŒã«ããã¯ããåç §ããŠãã ããã
dMULTICALL;
ãã«ãã³ãŒã«
軜éã®ã³ãŒã«ããã¯ãäœæããŸãã perlcall ã®ã軜éã³ãŒã«ããã¯ããåç §ããŠãã ããã
ãã«ãã³ãŒã«;
POP_MULTICALL
軜éã³ãŒã«ããã¯ã®éãæ¬åŒ§ã ã軜éã³ãŒã«ããã¯ããåç §ããŠãã ããã
ããŒã«ã³ãŒã«ã
POP_MULTICALL;
PUSH_MULTICALL
軜éã³ãŒã«ããã¯çšã®éå§ãã©ã±ããã ã軜éã³ãŒã«ããã¯ããåç §ããŠãã ããã
ããŒã«ã³ãŒã«ã
PUSH_MULTICALL;
æ°å€ã® æ©èœ
grok_bin
XNUMX é²æ°ãè¡šãæååãæ°å€åœ¢åŒã«å€æããŸãã
å ¥å Žæ start ãš * len ã¹ãã£ã³ããæååãæå®ããŸãã *ãã©ã° å€æãã©ã°ãäžããã
ãš çµæ NULL ãŸã㯠NV ãžã®ãã€ã³ã¿ã§ããå¿ èŠããããŸãã ã¹ãã£ã³ã¯çµäºæã«åæ¢ããŸã
æååããŸãã¯æåã®ç¡å¹ãªæåã ãPERL_SCAN_SILENT_ILLDIGITããèšå®ãããŠããªãå Žå
in *ãã©ã°ãç¡å¹ãªæåã«ééããå ŽåãèŠåãããªã¬ãŒãããŸãã ã®äž
return * len ã¹ãã£ã³ãããæååã®é·ãã«èšå®ããã *ãã©ã° åºåãäžãã
ãã©ã°ã
å€ã <= "UV_MAX" ã®å ŽåãUV ãšããŠè¿ãããåºåãã©ã°ã¯ã¯ãªã¢ãããŸãã
ãããŠäœãæžã蟌ãŸããŠããªã *çµæã å€ã > UV_MAX ã®å Žåããgrok_binããè¿ãããŸãã
UV_MAXãåºåãã©ã°ã«ãPERL_SCAN_GREATER_THAN_UV_MAXããèšå®ãã
äŸ¡å€ *çµæ (ãŸãã¯ã次ã®å Žåã«ã¯å€ãç Žæ£ãããŸã) çµæ ç¡å¹ã§ããïŒã
0 é²æ°ã«ã¯ããªãã·ã§ã³ã§ãXNUMXbããŸãã¯ãbããæ¥é èŸãšããŠä»ããããšãã§ããŸãã
ãPERL_SCAN_DISALLOW_PREFIXããèšå®ãããŠããŸã *ãã©ã° å ¥å Žæã ãã
ãPERL_SCAN_ALLOW_UNDERSCORESããèšå®ãããŠããŸã *ãã©ã° ãã®å ŽåãXNUMXé²æ°ã«ã¯ã_ãã䜿çšã§ããŸãã
æ°åãåºåãæåã
UV grok_bin(const char* start, STRLEN* len_p,
I32* ãã©ã°ãNV *çµæ)
grok_hex
XNUMX é²æ°ãè¡šãæååãæ°å€åœ¢åŒã«å€æããŸãã
å ¥å Žæ start ãš *len_p ã¹ãã£ã³ããæååãæå®ããŸãã *ãã©ã° å€æãã©ã°ãäžããã
ãš çµæ NULL ãŸã㯠NV ãžã®ãã€ã³ã¿ã§ããå¿ èŠããããŸãã ã¹ãã£ã³ã¯çµäºæã«åæ¢ããŸã
æååããŸãã¯æåã®ç¡å¹ãªæåã ãPERL_SCAN_SILENT_ILLDIGITããèšå®ãããŠããªãå Žå
in *ãã©ã°ãç¡å¹ãªæåã«ééããå ŽåãèŠåãããªã¬ãŒãããŸãã ã®äž
return * len ã¹ãã£ã³ãããæååã®é·ãã«èšå®ããã *ãã©ã° åºåãäžãã
ãã©ã°ã
å€ã UV_MAX 以äžã®å ŽåãUV ãšããŠè¿ãããåºåãã©ã°ã¯ã¯ãªã¢ããã
äœãæžã蟌ãŸããŠããªã *çµæã å€ã > UV_MAX ã®å Žåããgrok_hexããè¿ãããŸãã
UV_MAXãåºåãã©ã°ã«ãPERL_SCAN_GREATER_THAN_UV_MAXããèšå®ãã
äŸ¡å€ *çµæ (ãŸãã¯ã次ã®å Žåã«ã¯å€ãç Žæ£ãããŸã) çµæ ç¡å¹ã§ããïŒã
0 é²æ°ã«ã¯ããªãã·ã§ã³ã§ãXNUMXxããŸãã¯ãxããæ¥é èŸãšããŠä»ããããšãã§ããŸãã
ãPERL_SCAN_DISALLOW_PREFIXããèšå®ãããŠããŸã *ãã©ã° å ¥å Žæã ãã
ãPERL_SCAN_ALLOW_UNDERSCORESããèšå®ãããŠããŸã *ãã©ã° ãã®å ŽåãXNUMX é²æ°ã«ã¯ã_ãã䜿çšã§ããŸã
æ°åãåºåãæåã
UV grok_hex(const char* start, STRLEN* len_p,
I32* ãã©ã°ãNV *çµæ)
grok_infnan
ãã«ã㌠grok_number()ããinfinityããŸãã¯ãnot aãã®ããŸããŸãªç¶Žããåãå ¥ããŸãã
æ°å€ããè¿ãã次ã®ãã©ã°ã®çµã¿åããã®ãããããè¿ããŸãã
IS_NUMBER_INFINITE
IS_NUMBER_NAN
IS_NUMBER_INFINITE | IS_NUMBER_NEG
IS_NUMBER_NAN | IS_NUMBER_NEG
0
IS_NUMBER_TRAILING 㧠|-ed ãããå¯èœæ§ããããŸãã
ç¡é倧ãŸãã¯éæ°å€ãèªèãããå Žåã*sp 㯠XNUMX ãã€ããæããŸãã
èªèãããæååã®æ«å°Ÿãè¶ ããŠããŸãã èªèã«å€±æããå Žåã¯ãŒãã«ãªããŸãã
ãè¿ããã*sp ã¯ç§»åããŸããã
int grok_infnan(const char** sp, const char *send)
grok_number
ãšåã grok_number_flags() ãã©ã°ã¯ãŒãã«èšå®ãããŸãã
int grok_number(const char *pv, STRLEN len,
UV*å€p)
grok_number_flags
æ°åãèªèããŸã (ãŸãã¯èªèããŸãã)ã æ°å€ã®åãè¿ãããŸã (0 ã®å Žåã¯
èªèãããªã)ããã以å€ã®å Žåã¯ãIS_NUMBER_IN_UV ã®ããã OR ã®çµã¿åããã§ãã
IS_NUMBER_GREATER_THAN_UV_MAXãIS_NUMBER_NOT_INTãIS_NUMBER_NEGã
IS_NUMBER_INFINITYãIS_NUMBER_NAN (perl.h ã§å®çŸ©)ã
æ°å€ã®å€ã UV ã«åãŸãå Žåã¯ã*valuep ã§è¿ãããŸãã
IS_NUMBER_IN_UV ã¯ã*valuep ãæå¹ã§ããããšã瀺ãããã«èšå®ãããŸããIS_NUMBER_IN_UV
*valuep ãæå¹ã§ãªãéãèšå®ãããããšã¯ãããŸãããã*valuep ãå²ãåœãŠãããŠããå¯èœæ§ããããŸãã
æ»ãæã« IS_NUMBER_IN_UV ãèšå®ãããŠããªãå Žåã§ããåŠçäžã«çºçããŸãã valuep ã
valuep ã NULL 以å€ã®å Žåãšåãå Žåã« NULLãIS_NUMBER_IN_UV ãèšå®ãããŸãã
ãã ããå®éã®å²ãåœãŠ (ãŸã㯠SEGV) ã¯çºçããŸããã
æ«å°Ÿã®å°æ°ã衚瀺ãããå ŽåãIS_NUMBER_NOT_INT 㯠IS_NUMBER_IN_UV ã§èšå®ãããŸã
(ãã®å Žåã*valuep ã¯æŽæ°ã«åãæšãŠãããçã®å€ãè¿ããŸã)ãããã³
æ°å€ãè² ã®å Žå㯠IS_NUMBER_NEG (ãã®å Žåã*valuep ã¯çµ¶å¯Ÿå€ãä¿æããŸã)
䟡å€ïŒã e è¡šèšã䜿çšãããŠããããæ°å€ã倧ããå ŽåãIS_NUMBER_IN_UV ã¯èšå®ãããŸããã
玫å€ç·ãããã
ãflagsãã§ã¯ãPERL_SCAN_TRAILINGãã®ã¿ãèš±å¯ãããŸããããã«ãããæ«å°Ÿã®éæ°å€ãèš±å¯ãããŸãã
ãã以å€ã¯æåããå Žåã®ããã¹ã ã°ããŒã¯ãçµæã«ãIS_NUMBER_TRAILINGããèšå®ããŸãã
int grok_number_flags(const char *pv, STRLEN len,
UV *valuepãU32 ãã©ã°)
grok_numeric_radix
æ°å€ã®å°æ°ç¹åºåãæå (åºæ°) ãã¹ãã£ã³ããŠã¹ãããããŸãã
bool grok_numeric_radix(const char **sp,
const char *éä¿¡)
grok_oct
XNUMX é²æ°ãè¡šãæååãæ°å€åœ¢åŒã«å€æããŸãã
å ¥å Žæ start ãš * len ã¹ãã£ã³ããæååãæå®ããŸãã *ãã©ã° å€æãã©ã°ãäžããã
ãš çµæ NULL ãŸã㯠NV ãžã®ãã€ã³ã¿ã§ããå¿ èŠããããŸãã ã¹ãã£ã³ã¯çµäºæã«åæ¢ããŸã
æååããŸãã¯æåã®ç¡å¹ãªæåã ãPERL_SCAN_SILENT_ILLDIGITããèšå®ãããŠããªãå Žå
in *ãã©ã°ã8 ãŸã㯠9 ã«ééããå ŽåãèŠåãããªã¬ãŒãããŸãã åž°åœæ * len is
ã¹ãã£ã³ãããæååã®é·ãã«èšå®ããã *ãã©ã° åºåãã©ã°ãäžããŸãã
å€ã UV_MAX 以äžã®å ŽåãUV ãšããŠè¿ãããåºåãã©ã°ã¯ã¯ãªã¢ããã
äœãæžã蟌ãŸããŠããªã *çµæã å€ã > UV_MAX ã®å Žåããgrok_octããè¿ãããŸãã
UV_MAXãåºåãã©ã°ã«ãPERL_SCAN_GREATER_THAN_UV_MAXããèšå®ãã
äŸ¡å€ *çµæ (ãŸãã¯ã次ã®å Žåã«ã¯å€ãç Žæ£ãããŸã) çµæ ç¡å¹ã§ããïŒã
ãPERL_SCAN_ALLOW_UNDERSCORESããèšå®ãããŠããå Žå *ãã©ã° ãã®å ŽåãXNUMX é²æ°ã¯äœ¿çšã§ããŸã
æ°åãåºåãããã®ã_ãæåã
UV grok_oct(const char* start, STRLEN* len_p,
I32* ãã©ã°ãNV *çµæ)
ã€ãºã€ã³ããã³
Perl_isinfnan() NV åŒæ°ã次ã®ããããã®å Žåã« true ãè¿ããŠãŒãã£ãªãã£é¢æ°ã§ãã
ç¡é倧ãŸã㯠NaNããã以å€ã®å Žå㯠falseã ããã«è©³çŽ°ã«ãã¹ãããã«ã¯ã次ã䜿çšããŸãã Perl_isinf()
ãš Perl_isnan().
ããã¯ã次ã®è«çéã§ããããŸãã Perl_isfinite().
bool isinfnan(NV nv)
Perl_signbit
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
NV ã®ç¬Šå·ããããèšå®ãããŠããå Žå㯠0 以å€ã®æŽæ°ãè¿ããèšå®ãããŠããªãå Žå㯠XNUMX ãè¿ããŸãã
Configure ããã®ã·ã¹ãã ã« ãµã€ã³ããã() ããã¯NVã§åäœããŸãã
perl.h ã® #define ãä»ããŠäœ¿çšããã ãã§ãã ãã以å€ã®å Žåã¯ãããã«é Œã£ãŠãã ãã
å®è£ ã ãã®é¢æ°ã®äž»ãªçšéã¯ã-0.0 ããã£ããããããšã§ãã
èšå®ã¡ã¢: ãã®é¢æ°ã¯ããã¬ãŒã³ãªé¢æ°ã§ã¯ãªããPerl_signbitããšåŒã°ããŸãã
ãsignbitãã¯ãã·ã¹ãã ã«æ¬¡ã®ãã®ãããããšãæ³åããããããã§ãã ãµã€ã³ããã() æ©èœãŸãã¯
ãã®ãã¯ãã¯ãç§ãã¡ãéžæããç¹å®ã® NV ã§ã¯ããŸããŸæ©èœããŸããã§ããã ãããã¹ãã§ã¯ãããŸãã
ãµã€ã³ãããã Perl_signbit ãšããŠå#define ããã ãã§ãæšæºã®ã·ã¹ãã ããããŒã次ã®ããã«åäœããããšãæåŸ ããŸãã
幞ãã«ãªãã ãŸããããã¯ããŒã³ã³ããã¹ãé¢æ° (pTHX_ ãªã) ã§ãã Perl_signbit()
éåžžãã·ã¹ãã ã®åçŽãªãã¯ãåŒã³åºããšã㊠perl.h ã§åå®çŸ©ãããŸãã ãµã€ã³ããã().
ãŠãŒã¶ãŒã¯åžžã«é»è©±ããããã¹ãã§ã Perl_signbit().
int Perl_signbit(NV f)
ã¹ãã£ã³ãã³
äžäœäºææ§ã®ããã 代ããã«ãgrok_binãã䜿çšããŠãã ããã
NV scan_bin(const char* start, STRLEN len,
STRLEN* ãªã¬ã³)
scan_hex
äžäœäºææ§ã®ããã 代ããã«ãgrok_hexãã䜿çšããŠãã ããã
NV scan_hex(const char* start, STRLEN len,
STRLEN* ãªã¬ã³)
scan_oct
äžäœäºææ§ã®ããã 代ããã«ãgrok_octãã䜿çšããŠãã ããã
NV scan_oct(const char* start, STRLEN len,
STRLEN* ãªã¬ã³)
å»æ¢ããã åŸæ¹ äºææ§ æ©èœ
ãããã®äžéšã¯å»æ¢ãããããšããããŸãã ããããã³ã³ãã€ã«ãã Perl ããé€å€ããã«ã¯ã次ã®ããã«ããŸãã
ãã®ãªãã·ã§ã³ãèšå®ã«è¿œå ããŸã:ã-Accflags='-DNO_MATHOMS'ã
ã«ã¹ã¿ã OP_DESC
æå®ãããã«ã¹ã¿ã æäœã®èª¬æãè¿ããŸãã ããã¯ãã€ãŠ OP_DESC ã«ãã£ãŠäœ¿çšãããŠããŸãã
ãã¯ãã§ãããçŸåšã¯ååšããŸãããããã¯äºææ§ã®ããã ãã«æ®ãããŠãããæ¬æ¥ã¯äœ¿çšãã¹ãã§ã¯ãããŸããã
å©çšãããã
const char *custom_op_desc(const OP *o)
ã«ã¹ã¿ã æäœå
æå®ãããã«ã¹ã¿ã æäœã®ååãè¿ããŸãã ããã¯ãã€ãŠ OP_NAME ãã¯ãã§äœ¿çšãããŠããŸããã
ããããçŸåšã¯ããã§ã¯ãããŸãããããã¯äºææ§ã®ããã«ä¿æãããŠããã ãã§ããã䜿çšãã¹ãã§ã¯ãããŸããã
const char *custom_op_name(const OP *o)
gv_fetch ã¡ãœãã
ãgv_fetchmethod_autoloadããåç §ããŠãã ããã
GV* gv_fetchmethod(HV* ã¹ã¿ãã·ã¥ãconst char* å)
is_utf8_char
å»æ¢ãããŸãã! ãã®é¢æ°ã¯ Perl ã®å°æ¥ã®ãªãªãŒã¹ããåé€ãããäºå®ã§ãã
æ°ããã³ãŒãã«ã¯äœ¿çšããªãã§ãã ããã æ¢åã®ã³ãŒãããåé€ããŠãã ããã
ä»»æã®æ°ã®ãã€ããæå¹ãª UTF-8 æåã§å§ãŸããã©ããããã¹ãããŸãã 泚èš
INVARIANT (ã€ãŸããé EBCDIC ãã·ã³ã§ã¯ ASCII) æåãæå¹ãª UTF-8 ã§ããããš
ãã£ã©ã¯ã¿ãŒã 次ã®å ŽåãUTF-8 æåã®å®éã®ãã€ãæ°ãè¿ãããŸãã
æå¹ã§ãããã以å€ã®å Žå㯠0 ã§ãã
äžæ£ãªå ¥åãè¡ãããå¯èœæ§ãããããããã®é¢æ°ã¯éæšå¥šã«ãªããŸããã
å ¥åãããã¡ã®çµãããè¶ ããŠèªã¿åããè¡ãããå¯èœæ§ããããŸãã 代ããã«ãisUTF8_CHARãã䜿çšããŠãã ããã
STRLEN is_utf8_char(const U8 *s)
is_utf8_char_buf
ããã¯ãã¯ããisUTF8_CHARããšåãã§ãã
STRLEN is_utf8_char_buf(const U8 *buf,
const U8 *buf_end)
ããã¯ãã£ãã
ãšã³ãžã³å®è£ ããã¯ïŒïŒ ããŒã«é¢æ°ã 泚: ãã©ã¡ãŒã¿ next_in_list ããã³
ãã©ã°ã¯äœ¿çšãããŸããã ãã®åŒã³åºãã¯äœ¿çšããªãã§ãã ããã 代ããã«ããã¯ãªã¹ãã䜿çšããŠãã ããã
void Pack_cat(SV *cat, const char *pat,
const char *ç¹èš±ãSV **beglistã
SV **ãšã³ããªã¹ããSV ***next_in_listã
U32 ãã©ã°)
ãããã³ã³ãåã¿ã€ã
äœçœ®ã§åå¥å€æ°ã®åãæ€çŽ¢ããŸãã po çŸåšã§ã¯-
ã³ã³ãã€ã«ãããã å€æ°ãåæå®ãããŠããå Žåããã®å€æ°ãå±ããã¯ã©ã¹ã®ã¹ã¿ãã·ã¥
å ¥åããããã®ãè¿ãããŸãã ããã§ãªãå Žåã¯ããNULLããè¿ãããŸãã
HV * ãããè£ååã¿ã€ã(PADOFFSET po)
sv_2pvbyte_nolen
SV ã®ãã€ããšã³ã³ãŒãè¡šçŸãžã®ãã€ã³ã¿ãŒãè¿ããŸãã SVãåŒãèµ·ããå¯èœæ§ããã
å¯äœçšãšã㊠UTF-8 ããããŠã³ã°ã¬ãŒããããŸãã
éåžžã¯ãSvPVbyte_nolenããã¯ããä»ããŠã¢ã¯ã»ã¹ãããŸãã
char* sv_2pvbyte_nolen(SV* sv)
sv_2pvutf8_nolen
SV ã® UTF-8 ãšã³ã³ãŒãè¡šçŸãžã®ãã€ã³ã¿ãŒãè¿ããŸãã SVãåŒãèµ·ããå¯èœæ§ããã
å¯äœçšãšã㊠UTF-8 ã«ã¢ããã°ã¬ãŒããããŸãã
éåžžã¯ãSvPVutf8_nolenããã¯ãçµç±ã§ã¢ã¯ã»ã¹ããŸãã
char* sv_2pvutf8_nolen(SV* sv)
sv_2pv_nolen
ãsv_2pv()ããšäŒŒãŠããŸãããé·ããè¿ããŸããã éåžžã¯ã
代ããã«ãã¯ã ã©ãããŒãSvPV_nolen(sv)ãã䜿çšããŸãã
char* sv_2pv_nolen(SV* sv)
sv_catpvn_mg
ãsv_catpvnããšäŒŒãŠããŸããããsetãããžãã¯ãåŠçããŸãã
void sv_catpvn_mg(SV *sv, const char *ptr,
STRLENã¬ã³ïŒ
sv_catsv_mg
ãsv_catsvããšäŒŒãŠããŸããããsetãããžãã¯ãåŠçããŸãã
void sv_catsv_mg(SV *dsv, SV *ssv)
sv_force_normal
SV äžã®ããŸããŸãªçš®é¡ã®åœè£ ãå ã«æ»ããŸããPV ãå ±ææååã®å Žåã¯ã
ç§çã³ããŒ; ç§ãã¡ãåç §è ã§ããå Žåã¯ãåç §ãåæ¢ããŠãã ããã glob ã®å Žåã¯ãxpvmg ã«ããŠã³ã°ã¬ãŒãããŸãã
ãsv_force_normal_flagsããåç §ããŠãã ããã
void sv_force_normal(SV *sv)
sv_iv ã«å¯Ÿå¿ã§ããªãã³ã³ãã€ã©çšã®ãSvIVxããã¯ãã®ãã©ã€ããŒãå®è£
è€éãªãã¯ãåŒã 代ããã«åžžã«ãã¯ãã䜿çšããŠãã ããã
IV sv_iv(SV* sv)
sv_nolocking
ãã㯠ã¢ãžã¥ãŒã«ãååšããªãå Žåã« SV ããããã¯ããããã㌠ã«ãŒãã³ã ååšãã
NULL é¢æ°ãã€ã³ã¿ãŒã®ãã¹ããé¿ããããããŸãèŠåãçºçããå¯èœæ§ããããã
ããçšåºŠã®å³ããã®ããšã§ã
ã眮ãæããããã sv_nosharing().
void sv_nolocking(SV *sv)
sv_nounlocking
ãã㯠ã¢ãžã¥ãŒã«ãååšããªãå Žåã« SV ããããã¯è§£é€ããããã㌠ã«ãŒãã³ã
NULL é¢æ°ãã€ã³ã¿ãŒã®ãã¹ããåé¿ããããã«ååšããŸãããŸããæœåšçã«ãã¹ããè¡ââãããå¯èœæ§ãããããã
ããçšåºŠã®å³å¯ãã®äžã§èŠåããŸãã
ã眮ãæããããã sv_nosharing().
void sv_nounlocking(SV *sv)
sv_nv ã«å¯Ÿå¿ã§ããªãã³ã³ãã€ã©çšã®ãSvNVxããã¯ãã®ãã©ã€ããŒãå®è£ ã
è€éãªãã¯ãåŒã 代ããã«åžžã«ãã¯ãã䜿çšããŠãã ããã
NV sv_nv(SV* sv)
sv_pv 代ããã«ãSvPV_nolenããã¯ãã䜿çšããŠãã ãã
char* sv_pv(SV *sv)
sv_pvbyte
代ããã«ãSvPVbyte_nolenãã䜿çšããŠãã ããã
char* sv_pvbyte(SV *sv)
sv_pvbyten
察å¿ã§ããªãã³ã³ãã€ã©åãã®ãSvPVbyteããã¯ãã®ãã©ã€ããŒãå®è£
è€éãªãã¯ãåŒã䜿çšããŸãã 代ããã«åžžã«ãã¯ãã䜿çšããŠãã ããã
char* sv_pvbyten(SV *sv, STRLEN *lp)
sv_pvn ã«å¯Ÿå¿ã§ããªãã³ã³ãã€ã©çšã®ãSvPVããã¯ãã®ãã©ã€ããŒãå®è£
è€éãªãã¯ãåŒã 代ããã«åžžã«ãã¯ãã䜿çšããŠãã ããã
char* sv_pvn(SV *sv, STRLEN *lp)
sv_pvutf8
代ããã«ãSvPVutf8_nolenããã¯ãã䜿çšããŠãã ãã
char* sv_pvutf8(SV *sv)
sv_pvutf8n
察å¿ã§ããªãã³ã³ãã€ã©åãã®ãSvPVutf8ããã¯ãã®ãã©ã€ããŒãå®è£
è€éãªãã¯ãåŒã䜿çšããŸãã 代ããã«åžžã«ãã¯ãã䜿çšããŠãã ããã
char* sv_pvutf8n(SV *sv, STRLEN *lp)
sv_taint
SV ãæ±æããŸãã 代ããã«ãSvTAINTED_onãã䜿çšããŠãã ããã
void sv_taint(SV* sv)
sv_unref
SV ã® RV ã¹ããŒã¿ã¹ã®èšå®ã解é€ãã以åã®ç¶æ ã®åç §ã«ãŠã³ãããã¯ãªã¡ã³ãããŸãã
RV ã«ãã£ãŠåç §ãããŸãã ããã¯ã»ãŒé転ãšèããããšãã§ããŸãã
ãnewSVrvãã ããã¯ãããã©ã°ãããŒãã®ãsv_unref_flagsãã§ãã ãSvROK_offããåç §ããŠãã ããã
void sv_unref(SV* sv)
sv_usepvn
SV ã«ãptrãã䜿çšããŠæååå€ãæ€çŽ¢ããããã«æ瀺ããŸãã åŒã³åºãã«ãã£ãŠå®è£ ããã
ãsv_usepvn_flagsãã®ãflagsãã 0 ã§ããããããsetãããžãã¯ã¯åŠçãããŸããã èŠã
ãsv_usepvn_flagsãã
void sv_usepvn(SV* sv, char* ptr, STRLEN len)
sv_usepvn_mg
ãsv_usepvnããšäŒŒãŠããŸããããsetãããžãã¯ãåŠçããŸãã
void sv_usepvn_mg(SV *sv, char *ptr, STRLEN len)
sv_uv ã«å¯Ÿå¿ã§ããªãã³ã³ãã€ã©çšã®ãSvUVxããã¯ãã®ãã©ã€ããŒãå®è£
è€éãªãã¯ãåŒã 代ããã«åžžã«ãã¯ãã䜿çšããŠãã ããã
UV sv_uv(SV* sv)
unpack_str
ãšã³ãžã³å®è£ unpackïŒïŒ ããŒã«é¢æ°ã 泚: ãã©ã¡ãŒã¿ strbegãnew_s
ããã³ ocnt ã¯äœ¿çšãããŸããã ãã®åŒã³åºãã¯äœ¿çšããªãã§ãã ããã代ããã« unpackstring ã䜿çšããŠãã ããã
I32 unpack_str(const char *pat, const char *patend,
const char *sãconst char *strbegã
const char *strendãchar **new_sã
I32 ocntãU32 ãã©ã°)
utf8_to_uvchr
å»æ¢ãããŸãã! ãã®é¢æ°ã¯ Perl ã®å°æ¥ã®ãªãªãŒã¹ããåé€ãããäºå®ã§ãã
æ°ããã³ãŒãã«ã¯äœ¿çšããªãã§ãã ããã æ¢åã®ã³ãŒãããåé€ããŠãã ããã
æååãsãã®æåã®æåã®ãã€ãã£ã ã³ãŒã ãã€ã³ããè¿ããŸãã
UTF-8 ãšã³ã³ãŒãã§ãããšæ³å®ãããŸãã ãretlenãã¯ããã€ãåäœã®é·ãã«èšå®ãããŸãã
ãã®ãã£ã©ã¯ã¿ãŒã
ãã¹ãŠã§ã¯ãããŸããããäžéšã® UTF-8 ã®äžæ£ãªåœ¢åŒãæ€åºãããå®éã«äžéšã®äžæ£ãªåœ¢åŒãæ€åºãããŸãã
å ¥åã«ãããå ¥åãããã¡ã®æ«å°Ÿãè¶ ããèªã¿åããçºçããå¯èœæ§ããããŸãããã®ããã
é¢æ°ã¯å»æ¢ãããŸããã 代ããã«ãutf8_to_uvchr_bufãã䜿çšããŠãã ããã
ãsããæ€åºãããç°åžžã® 8 ã€ãæããŠãããUTFXNUMX èŠåãæå¹ã«ãªã£ãŠããå Žåã
ãŒããè¿ããã*retlen 㯠(ãretlenãã NULL ã§ãªãå Žå) -1 ã«èšå®ãããŸãã ãããããã
èŠåã¯ãªããæ確ã«å®çŸ©ãããŠããå Žåã¯èšç®å€ (ãŸã㯠Unicode REPLACEMENT
CHARACTER (ããã§ãªãå Žå) ããµã€ã¬ã³ãã«è¿ããã*retlen ãèšå®ãããŸã (ãretlenããèšå®ãããŠããªãå Žå)
NULL) ãªã®ã§ã("s" + *retlen) ã "s" å ã®æ¬¡ã®å¯èœãªäœçœ®ã«ãªããŸãã
äžæ£ã§ãªãæåãéå§ããŸãã 詳现ã«ã€ããŠã¯ããutf8n_to_uvchrããåç §ããŠãã ããã
REPLACEMENT CHARACTER ãè¿ãããŸãã
UV utf8_to_uvchr(const U8 *s, STRLEN *retlen)
utf8_to_uvuni
å»æ¢ãããŸãã! ãã®é¢æ°ã¯ Perl ã®å°æ¥ã®ãªãªãŒã¹ããåé€ãããäºå®ã§ãã
æ°ããã³ãŒãã«ã¯äœ¿çšããªãã§ãã ããã æ¢åã®ã³ãŒãããåé€ããŠãã ããã
æååãsãã®æåã®æåã® Unicode ã³ãŒã ãã€ã³ããè¿ããŸãã
UTF-8 ãšã³ã³ãŒãã§ãããšæ³å®ãããŸãã ãretlenãã¯ããã€ãåäœã®é·ãã«èšå®ãããŸãã
ãã®ãã£ã©ã¯ã¿ãŒã
ãã¹ãŠã§ã¯ãããŸããããäžéšã® UTF-8 ã®äžæ£ãªåœ¢åŒãæ€åºãããå®éã«äžéšã®äžæ£ãªåœ¢åŒãæ€åºãããŸãã
å ¥åã«ãããå ¥åãããã¡ã®æ«å°Ÿãè¶ ããèªã¿åããçºçããå¯èœæ§ããããŸãããããçç±ã® XNUMX ã€ã§ãã
ãã®é¢æ°ãå»æ¢ãããçç±ã ããXNUMXã€ã¯ãéåžžã«éãããç¯å²ã§ã®ã¿çºçãããšããããšã§ãã
Unicode ãšãã€ãã£ã ã³ãŒã ãã€ã³ãã«èå³ãããå Žåã¯ã
ããªãã 代æ¿æ¡ã«ã€ããŠã¯ããutf8_to_uvuni_bufããåç §ããŠãã ããã
ãsããæ€åºãããç°åžžã® 8 ã€ãæããŠãããUTFXNUMX èŠåãæå¹ã«ãªã£ãŠããå Žåã
ãŒããè¿ããã*retlen 㯠(ãretlenãã NULL ãæããŠããªãå Žå) -1 ã«èšå®ãããŸãã ãã
ãããã®èŠåã¯ãªãã§ãããæ確ã«å®çŸ©ãããŠããå Žåã¯èšç®å€ (ãŸã㯠Unicode
REPLACEMENT CHARACTER (ããã§ãªãå Žå) ããµã€ã¬ã³ãã«è¿ããã*retlen ãèšå®ãããŸã (ããã§ãªãå Žå)ã
"retlen" 㯠NULL ã§ã¯ãªã)ããã®ãã ("s" + *retlen) ã "s" å ã®æ¬¡ã®å¯èœãªäœçœ®ã«ãªããŸãã
ããã¯ãäžæ£ã§ã¯ãªãæåãéå§ããå¯èœæ§ããããŸãã 詳现ã«ã€ããŠã¯ããutf8n_to_uvchrããåç §ããŠãã ããã
REPLACEMENT CHARACTER ãè¿ããããšãã
UV utf8_to_uvuni(const U8 *s, STRLEN *retlen)
ãªãããªãŒ 建èš
æ°ããã¢ãµã€ã³ããã
ä»£å ¥æŒç®ãæ§ç¯ããã§ãã¯ããè¿ããŸãã å·Š ãš å³ äŸçµŠ
å²ãåœãŠã®ãã©ã¡ãŒã¿ã ãããã¯ãã®é¢æ°ã«ãã£ãŠæ¶è²»ãããäžéšã«ãªããŸã
æ§ç¯ããã op ããªãŒã®ã
If ãªãã¿ã€ã ãOP_ANDASSIGNãããOP_ORASSIGNãããŸãã¯ãOP_DORASSIGNãã®å Žåãé©åãª
æ¡ä»¶ä»ã optree ãæ§ç¯ãããŸãã ãã ãªãã¿ã€ã äºé æŒç®åã®ãªãã³ãŒãã§ãã
ãOP_BIT_ORããªã©ããã€ããªæŒç®ãå®è¡ããæŒç®ãæ§ç¯ãããŸãã
ãããŠçµæãå·Šã®åŒæ°ã«ä»£å ¥ããŸãã ãããã«ããŠãããã ãªãã¿ã€ã ãŒã以å€ã§ã
ãã®åŸ ãã©ã° å¹æã¯ãããŸããã
If ãªãã¿ã€ã ããŒãã®å Žåããã¬ãŒã³ãªã¹ã«ã©ãŒãŸãã¯ãªã¹ãã®ä»£å ¥ãæ§ç¯ãããŸãã ã©ãã®
å²ãåœãŠã®çš®é¡ã¯èªåçã«æ±ºå®ãããŸãã ãã©ã° XNUMXããããäžãã
ãã ãããOPf_KIDSãã¯èªåçã«èšå®ãããäžã«ã·ãããããŸãã
1 ããããå€ 2 ãŸã㯠XNUMX ã®ããããé€ãããop_privateãã® XNUMX ããã
å¿ èŠã«å¿ããŠèªåçã«èšå®ãããŸãã
OP * newASSIGNOP(I32 ãã©ã°ãOP *leftãI32 optypeã
OPâ»å³ïŒ
æ°ããBINOP
ä»»æã®ãã€ããªåã® op ãæ§ç¯ããã§ãã¯ããè¿ããŸãã type ãªãã³ãŒãã§ãã
ãã©ã° ãOPf_KIDSããèšå®ãããããšãé€ãããop_flagsãã® XNUMX ããããæå®ããŸãã
èªåçã«ããop_privateãã® XNUMX ãããã XNUMX ãããäžã«ã·ããããŸãã
å€ 1 ãŸã㯠2 ã®ãããã¯å¿ èŠã«å¿ããŠèªåçã«èšå®ãããŸãã æåã® ãš last
ãã€ããªæŒç®ã®çŽæ¥ã®åãšãªãæŒç®ã XNUMX ã€ãŸã§æå®ããŸãã 圌ãã¯æ¶è²»ããã
ãã®é¢æ°ã«ãããæ§ç¯ããã op ããªãŒã®äžéšã«ãªããŸãã
OP * newBINOP(I32 ã¿ã€ããI32 ãã©ã°ãOP *firstã
OP â»ã©ã¹ãïŒ
NEWCONDOP
æ¡ä»¶åŒ ("cond_expr") æŒç®ãæ§ç¯ãæ€æ»ããè¿ããŸãã ãã©ã°
ãOPf_KIDSããèšå®ãããããšãé€ãããop_flagsãã® XNUMX ããããæå®ããŸãã
èªåçã«ããop_privateãã® XNUMX ãããã XNUMX ãããäžã«ã·ããããŸãã
å€ 1 ã®ããããèªåçã«èšå®ãããããšãæå³ããŸãã æåã® è¡šçŸãæäŸããŸã
XNUMX ã€ã®ãã©ã³ãã®éã§éžæãã ãã¥ã«ãŒãªã ãš åœãã® æãäŸçµŠããŸãã
ãããã¯ãã®é¢æ°ã«ãã£ãŠæ¶è²»ãããæ§ç¯ããã op ããªãŒã®äžéšã«ãªããŸãã
OP * newCONDOP(I32 ãã©ã°ãOP *firstãOP *trueopã
OP *åœãœã)
æ°ããDEFSVOP
$_ ã«ã¢ã¯ã»ã¹ããããã®æäœããåå¥å€æ°ãšããŠæ§ç¯ããŠè¿ããŸã (
çŸåšã®ã¹ã³ãŒãå ã§ãmy $_ããšããŠå®£èšãããããã°ããŒãã« $_ ãšããŠå®£èšãããŸãã
OP * newDEFSVOP()
NEWFOROP
ãforeachãã«ãŒã (å埩) ãè¡šã op ããªãŒãæ§ç¯ããã§ãã¯ããè¿ããŸãã
å€ã®ãªã¹ããéããŠ)ã ãå¯èœã«ããæ§é ãæã€ééçŽã®ã«ãŒãã§ãã
ãlastããªã©ã«ãã£ãŠã«ãŒããçµäºããŸãã
sv ãªãã·ã§ã³ã§ãåé ç®ã«é çªã«ãšã€ãªã¢ã¹ãããå€æ°ãæå®ããŸãã ãã
null ã®å Žåãããã©ã«ã㯠$_ (åå¥ãŸãã¯ã°ããŒãã«) ã«ãªããŸãã åŒ ã®ãªã¹ããæäŸããŸã
å埩åŠçããå€ã ã³ããæ°åãŠã£ã«ã¹(COVID-XNUMX)ãã¡ã³ã¿ã«ãã«ã¹ã®åŽ©å£ãé¿ããçºã® ã«ãŒãã®æ¬äœãæäŸãã CONT
ãªãã·ã§ã³ã§ãæ¬äœã®åŸåãšããŠåäœãããç¶ç¶ããããã¯ãæäŸããŸãã
ãããã® optree å ¥åã¯ãã¹ãŠãã®é¢æ°ã«ãã£ãŠæ¶è²»ããã
op ããªãŒãæ§ç¯ããŸããã
ãã©ã° ãleaveloopãop ã®ãop_flagsãã® XNUMX ããããäžããäžã«ã·ããããŸãã
XNUMX ãããããleaveloopãop ã®ãop_privateãã® XNUMX ãããããã ãã(
ã©ã¡ãã®å Žåã) äžéšã®ãããã¯èªåçã«èšå®ãããŸãã
OP * newFOROP(I32 ãã©ã°ãOP *svãOP *exprãOP *blockã
OP *ç¶ã)
newã®ãããã
ãæå®ãããããããã¯ãè¡šã op ããªãŒãæ§ç¯ããã§ãã¯ããè¿ããŸãã æ¡ä»¶
åå¥å€æ°ã«ããŒã«ã«ã«å²ãåœãŠãããåŒãæå®ããŸãã
ã³ããæ°åãŠã£ã«ã¹(COVID-XNUMX)ãã¡ã³ã¿ã«ãã«ã¹ã®åŽ©å£ãé¿ããçºã® ãæå®ããããæ§æäœã®æ¬äœãæäŸããŸãã 圌ãã¯ããã«é£²ã¿èŸŒãŸããŠããŸã
æ©èœããæ§ç¯ããã op ããªãŒã®äžéšã«ãªããŸãã defsv_off ããããªãã»ããã§ã
圱é¿ãåããã¹ã«ã©ãŒåå¥å€æ°ã®å€ã 0 ã®å Žåãã°ããŒãã« $_
䜿çšãããŸãã
OP * newGIVENOP(OP *cond, OP *block,
PADOFFSET defsv_off)
newGVOP åã蟌ã¿ãªããžã§ã¯ããå«ãããããã¿ã€ãã®æŒç®ãæ§ç¯ããã§ãã¯ããè¿ããŸãã
GV ãžã®åç §ã type ãªãã³ãŒãã§ãã ãã©ã° XNUMX ãããã®ãop_flagsããäžããŸãã
gv æäœãåç §ããå¿ èŠããã GV ãèå¥ããŸãã ãã®é¢æ°ãåŒã³åºããšã
ãããžã®åç §ã®æææš©ãè²æž¡ããŸãã
OP * newGVOP(I32 ã¿ã€ããI32 ãã©ã°ãGV *gv)
æ°ãããªã¹ã
ä»»æã®ãªã¹ãåã®æŒç®ãæ§ç¯ããã§ãã¯ããè¿ããŸãã type ãªãã³ãŒãã§ãã
ãã©ã° ãOPf_KIDSããèšå®ãããããšãé€ãããop_flagsãã® XNUMX ããããæå®ããŸãã
å¿ èŠã«å¿ããŠèªåçã«å®è¡ãããŸãã æåã® ãš last æ倧 XNUMX ã€ã®æäœãçŽæ¥æå®ããŸã
ãªã¹ã op ã®åã ãããã¯ãã®é¢æ°ã«ãã£ãŠæ¶è²»ããã
op ããªãŒãæ§ç¯ããŸããã
ã»ãšãã©ã®ãªã¹ãæŒç®åã§ã¯ããã§ãã¯é¢æ°ã¯ãã¹ãŠã®åäŸæŒç®åãååšããããšãæåŸ ããŸãã
ãã§ã«ããããããnewLISTOP(OP_JOIN, ...)ã(äŸ) ãåŒã³åºãããšã¯é©åã§ã¯ãããŸããã ããªãã¯äœã§ãã
ãã®å Žåã«ããããã®ã¯ãOP_LISTã¿ã€ãã®OPãäœæããããã«åãè¿œå ããããšã§ã
ãããæå®ããŠããop_convert_listããåŒã³åºããŸãã 詳现ã«ã€ããŠã¯ããop_convert_listããåç §ããŠãã ããã
OP * newLISTOP(I32 ã¿ã€ããI32 ãã©ã°ãOP *firstã
OP â»ã©ã¹ãïŒ
æ°ããLOGOP
è«ç (ãããŒå¶åŸ¡) æŒç®ãæ§ç¯ããã§ãã¯ããè¿ããŸãã type ãªãã³ãŒãã§ãã
ãã©ã° ãOPf_KIDSããèšå®ãããããšãé€ãããop_flagsãã® XNUMX ããããæå®ããŸãã
èªåçã«ããop_privateãã® XNUMX ãããã XNUMX ãããäžã«ã·ããããŸãã
å€ 1 ã®ããããèªåçã«èšå®ãããããšãæå³ããŸãã æåã® è¡šçŸãæäŸããŸã
æµããã³ã³ãããŒã«ãã ä»ã® ãªãã¬ãŒã·ã§ã³ã®ãµã€ã (代æ¿) ãã§ãŒã³ãæäŸããŸãã 圌ãã¯
ã¯ãã®é¢æ°ã«ãã£ãŠæ¶è²»ãããæ§ç¯ããã op ããªãŒã®äžéšã«ãªããŸãã
OP * newLOGOP(I32 ã¿ã€ããI32 ãã©ã°ãOP *firstã
OP â»ãã®ä»ïŒ
NEWLOOPEX
ã«ãŒããçµäºããæäœ (ãgotoãããlastããªã©) ãæ§ç¯ããã§ãã¯ããè¿ããŸãã
type ãªãã³ãŒãã§ãã ã©ãã« ã®ã¿ãŒã²ããã決å®ãããã©ã¡ãŒã¿ãæäŸããŸãã
ãªã; ãã®é¢æ°ã«ãã£ãŠæ¶è²»ãããæ§ç¯ããã op ããªãŒã®äžéšã«ãªããŸãã
OP * newLOOPEX(I32ã¿ã€ããOP *ã©ãã«)
newLOOPOP
ã«ãŒããè¡šçŸãã op ããªãŒãæ§ç¯ãæ€æ»ããè¿ããŸãã ããã¯åãªãã«ãŒãã§ã
op ããªãŒãä»ããå¶åŸ¡ãããŒå ã ééçŽã®ã«ãŒãã¯ãããŸãã
ãlastããªã©ã§ã«ãŒããæããããæ§é ã ãã©ã° äžãã
æäžäœã®æŒç®ã®ãop_flagsãã® XNUMX ãããïŒäžéšã®ããããèšå®ãããããšãé€ãïŒ
å¿ èŠã«å¿ããŠèªåçã«å®è¡ãããŸãã åŒ åŒå¶åŸ¡ã«ãŒããæäŸããŸã
å埩ãããã³ ã³ããæ°åãŠã£ã«ã¹(COVID-XNUMX)ãã¡ã³ã¿ã«ãã«ã¹ã®åŽ©å£ãé¿ããçºã® ã«ãŒãã®æ¬äœãæäŸããŸãã 圌ãã¯ããã«é£²ã¿èŸŒãŸããŠããŸã
æ©èœããæ§ç¯ããã op ããªãŒã®äžéšã«ãªããŸãã ãããã°å¯èœ çŸåšã
æªäœ¿çšã§ãããåžžã« 1 ã§ããå¿ èŠããããŸãã
OP * newLOOPOP(I32 ãã©ã°ãI32 ãããã°å¯èœãOP *exprã
OP *ãããã¯)
newMETHOP
è©äŸ¡ãããã¡ãœããåãæã€ã¡ãœããåã®æŒç®ãæ§ç¯ããã§ãã¯ããè¿ããŸãã
å®è¡æã type ãªãã³ãŒãã§ãã ãã©ã° ãop_flagsãã® XNUMX ããããæå®ããŸãããã ãã
ãOPf_KIDSãã¯èªåçã«èšå®ãããXNUMX ãããäžã«ã·ãããããšãXNUMX ãããã
ãã ããå€ 1 ã®ãããã¯èªåçã«èšå®ãããŸãã
ãã€ãããã¯ã¡ã¹ ã¡ãœããåãè©äŸ¡ããæŒç®ãæäŸããŸãã ããã«æ¶è²»ããã
æ©èœããæ§ç¯ããã op ããªãŒã®äžéšã«ãªããŸãã ãµããŒããããŠãããªãã¿ã€ã:
OP_ã¡ãœããã
OP * newMETHOP(I32 ã¿ã€ããI32 ãã©ã°ãOP *first)
newMETHOP_named
å®æ°ã®ã¡ãœããåãæã€ã¡ãœããåã® op ãæ§ç¯ããã§ãã¯ããè¿ããŸãã
type ãªãã³ãŒãã§ãã ãã©ã° ãop_flagsãã® XNUMX ããããäžããäžã«ã·ããããŸã
XNUMX ãããããop_privateãã® XNUMX ãããã const_meth å®æ°ã¡ãœãããæäŸããŸã
åå; å ±æ COW æååã§ããå¿ èŠããããŸãã ãµããŒããããŠãããªãã¿ã€ã: OP_METHOD_NAMEDã
OP * newMETHOP_named(I32 ã¿ã€ããI32 ãã©ã°ã
SV *const_meth)
æ°ããNULLLIST
空ã®ãªã¹ããè¡šãæ°ãããã¹ã¿ããæŒç®ãæ§ç¯ããã§ãã¯ããè¿ããŸãã
åŒã§ãã
OP * newNULLLIST()
newOP ä»»æã®åºæ¬å (äœåãªèŠçŽ ãæããªãä»»æã®å) ã®æŒç®ãæ§ç¯ããã§ãã¯ããè¿ããŸãã
ç°çïŒã type ãªãã³ãŒãã§ãã ãã©ã° ãop_flagsãã® XNUMX ããããäžãããããŠã
ãop_privateãã® XNUMX ãããã XNUMX ãããäžã«ã·ããããŸãã
OP * newOP(I32 ã¿ã€ããI32 ãã©ã°)
ãã¥ãŒPADOP
ãžã®åç §ãå«ãä»»æã®åã® op ãæ§ç¯ããã§ãã¯ããè¿ããŸãã
ãããèŠçŽ ã type ãªãã³ãŒãã§ãã ãã©ã° XNUMX ãããã®ãop_flagsããäžããŸãã ã
ããã ã¹ãããã¯èªåçã«å²ãåœãŠããã sv; ãã®é¢æ°ã¯ããããŸã
ããã«å¯Ÿãã XNUMX ã€ã®åç §ã®æææš©ã
ãã®é¢æ°ã¯ãPerl ã ithread ã䜿çšããããã«ã³ã³ãã€ã«ãããŠããå Žåã«ã®ã¿ååšããŸãã
OP * newPADOP(I32 ã¿ã€ããI32 ãã©ã°ãSV *sv)
newPMOP ä»»æã®ãã¿ãŒã³ ãããã³ã° ã¿ã€ãã® op ãæ§ç¯ããã§ãã¯ããè¿ããŸãã type ã¯
ãªãã³ãŒãã ãã©ã° XNUMX ãããã®ãop_flagsããäžããXNUMX ãããäžã«ã·ãããããšã
XNUMXãããã®ãop_privateãã
OP * newPMOP(I32 ã¿ã€ããI32 ãã©ã°)
newPVOP åã蟌ã¿ãªããžã§ã¯ããå«ãããããã¿ã€ãã® op ãæ§ç¯ããã§ãã¯ããè¿ããŸãã
C ã¬ãã« ãã€ã³ã¿ãŒ (PV)ã type ãªãã³ãŒãã§ãã ãã©ã° ã® XNUMX ããããäžããŸã
ãop_flagsãã pv C ã¬ãã« ãã€ã³ã¿ãæäŸããŸãããã®ãã€ã³ã¿ã¯ã次ã䜿çšããŠå²ãåœãŠãããŠããå¿ èŠããããŸãã
"PerlMemShared_malloc"; op ãç Žæ£ããããšã¡ã¢ãªã解æŸãããŸãã
OP * newPVOP(I32 ã¿ã€ããI32 ãã©ã°ãchar *pv)
æ°ããç¯å²
äžäœã®ãããªãããããã³ããããããæŒç®ã䌎ããç¯å²ãæŒç®ãæ§ç¯ããŠè¿ããŸãã
ãã©ã° ãããªãããæŒç®ã®ãop_flagsãã® XNUMX ããããäžããXNUMX ãããäžã«ã·ããããŸã
ãããããflipãæäœãšãrangeãæäœã®äž¡æ¹ã®ãop_privateãã® XNUMX ãããããã ãã
å€ 1 ã®ããããèªåçã«èšå®ãããããšãæå³ããŸãã å·Š ãš å³ äŸçµŠ
ç¯å²ã®çµç¹ãå¶åŸ¡ããåŒã 圌ãã¯ããã«é£²ã¿èŸŒãŸããŠããŸã
æ©èœããæ§ç¯ããã op ããªãŒã®äžéšã«ãªããŸãã
OP * newRANGE(I32 ãã©ã°ãOP *å·ŠãOP *å³)
newSLICEOP
ãlsliceã(ãªã¹ãã¹ã©ã€ã¹) æŒç®ãæ§ç¯ããã§ãã¯ããè¿ããŸãã ãã©ã° äžãã
XNUMX ãããã®ãop_flagsãããã ãããOPf_KIDSãã¯èªåçã«èšå®ãããŸãã
ãop_privateãã® XNUMX ãããã XNUMX ãããäžã«ã·ããããŸãããã ãã
å€ 1 ãŸã㯠2 ã¯å¿ èŠã«å¿ããŠèªåçã«èšå®ãããŸãã ãªã¹ãå€ ãš æ·»å äŸçµŠ
ã¹ã©ã€ã¹ã®ãã©ã¡ãŒã¿ã ãããã¯ãã®é¢æ°ã«ãã£ãŠæ¶è²»ããã
op ããªãŒãæ§ç¯ããŸããã
OP * newSLICEOP(I32 ãã©ã°ãOP *æ·»ãåã
OP *ãªã¹ãå€)
newSTATEOP
ç¶æ æŒç® (COP) ãæ§ç¯ããŸãã ç¶æ æäœã¯éåžžã次ã®ç¶æ ãæäœã§ããã
çŸåšã³ã³ãã€ã«ãããŠããã³ãŒãã®ãããã°ãæå¹ã«ãªã£ãŠããå Žåã¯ããdbstateããªãã¬ãŒã·ã§ã³ã«ãªããŸãã ç¶æ
op ã¯ãPL_curcopã(ãŸãã¯ãPL_compilingã) ããèšå®ãããŸãã ãã ã©ãã« null ã§ã¯ãªããããã¯
ç¶æ æŒç®ã«ä»ããã©ãã«ã®ååãæå®ããŸãã ãã®é¢æ°ã¯ããããŸã
ãæãã¡ã¢ãªã®æææš© ã©ãã«ãç¡æã«ãªããŸãã ãã©ã° äžãã
ç¶æ op ã®ãop_flagsãã® XNUMX ãããã
If o null ã®å Žåãç¶æ op ãè¿ãããŸãã ãã以å€ã®å Žåãç¶æ æŒç®ã¯æ¬¡ã®ããã«çµåãããŸãã o
"lineseq" ãªã¹ãæŒç®ã«å€æãããè¿ãããŸãã o ãã®é¢æ°ã«ãã£ãŠæ¶è²»ããã
è¿ããã op ããªãŒã®äžéšã«ãªããŸãã
OP * newSTATEOP(I32 ãã©ã°ãchar *ã©ãã«ãOP *o)
newSVOP åã蟌㿠SV ãå«ãããããã¿ã€ãã® op ãæ§ç¯ããã§ãã¯ããè¿ããŸãã
type ãªãã³ãŒãã§ãã ãã©ã° XNUMX ãããã®ãop_flagsããäžããŸãã sv SVãäžãã
opã«åã蟌ã¿ãŸãã ãã®é¢æ°ã¯ããã®é¢æ°ãžã® XNUMX ã€ã®åç §ã®æææš©ãååŸããŸãã
OP * newSVOP(I32 ã¿ã€ããI32 ãã©ã°ãSV *sv)
newUNOP ä»»æã®åé åã®æŒç®ãæ§ç¯ãæ€æ»ããè¿ããŸãã type ãªãã³ãŒãã§ãã
ãã©ã° ãOPf_KIDSããèšå®ãããããšãé€ãããop_flagsãã® XNUMX ããããæå®ããŸãã
å¿ èŠã«å¿ããŠèªåçã«ãXNUMX ãããäžã«ã·ããããŠã
ãop_privateãããã ããå€ 1 ã®ããããèªåçã«èšå®ãããŸãã æåã®
åé æŒç®ã®çŽæ¥ã®åãšãªããªãã·ã§ã³ã®æŒç®ãæå®ããŸãã ããã¯ã«ãã£ãŠæ¶è²»ãããŸã
ãã®é¢æ°ã¯ãæ§ç¯ããã op ããªãŒã®äžéšã«ãªããŸãã
OP * newUNOP(I32 ã¿ã€ããI32 ãã©ã°ãOP *first)
æ°ããUNOP_AUX
ãnewUNOPãã«äŒŒãŠããŸããã代ããã« op_aux ã䜿çšã㊠UNOP_AUX æ§é äœãäœæããŸãã
aux ã«åæåãããŸãã
OP* newUNOP_AUX(I32 ã¿ã€ããI32 ãã©ã°ãOP* æåã
UNOP_AUX_item *aux)
æ°ããWHENOP
ãwhenããããã¯ãè¡šã op ããªãŒãæ§ç¯ããã§ãã¯ããè¿ããŸãã æ¡ä»¶
ãã¹ãåŒãæäŸãã ã³ããæ°åãŠã£ã«ã¹(COVID-XNUMX)ãã¡ã³ã¿ã«ãã«ã¹ã®åŽ©å£ãé¿ããçºã® å®è¡ããããããã¯ãæäŸããŸã
ãã¹ãã true ãšè©äŸ¡ãããå Žåã ãããã¯ãã®é¢æ°ã«ãã£ãŠæ¶è²»ãããäžéšã«ãªããŸã
æ§ç¯ããã op ããªãŒã®ã æ¡ä»¶ å€ãã®å ŽåãDWIM çã«è§£éãããŸãã
$_ ãšã®æ¯èŒããããã©ã«ãããããã¯ãçæããå Žå㯠null ã«ããããšãã§ããŸãã
OP * newWHENOP(OP *cond, OP *block)
newWILEOP
ãwhileãã«ãŒããè¡šã op ããªãŒãæ§ç¯ããã§ãã¯ããè¿ããŸãã ããã¯
ééçŽã«ãŒãããæåŸãã§ã«ãŒãããæããããšãã§ããæ§é ãšãªã£ãŠããã
ã¿ãããªã
ã«ãŒã ã«ãŒãå ã§äœ¿çšããããªãã·ã§ã³ã®äºåæ§ç¯ããããenterloopãæŒç®åã§ãã ããããã
null ã®å Žåãé©åãªæäœãèªåçã«æ§ç¯ãããŸãã åŒ ãäŸçµŠããŸã
ã«ãŒãã®å¶åŸ¡åŒã ã³ããæ°åãŠã£ã«ã¹(COVID-XNUMX)ãã¡ã³ã¿ã«ãã«ã¹ã®åŽ©å£ãé¿ããçºã® ã«ãŒãã®æ¬äœãæäŸãã CONT
ãªãã·ã§ã³ã§ãæ¬äœã®åŸåãšããŠåäœãããç¶ç¶ããããã¯ãæäŸããŸãã
ãããã® optree å ¥åã¯ãã¹ãŠãã®é¢æ°ã«ãã£ãŠæ¶è²»ããã
op ããªãŒãæ§ç¯ããŸããã
ãã©ã° ãleaveloopãop ã®ãop_flagsãã® XNUMX ããããäžããäžã«ã·ããããŸãã
XNUMX ãããããleaveloopãop ã®ãop_privateãã® XNUMX ãããããã ãã(
ã©ã¡ãã®å Žåã) äžéšã®ãããã¯èªåçã«èšå®ãããŸãã ãããã°å¯èœ çŸåšã¯æªäœ¿çšã§ã
ãããŠåžžã« 1 ã§ããå¿ èŠããããŸãã ç§ãæã£ãŠããŸã true ãšããŠæå®ãããšãã«ãŒãæ¬äœã匷å¶çã«
ç¬èªã®ã¹ã³ãŒãã«å«ããããšãã§ããŸãã
OP * newWHILEOP(I32 ãã©ã°ãI32 ãããã°å¯èœã
LOOP *ã«ãŒããOP *exprãOP *ãããã¯ã
OP *ç¶ããI32 has_my)
ãªãããªãŒ æäœ æ©èœ
alloccopstash
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
ãã®é¢æ°ã¯ã¹ã¬ãã ãã«ãã§ã®ã¿äœ¿çšå¯èœã§ããšã³ããªã
æž¡ãããã¹ã¿ãã·ã¥ã®ãPL_stashpadãã
PADOFFSET alloccopstash(HV *hv)
ãããã¯ãšã³ã
ã³ã³ãã€ã«æã®ã¹ã³ãŒãçµäºãåŠçããŸãã åº ã«ãã£ãŠè¿ãããã»ãŒãã¹ã¿ã㯠ã€ã³ããã¯ã¹ã§ãã
ãblock_startããããã³ seq ãããã¯ã®æ¬äœã§ãã ãããããããã¯ãè¿ããŸã
å€æŽãããŸããã
OP * block_end(I32 ããã¢ãOP *seq)
ãããã¯ã¹ã¿ãŒã
ã³ã³ãã€ã«æã®ã¹ã³ãŒããšã³ããªãåŠçããŸãã ãããã¯çµäºæã«ãã³ãã埩å ãããããã«æé ããŸãã
ãŸããåå¥å€æ°ã®ã¹ã³ãŒããæ£ããããããã«ããã ã·ãŒã±ã³ã¹çªå·ãåŠçããŸãã
ãblock_endãã§äœ¿çšããã»ãŒãã¹ã¿ã㯠ã€ã³ããã¯ã¹ãè¿ããŸãã
int block_start(int full)
ck_entersub_args_list
ãentersubãop ããªãŒã®åŒæ°éšåã®ããã©ã«ãã®ä¿®æ£ãå®è¡ããŸãã ãã
ãªã¹ã ã³ã³ããã¹ããååŒæ°æäœã«é©çšããããšã§æ§æãããŸãã ããã¯
ã&ãã®ããŒã¯ãä»ããåŒã³åºããã¡ãœããåŒã³åºãããŸãã¯åŒã³åºãã§äœ¿çšãããæšæºåŠç
ãµãã«ãŒãã³åç §ããŸãã¯åŒã³åºãå ãã¢ã¯ã»ã¹ã§ããªããã®ä»ã®åŒã³åºããä»ããŠ
ã³ã³ãã€ã«æããŸãã¯åŒã³åºãå ã«ãããã¿ã€ãããªãåŒã³åºãã§èå¥ãããŸãã
OP * ck_entersub_args_list(OP *entersubop)
ck_entersub_args_proto
ã«åºã¥ããŠãentersubãop ããªãŒã®åŒæ°éšåã®ä¿®æ£ãå®è¡ããŸãã
ãµãã«ãŒãã³ã®ãããã¿ã€ãã ããã«ãããåŒæ° ops ã«æ¬¡ã®ãããªããŸããŸãªå€æŽãå ããããŸãã
ãrefgenãops ã®æ¿å ¥ãŸã§ã³ã³ããã¹ããé©çšããçªå·ãš
ãããã¿ã€ãã«ãã£ãŠæ瀺ãããåŒæ°ã®æ§æã¿ã€ãã ãããæšæºã§ã
ãµãã«ãŒãã³åŒã³åºãã§äœ¿çšãããåŠçãã&ãã®ããŒã¯ãä»ããŠããŸãããåŒã³åºãå ã¯æ¬¡ã®ãšããã§ãã
ã³ã³ãã€ã«æã«èå¥ããããããã¿ã€ãããããŸãã
ãããã¹ã åŒã³åºãã«é©çšããããµãã«ãŒãã³ ãããã¿ã€ããæäŸããŸãã ããã¯ãããããã
éåžžã®å®çŸ©ãããã¹ã«ã©ãŒãæååå€ã䜿çšãããŸãã ãããã¯ã
䟿å®äžããµãã«ãŒãã³ ãªããžã§ã¯ã (ãSV*ãã«ãã£ã¹ãããããCV*ã) ã§ããå¯èœæ§ããããŸãã
ããã«ã¯ãããã¿ã€ãããããŸãã æäŸããããããã¿ã€ãã¯ãã©ã®ãããªåœ¢åŒã§ãã£ãŠãã
op ããªãŒã«ãã£ãŠåç §ãããå®éã®åŒã³åºãå ãšäžèŽããããã«ããŸãã
åŒæ° ops ããããã¿ã€ããšäžèŽããªãå Žåãããšãã°
åãå ¥ããããªãæ°ã®åŒæ°ãããå Žåã§ããæå¹ãª op ããªãŒãè¿ãããŸãã ãšã©ãŒ
ããŒãµãŒã®ç¶æ ã«åæ ãããéåžžã¯æ¬¡ã®æç¹ã§ XNUMX ã€ã®äŸå€ãçºçããŸãã
çºçãããã¹ãŠã®ã³ã³ãã€ã« ãšã©ãŒãã«ããŒããæäžäœã¬ãã«ã®è§£æã ã§
ãšã©ãŒ ã¡ãã»ãŒãžã§ã¯ãåŒã³åºãå ã¯ã ãªãã
ãã©ã¡ãŒã¿ã«äžèŽããæåã®ããã€ã¹ã®ãªã¢ãŒãã³ã³ãããŒã« URL ãè¿ããŸãã
OP * ck_entersub_args_proto(OP *entersubop,
GV *namegvãSV *protosv)
ck_entersub_args_proto_or_list
次ã®ããããã«åºã¥ããŠããentersubãop ããªãŒã®åŒæ°éšåã®ä¿®æ£ãå®è¡ããŸãã
ãµãã«ãŒãã³ ãããã¿ã€ãããŸãã¯ããã©ã«ãã®ãªã¹ã ã³ã³ããã¹ãåŠçã䜿çšããŸãã ããã¯
ãµãã«ãŒãã³åŒã³åºãã§äœ¿çšãããæšæºåŠçãã&ãã®ããŒã¯ãä»ããŠããŸããã
åŒã³åºãå ã¯ã³ã³ãã€ã«æã«èå¥ã§ããŸãã
ãããã¹ã åŒã³åºãã«é©çšããããµãã«ãŒãã³ ãããã¿ã€ããæå®ãããããŸãã¯ããã瀺ããŸãã
ååããªããšããããšã ããã¯éåžžã®ã¹ã«ã©ãŒã§ããå¯èœæ§ããããŸãããã®å Žåã
å®çŸ©ãããŠããå Žåã¯æååå€ããããã¿ã€ããšããŠäœ¿çšãããæªå®çŸ©ã®å Žåã¯æååå€ããããã¿ã€ããšããŠäœ¿çšãããŸãã
ãã®å Žåããããã¿ã€ãã¯ååšããŸããã ãããã¯ã䟿å®äžã
ãµãã«ãŒãã³ ãªããžã§ã¯ã (ãSV*ãã«ãã£ã¹ãããããCV*ã)ããã®ãããã¿ã€ã
ããå Žåã¯äœ¿çšãããŸãã æäŸããããããã¿ã€ã (ãŸãã¯ãã®æ¬ åŠ)ã
ã©ã¡ãã®åœ¢åŒã§ãã£ãŠããæäœã«ãã£ãŠåç §ãããå®éã®åŒã³åºãå ãšäžèŽããå¿ èŠã¯ãããŸããã
ããªãŒã
åŒæ° ops ããããã¿ã€ããšäžèŽããªãå Žåãããšãã°
åãå ¥ããããªãæ°ã®åŒæ°ãããå Žåã§ããæå¹ãª op ããªãŒãè¿ãããŸãã ãšã©ãŒ
ããŒãµãŒã®ç¶æ ã«åæ ãããéåžžã¯æ¬¡ã®æç¹ã§ XNUMX ã€ã®äŸå€ãçºçããŸãã
çºçãããã¹ãŠã®ã³ã³ãã€ã« ãšã©ãŒãã«ããŒããæäžäœã¬ãã«ã®è§£æã ã§
ãšã©ãŒ ã¡ãã»ãŒãžã§ã¯ãåŒã³åºãå ã¯ã ãªãã
ãã©ã¡ãŒã¿ã«äžèŽããæåã®ããã€ã¹ã®ãªã¢ãŒãã³ã³ãããŒã« URL ãè¿ããŸãã
OP * ck_entersub_args_proto_or_list(OP *entersubop,
GV *namegvã
SV *protosv)
cv_const_sv
ãcvããã€ã³ã©ã€ã³å±éã«é©ããå®æ°ãµãã®å Žåãå®æ°å€ãè¿ããŸãã
ãµãããè¿ãããŸããã ãã以å€ã®å Žåã¯ãNULL ãè¿ããŸãã
å®æ°ãµãã«ãŒãã³ã¯ããnewCONSTSUBãã䜿çšããŠäœæãããããå®æ°ãã§èª¬æãããŠããããã«äœæã§ããŸãã
perlsub ã®é¢æ°ãã
SV* cv_const_sv(const CV *const cv)
cv_get_call_checker
ãžã®åŒã³åºããä¿®æ£ããããã«äœ¿çšãããé¢æ°ãååŸããŸãã cvã å ·äœçã«ã¯ã
é¢æ°ã¯ãµãã«ãŒãã³åŒã³åºãã®ãentersubãop ããªãŒã«é©çšãããããŒã¯ãããŠããŸããã
ã&ãã䜿çšãããšãã³ã³ãã€ã«æã«åŒã³åºãå ã次ã®ããã«èå¥ã§ããŸãã cv.
C ã¬ãã«ã®é¢æ°ãã€ã³ã¿ã¯æ¬¡ã®ããã«è¿ãããŸãã *ckfun_pããã® SV åŒæ°ã¯æ¬¡ã®ãšããã§ãã
æ»ã£ãŠãã *ckobj_pã ãã®é¢æ°ã¯æ¬¡ã®æ¹æ³ã§åŒã³åºãããããã«èšèšãããŠããŸãã
entersubop = (*ckfun_p)(aTHX_ entersubop, namegv, (*ckobj_p));
ãã®é話ã§ã¯ã ãšã³ã¿ãŒãµããã ãentersubãæŒç®åãžã®ãã€ã³ã¿ã§ãã眮æãããå¯èœæ§ããããŸãã
ãã§ãã¯æ©èœã«ããã ãªãã 䜿çšããå¿ èŠãããååãæäŸãã GV ã§ã
å¿ èŠã«å¿ããŠããã§ãã¯é¢æ°ã«ãã£ãŠãentersubããªãã¬ãŒã·ã§ã³ã®åŒã³åºãå ãåç §ããŸãã
蚺æãçºè¡ããŸãã æšæºå€ã®ãã§ãã¯æ©èœãé©çšããããšãèš±å¯ãããŠããŸã
å¥ã®ãµãã«ãŒãã³ã®åŒã³åºããã¡ãœããåŒã³åºããªã©ã®ç¶æ³ã
ããã©ã«ãã§ã¯ãé¢æ°ã¯ Perl_ck_entersub_args_proto_or_list ã§ãããSV
ãã©ã¡ãŒã¿ã¯ cv èªäœã ããã«ãããæšæºã®ãããã¿ã€ãåŠçãå®è£ ãããŸãã ããã
ç¹å®ã®ãµãã«ãŒãã³ã«ã€ããŠã¯ããcv_set_call_checkerãã«ãã£ãŠå€æŽãããŸãã
void cv_get_call_checker(CV *cv,
Perl_call_checker *ckfun_p,
SV **ckobj_p)
cv_set_call_checker
ãcv_set_call_checker_flagsãã®å ã®åœ¢åŒãããã«æž¡ãããŸãã
äžäœäºææ§ã®ããã®ãCALL_CHECKER_REQUIRE_GVããã©ã°ã
void cv_set_call_checker(CV *cv,
Perl_call_checker ckfunã
SV *ckobj)
cv_set_call_checker_flags
ãžã®é話ã解決ããããã«äœ¿çšãããé¢æ°ãèšå®ããŸãã cvã å ·äœçã«ã¯ã
é¢æ°ã¯ãµãã«ãŒãã³åŒã³åºãã®ãentersubãop ããªãŒã«é©çšãããããŒã¯ãããŠããŸãã
ã&ãã䜿çšãããšãã³ã³ãã€ã«æã«åŒã³åºãå ã次ã®ããã«èå¥ã§ããŸãã cv.
C ã¬ãã«ã®é¢æ°ãã€ã³ã¿ã¯æ¬¡ã®åœ¢åŒã§æäŸãããŸãã ããµãããã® SV åŒæ°ã¯æ¬¡ã®ãšããã§ãã
ã§äŸçµŠããã CKOBJã é¢æ°ã¯æ¬¡ã®ããã«å®çŸ©ããå¿ èŠããããŸãã
STATIC OP * ckfun(pTHX_ OP *op, GV *namegv, SV *ckobj)
ããã¯æ¬¡ã®æ¹æ³ã§åŒã³åºãããšãç®çãšããŠããŸãã
entersubop = ckfun(aTHX_ entersubop, namegv, ckobj);
ãã®é話ã§ã¯ã ãšã³ã¿ãŒãµããã ãentersubãæŒç®åãžã®ãã€ã³ã¿ã§ãã眮æãããå¯èœæ§ããããŸãã
ãã§ãã¯æ©èœã«ããã ãªãã ã䜿çšããååãæå®ããŸãã
äœããçºè¡ããå¿ èŠãããå Žåã¯ããentersubããªãã¬ãŒã·ã§ã³ã®åŒã³åºãå ãåç §ããé¢æ°ããã§ãã¯ããŸãã
蚺æã æšæºå€ã®ãã§ãã¯æ©èœãé©çšããããšãèš±å¯ãããŠããŸã
å¥ã®ãµãã«ãŒãã³ã®åŒã³åºããã¡ãœããåŒã³åºããªã©ã®ç¶æ³ã
ãªãã å®éã«ã¯ GV ã§ã¯ãªãå¯èœæ§ããããŸãã å¹çæ§ãé«ããããã«ãPerl 㯠CV ãŸãã¯ä»ã® SV ãæž¡ãå ŽåããããŸãã
ãã®ä»£ããã æž¡ããããã®ã¯ãã¹ãŠãcv_nameãã®æåã®åŒæ°ãšããŠäœ¿çšã§ããŸãã ããªã
"CALL_CHECKER_REQUIRE_GV" ã ãã©ã°.
ç¹å®ã® CV ã®çŸåšã®èšå®ã¯ããcv_get_call_checkerãã§ååŸã§ããŸãã
void cv_set_call_checker_flags(
CV *cvãPerl_call_checker ckfunãSV *ckobjã
U32 ãã©ã°
)
ãªã³ã¯ãªã¹ã
optree ã®ã«ãŒããæå®ããŠããop_nextãã䜿çšããŠå®è¡é åºã«åŸã£ãŠããªãŒããªã³ã¯ããŸãã
ãã€ã³ã¿ãååŸããå®è¡ãããæåã®æäœãè¿ããŸãã ããããã§ã«è¡ãããŠããå Žåã¯ã
ããçŽãã¯è¡ããããão->op_nextããè¿ãããŸãã ão->op_nextãããŸã ãªãå Žå
ã»ããã o å°ãªããšããUNOPãã§ããå¿ èŠããããŸãã
OP* ãªã³ã¯ãªã¹ã(OP *o)
æ°ããã³ã³ã¹ã¿
ãnewCONSTSUB_flagsããåç §ããŠãã ããã
CV* newCONSTSUB(HV* ã¹ã¿ãã·ã¥ãconst char* åãSV* sv)
newCONSTSUB_flags
Perlãsub FOO () { 123 }ãã«çžåœããå®æ° sub ãäœæããŸãã
ã³ã³ãã€ã«æã®ã€ã³ã©ã€ã³åçšã
çŸåšããflagsãã«æå¹ãªå€ã¯ SVf_UTF8 ã®ã¿ã§ãã
æ°ããäœæããããµãã«ãŒãã³ã¯ãSV ã§æž¡ããããžã®åç §ã®æææš©ãååŸããŸãã
SV ã« NULL ãæž¡ããšããsub BAR () {}ããšåçã®å®æ° sub ãäœæãããŸãã
ãã¹ãã©ã¯ã¿ãŒãšããŠäœ¿çšãããå Žåã¯åŒã³åºãããŸããããåŒã³åºãã®ãªãŒããŒããããæå¶ãããŸãã
ããªãŒãããŒããã«ããŸãã (ãã ãããã®ãã©ãŒã ã¯ã³ã³ãã€ã«æã«ã€ã³ã©ã€ã³åã§ããŸããã)
CV* newCONSTSUB_flags(HV* ã¹ã¿ãã·ã¥ãconst char* åã
STRLEN lenãU32 ãã©ã°ãSV* sv)
newXS XSUB ã Perl ãµãã«ãŒãã³ãšããŠæ¥ç¶ããããã«ãxsubppãã«ãã£ãŠäœ¿çšãããŸãã ãã¡ã€ã«å éçã§ããå¿ èŠããã
ã¹ãã¬ãŒãžãšããŠçŽæ¥äœ¿çšãããããã CvFILE()ãã³ããŒã¯äœæãããŸããã
OpHAS_SIBLING
o ã«å åŒãããå Žå㯠true ãè¿ããŸã
bool OpHAS_SIBLING(OP *o)
OpLASTSIB_set
o ã«ã¯ãã以äžå åŒãããªããã®ãšããŠããŒã¯ãããŸãã ãPERL_OP_PARENTããã«ãã§ã¯ão ãããŒã¯ããŸã
æå®ããã芪ãæã€ã ãOpMORESIB_setãããã³ãOpMAYBESIB_setããåç §ããŠãã ããã ã®ããã«
äžäœã¬ãã«ã®ã€ã³ã¿ãŒãã§ã€ã¹ã«ã€ããŠã¯ããop_sibling_spliceããåç §ããŠãã ããã
void OpLASTSIB_set(OP *o, OP *parent)
OpMAYBESIB_set
sib ãæå¹ãã©ããã«å¿ããŠãæ¡ä»¶ä»ãã§ãOpMORESIB_setããŸãã¯ãOpLASTSIB_setããå®è¡ããŸãã
null ã§ã¯ãªãã äžäœã¬ãã«ã®ã€ã³ã¿ãŒãã§ã€ã¹ã«ã€ããŠã¯ããop_sibling_spliceããåç §ããŠãã ããã
void OpMAYBESIB_set(OP *o, OP *sib, OP *parent)
OpMORESIB_set
o ã®å åŒããŒã以å€ã®å€ sib ã«èšå®ããŸãã ãOpLASTSIB_setãããã³ãOpLASTSIB_setããåç §ããŠãã ããã
ãOpMAYBESIB_setãã äžäœã¬ãã«ã®ã€ã³ã¿ãŒãã§ã€ã¹ã«ã€ããŠã¯ããop_sibling_spliceããåç §ããŠãã ããã
void OpMORESIB_set(OP *o, OP *sib)
å åŒ
o ã®å åŒãè¿ããŸããå åŒããªãå Žå㯠NULL ãè¿ããŸãã
OP* OpSIBLING(OP *o)
op_append_elem
ãªã¹ãåã®æäœå ã«çŽæ¥å«ãŸããæäœã®ãªã¹ãã«é ç®ãè¿œå ããŸãã
é·ããªã£ããªã¹ããè¿ããŸãã æåã® ã¯ãªã¹ãåã®æŒç®ã§ããã last ããã¹ãã§ã
ãªã¹ãã«è¿œå ããŸãã ãªãã¿ã€ã ãªã¹ãã®ç®çã®ãªãã³ãŒããæå®ããŸãã ãã æåã®
ã¯ãŸã æ£ããã¿ã€ãã®ãªã¹ãã§ã¯ãªããããé©åãªã¿ã€ãã®ãªã¹ãã«ã¢ããã°ã¬ãŒããããŸãã ã©ã¡ããã®å Žå
æåã® or last ã null ã®å Žåãããäžæ¹ã¯å€æŽãããã«è¿ãããŸãã
OP * op_append_elem(I32 optype, OP *first, OP *last)
op_append_list
XNUMX ã€ã®ãªã¹ãåæäœå ã«çŽæ¥å«ãŸããæäœã®ãªã¹ããé£çµããŸãã
çµåããããªã¹ããè¿ããŸãã æåã® ãš last é£çµãããªã¹ãåã®æŒç®ã§ãã
ãªãã¿ã€ã ãªã¹ãã®ç®çã®ãªãã³ãŒããæå®ããŸãã ã©ã¡ããã®å Žå æåã® or last ã§ã¯ãããŸãã
ãã§ã«æ£ããã¿ã€ãã®ãªã¹ããããå Žåã¯ããªã¹ãã XNUMX ã€ã«ã¢ããã°ã¬ãŒããããŸãã ã©ã¡ããã®å Žå æåã®
or last ã null ã®å Žåãããäžæ¹ã¯å€æŽãããã«è¿ãããŸãã
OP * op_append_list(I32 optype, OP *first, OP *last)
OP_ã¯ã©ã¹
æäŸããã OP ã®ã¯ã©ã¹ãã€ãŸããã©ã® *OP æ§é äœã䜿çšãããŠããããè¿ããŸãã
ã³ã¢æäœã®å Žåãããã¯çŸåš PL_opargs ããæ å ±ãååŸããŸãããPL_opargs ã¯ååŸããŸããã
䜿çšãããã¿ã€ããåžžã«æ£ç¢ºã«åæ ããŸãã ã«ã¹ã¿ã æäœã®å Žåãåã¯æ¬¡ããè¿ãããŸãã
ç»é²ãæ£ç¢ºã§ããããšã確èªããã®ã¯ã¬ãžã¹ããªãŒã®è²¬ä»»ã§ãã ã®
è¿ãããå€ã¯ãop.h ã® OA_* å®æ°ã® XNUMX ã€ã«ãªããŸãã
U32 OP_CLASS(OP *o)
op_contextualize
åŒãè¡šã op ããªãŒã«æ§æã³ã³ããã¹ããé©çšããŸãã o OPã§ã
æšãš ã³ã³ããã¹ã ãæå®ããã«ã¯ããG_SCALARãããG_ARRAYãããŸãã¯ãG_VOIDãã§ããå¿ èŠããããŸãã
é©çšããã³ã³ããã¹ãã å€æŽããã op ããªãŒãè¿ãããŸãã
OP * op_contextualize(OP *o, I32 ã³ã³ããã¹ã)
op_convert_list
å€æãã o ãŸã ãªã¹ãæŒç®ã§ãªãå Žåã¯ãªã¹ãæŒç®ã«å€æãã
æå®ã® typeããã§ãã¯é¢æ°ãåŒã³åºããå¿ èŠã«å¿ããŠã¿ãŒã²ãããå²ãåœãŠãŸãã
ãããŠæãç³ã¿å®æ°ã
ãªã¹ãåã®æäœã¯éåžžããnewLISTOPããä»ããŠäžåºŠã« XNUMX ã€ãã€æ§ç¯ãããŸãã
ãop_prepend_elemããšãop_append_elemãã ãããŠæåŸã«ããã¯ã«æž¡ãããŸã
ãop_convert_listãã䜿çšããŠæ£ããã¿ã€ãã«ããŸãã
OP * op_convert_list(I32 ã¿ã€ããI32 ãã©ã°ãOP *o)
OP_DESC æäŸããã OP ã®çã説æãè¿ããŸãã
const char * OP_DESC(OP *o)
op_free opã解æŸããŸãã ããã¯ãop ãã©ã® optree ããããªã³ã¯ãããŠããªãå Žåã«ã®ã¿äœ¿çšããŠãã ããã
void op_free(OP *o)
op_linklist
ãã®æ©èœã¯ãLINKLISTããã¯ãã®å®è£ ã§ãã ããã§ãã£ãŠã¯ãªããŸãã
çŽæ¥é»è©±ããã
OP* op_linklist(OP *o)
op_lvalue
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
lvalue (ãå€æŽå¯èœã) ã³ã³ããã¹ãã op ãšãã®åã«äŒæããŸãã type
ã³ã³ããã¹ã ã¿ã€ããè¡šããŸãã倧ãŸãã«ãå®è¡ããæäœã®ã¿ã€ãã«åºã¥ããŠããŸãã
"local()" 㯠OP_NULL ã§è¡šãããŸãããop ã¿ã€ãããªãããå€æŽããŸãã
ç¬èªã®ãã®ã§ã (巊蟺å€æŒç®ã®ãã©ã°ã«ãã£ãŠéç¥ãããŸã)ã
ãã®é¢æ°ã¯ãã$x+1ããªã©ã®å€æŽã§ããªããã®ãæ€åºãã
圌ãã«ãšã£ãŠã¯ééãã§ãã ããšãã°ãã$x+1 = 2ããšãããšãop ã§åŒã³åºãããŸãã
ã¿ã€ã OP_ADD ãš OP_SASSIGN ã®ãtypeãåŒæ°ã
ãŸãã巊蟺å€ã³ã³ããã¹ãã§ç¹å¥ã«åäœããå¿ èŠããããã®ã«ãã©ã°ãç«ãŠãŸãã
ã$$x = 5ãã¯ã$x å ã®åç §ãæå¹ã«ããå¿ èŠãããå¯èœæ§ããããŸãã
OP * op_lvalue(OP *oãI32 ã¿ã€ã)
OP_NAME æäŸããã OP ã®ååãè¿ããŸãã ã³ã¢æäœã®å Žåãããã¯ååãæ€çŽ¢ããŸãã
op_type; op_ppaddr ããã®ã«ã¹ã¿ã op ã®å Žåã
const char * OP_NAME(OP *o)
op_null op ãäžèŠã«ãªã£ããšãã«ãop ãç¡å¹åããŸãããäŸç¶ãšããŠä»ã®ãã®ãããªã³ã¯ãããŠããŸãã
äœæŠã
void op_null(OP *o)
op_parent
o ã«èŠªãããå Žåão ã®èŠª OP ãè¿ããŸãã ãã以å€ã®å Žå㯠NULL ãè¿ããŸãã ãã
ãã®é¢æ°ã¯ãã-DPERL_OP_PARENTãã§ãã«ãããã Perl ã§ã®ã¿äœ¿çšã§ããŸãã
OP* op_parent(OP *o)
op_prepend_elem
ãªã¹ãåã®æäœå ã«çŽæ¥å«ãŸããæäœã®ãªã¹ãã«é ç®ãè¿œå ããŸãã
é·ããªã£ããªã¹ããè¿ããŸãã æåã® ãªã¹ãã®å é ã«è¿œå ããæäœã§ãã last
ã¯ãªã¹ãåã®æŒç®ã§ãã ãªãã¿ã€ã ãªã¹ãã®ç®çã®ãªãã³ãŒããæå®ããŸãã ãã last
ã¯ãŸã æ£ããã¿ã€ãã®ãªã¹ãã§ã¯ãªããããé©åãªã¿ã€ãã®ãªã¹ãã«ã¢ããã°ã¬ãŒããããŸãã ã©ã¡ããã®å Žå
æåã® or last ã null ã®å Žåãããäžæ¹ã¯å€æŽãããã«è¿ãããŸãã
OP * op_prepend_elem(I32 optype, OP *first, OP *last)
op_scope
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
ããã€ãã®è¿œå ã® op 㧠op ããªãŒãã©ããããå®è¡æã«åçã¹ã³ãŒããæå¹ã«ãªãããã«ããŸãã
ãäœæãããŸãã å ã®æäœã¯æ°ããåçã¹ã³ãŒãã§å®è¡ããããã®åŸã
æ£åžžã«çµäºãããšãã¹ã³ãŒãã¯å·»ãæ»ãããŸãã è¿œå ã®äœæŠ
åçã¹ã³ãŒãã®äœæãšå·»ãæ»ãã«äœ¿çšãããã®ã¯ãéåžžã¯ãenterã/ãleaveãã§ãã
ãã¢ã§ãããæäœãååã«åçŽã§ããå Žåã¯ã代ããã«ãã¹ã³ãŒããæäœã䜿çšããããšãã§ããŸãã
å®å šãªåçã¹ã³ãŒãæ§é ãå¿ èŠã§ãã
OP * op_scope(OP *o)
op_sibling_splice
op_sibling ã®æ¢åã®ãã§ãŒã³ã®æ§é ãç·šéããããã®äžè¬çãªé¢æ°
ããŒãã Perl ã¬ãã«ããé¡æšãããš ã¹ãã©ã€ã¹ïŒïŒ æ©èœã䜿çšãããšãåé€ã§ããŸã
XNUMX å以äžã®é£ç¶ããããŒãããããã XNUMX å以äžã®ç°ãªãããŒãã«çœ®ãæããŸãã
芪ããŒãäžã§å¿ èŠãª op_first/op_last ããŠã¹ããŒãã³ã°ãå®è¡ãã
åã«å¯Ÿãã op_sibling æäœã æåŸã«åé€ãããããŒãã¯æ¬¡ã®ããã«ããŒã¯ãããŸãã
op_sibling/op_sibparent ãŸã㯠op_moresib ãã£ãŒã«ãã次ã®ããã«æŽæ°ããããšã§ãæåŸã®ããŒããšããŠ
é©åãªã
op_next ã¯æäœããããããŒãã解æŸãããªãããšã«æ³šæããŠãã ããã ããã
çºä¿¡è ã®è²¬ä»»ã ãŸãã空ã®ãªã¹ãæŒç®åã¯äœæãããŸããã
ãªã¹ããªã©ã 次ã®ãããªé«ã¬ãã«ã®é¢æ°ã䜿çšããŸã op_append_elem() ãã®ããã«ã
parent ã¯å åŒãã§ãŒã³ã®èŠªããŒãã§ãã 次ã®å Žå㯠NULL ãšããŠæž¡ãããå¯èœæ§ããããŸãã
ã¹ãã©ã€ã·ã³ã°ã¯ããã§ãŒã³å ã®æåãŸãã¯æåŸã®æäœã«ã¯åœ±é¿ããŸããã
start ã¯ãã¹ãã©ã€ã¹ãããæåã®ããŒãã®åã®ããŒãã§ãã ããã«ç¶ãããŒã
ã¯åé€ããããã®åŸã« ops ãæ¿å ¥ãããŸãã NULL ã®å Žåãæåã®ããŒã
以éã¯åé€ãããå é ã«ããŒããæ¿å ¥ãããŸãã
del_count ã¯åé€ããããŒãã®æ°ã§ãã ãŒãã®å ŽåãããŒãã¯åé€ãããŸããã -1ã®å Žå
ãŸãã¯ãæ®ãã®åäŸã®æ°ä»¥äžã®å Žåãæ®ãã®åäŸã¯ãã¹ãŠ
åé€ãããŸããã
insert ã¯ãããŒãã®ä»£ããã«æ¿å ¥ãããããŒã ãã§ãŒã³ã®æåã®ããŒãã§ãã ãã
NULLãããŒãã¯æ¿å ¥ãããŸããã
åé€ãããæäœã®ãã§ãŒã³ã®å é ãè¿ãããããåé€ãããæäœããªãå Žå㯠NULL ãè¿ãããŸãã
äŸïŒ
ãªã¿ãŒã³åã®ã¢ã¯ã·ã§ã³
------ ----- ----- -------
PP
ã¹ãã©ã€ã¹(PãAã2ãXYZ) | | çŽå å
ABCD AXYZD
PP
ã¹ãã©ã€ã¹(P, NULL, 1, XY) | | ã
ABCD XYBCD
PP
ã¹ãã©ã€ã¹(P, NULL, 3, NULL) | | ABC
ABCD D
PP
ã¹ãã©ã€ã¹(P, B, 0, XY) | | ãã«
ABCDABXYCD
ãop_sibparentãããã³ãop_moresibãã®äžäœã¬ãã«ã®çŽæ¥æäœã«ã€ããŠã¯ããåç §ããŠãã ããã
ãOpMORESIB_setãããOpLASTSIB_setãããOpMAYBESIB_setãã
OP* op_sibling_splice(OP *芪, OP *éå§,
int del_countãOP* æ¿å ¥)
OP_TYPE_IS
æå®ããã OP ã NULL ãã€ã³ã¿ãŒã§ã¯ãªããæå®ãããåã§ããå Žåã« true ãè¿ããŸãã
ãã®ãã¯ãã®åŠå®ã§ãããOP_TYPE_ISNTãã䜿çšã§ããŸãã
ãOP_TYPE_IS_NNããšãOP_TYPE_ISNT_NNãã¯ãNULL ãã€ã³ã¿ã®ãã§ãã¯ãçç¥ããŸãã
bool OP_TYPE_IS(OP *o, ãªãã¿ã€ãã¿ã€ã)
OP_TYPE_IS_OR_WAS
æå®ããã OP ã NULL ãã€ã³ã¿ãŒã§ã¯ãªããæå®ãããåã§ããå Žåã« true ãè¿ããŸãã
ãŸãã¯ãã¿ã€ã OP_NULL ã® OP ã«çœ®ãæããããåã«äœ¿çšãããŠããŸããã
ãã®ãã¯ãã®åŠå®ã§ãããOP_TYPE_ISNT_AND_WASNTãã䜿çšã§ããŸãã
NULL ãçç¥ãããOP_TYPE_IS_OR_WAS_NNãããã³ãOP_TYPE_ISNT_AND_WASNT_NNã
ãã€ã³ã¿ãã§ãã¯ã
bool OP_TYPE_IS_OR_WAS(OP *o, Optype ã¿ã€ã)
rv2cv_op_cv
å®è¡æã«ãµãã«ãŒãã³ãèå¥ããããšãæåŸ ããã op ã調ã¹ãŸãã
ã³ã³ãã€ã«æã«ã©ã®ãµãã«ãŒãã³ãèå¥ããããå€æããããšããŸãã ããã¯
éåžžãPerl ã®ã³ã³ãã€ã«äžã«ããããã¿ã€ããäœæã§ãããã©ãããå€æããããã«äœ¿çšãããŸãã
é¢æ°åŒã³åºãã«é©çšãããŸãã CVOP èæ ®ãããŠãã op ã§ããéåžžã¯ãrv2cvãã§ã
OP. èå¥ããããµãã«ãŒãã³ãç¹å®ã§ããå Žåã¯ããã®ãµãã«ãŒãã³ãžã®ãã€ã³ã¿ãè¿ãããŸãã
éçã«ãå€æã§ããªãã£ãå Žå㯠null ãã€ã³ã¿ãè¿ãããŸãã
éçã«ã
çŸåšãRV ããrv2cvãã§ããå Žåããµãã«ãŒãã³ã¯éçã«èå¥ã§ããŸãã
æŒç®å¯Ÿè±¡ã¯ãé©åãªãgvããŸãã¯ãconstãæŒç®ã«ãã£ãŠæäŸãããŸãã ãgvããªãã¬ãŒã·ã§ã³ã¯
GV ã® CV ã¹ããããè£ çãããŠããå Žåã«é©ããŠããŸãã ãconstãæŒç®åã¯ã次ã®å Žåã«é©ããŠããŸãã
å®æ°å€ã¯ CV ãæã RV ã§ããå¿ èŠããããŸãã ãã®ããã»ã¹ã®è©³çŽ°ã¯å€æŽãããå¯èœæ§ããããŸã
Perl ã®å°æ¥ã®ããŒãžã§ã³ã§ã¯ã ãrv2cvãOP ã«ãOPpENTERSUB_AMPERããã©ã°ãããå Žå
èšå®ãããšããµãã«ãŒãã³ãéçã«èå¥ããè©Šã¿ã¯è¡ãããŸããããã®ãã©ã°ã¯
ãµãã«ãŒãã³åŒã³åºãã§ã³ã³ãã€ã«æããžãã¯ãæå¶ãã匷å¶çã«äœ¿çšããããã«äœ¿çšãããŸãã
ããã©ã«ãã®å®è¡æã®åäœã
If ãã©ã° ããããRV2CVOPCV_MARK_EARLYããèšå®ãããŠããå ŽåãGV ãåŠçããŸã
åç §ãå€æŽãããŸãã GV ãæ€æ»ããããã® CV ã¹ãããã
空ã®å ŽåããgvãOP ã«ã¯ãOPpEARLY_CVããã©ã°ãèšå®ãããŸãã æäœãããã§ãªãå Žå
æé©åã解é€ãããCV ã¹ãããã«ã¯åŸã§æ¬¡ã®ãããªãµãã«ãŒãã³ãè¿œå ãããŸãã
ãããã¿ã€ãã§ã¯ããã®ãã©ã°ã¯æçµçã«ããã§ãã¯ããã«ã¯æ©ãããŸãããšããèŠåãããªã¬ãŒããŸãã
ãããã¿ã€ã"ã
If ãã©ã° ããããRV2CVOPCV_RETURN_NAME_GVããèšå®ãããŠããå Žåã
ãµãã«ãŒãã³ãžã®ãã€ã³ã¿ã¯ãæãå€ãã®å€ãäžãã GV ãžã®ãã€ã³ã¿ãè¿ããŸãã
ãã®ã³ã³ããã¹ãã«ããããµãã«ãŒãã³ã®é©åãªååã éåžžãããã¯åãªã
ãµãã«ãŒãã³ã®ãCvGVãã§ãããå¿å (ãCvANONã) ãµãã«ãŒãã³ã®å Žåã¯ã
GV ãéããŠåç §ãããå Žåã¯ãåç §å GV ã«ãªããŸãã çµæã®ãGV*ãã¯æ¬¡ã®ããã«ãªããŸãã
ãCV*ãã«ãã£ã¹ãããŠè¿ããŸãã ååšããªãå Žåã¯ãéåžžã©ãã null ãã€ã³ã¿ãè¿ãããŸãã
éçã«æ±ºå®å¯èœãªãµãã«ãŒãã³ã
CV * rv2cv_op_cv(OP *cvopãU32 ãã©ã°)
ãã㯠㚠é梱
ããã¯ãªã¹ã
ãšã³ãžã³å®è£ ããã¯ïŒïŒ ããŒã«é¢æ°ã
void Packlist(SV *cat, const char *pat,
const char *ç¹èš±ãSV **beglistã
SV **ãšã³ããªã¹ã)
解åæåå
ãå®è£ ãããšã³ãžã³ unpackïŒïŒ ããŒã«é¢æ°ã
ãã®é¢æ°ã¯ããã³ãã¬ãŒã pat..patend ã䜿çšããŠãæåå s..strend ã解åããŠã
èŽåœç㪠SV ã®æ°ããã㯠Perl åŒæ° (@_) ã¹ã¿ãã¯ã«ããã·ã¥ãããŸã (ã€ãŸãã
ãã®åŒã³åºãã®åã«ãPUTBACKããçºè¡ããåŒã³åºãåŸã«ãSPAGAINããçºè¡ããå¿ èŠããããŸãã
é¢æ°ïŒã ããã·ã¥ãããèŠçŽ ã®æ°ãè¿ããŸãã
trend ãã€ã³ã¿ãš patend ãã€ã³ã¿ã¯ãæåŸã®ãã€ãã«ç¶ããã€ããæãå¿ èŠããããŸãã
åæååã®æåã
ãã®é¢æ°ã¯ Perl åŒæ°ã¹ã¿ãã¯äžã®å€ãè¿ããŸãããããã§ã¯ãããŸããã
ãã®ã¹ã¿ãã¯ãããã©ã¡ãŒã¿ãååŸããŸã (ãããã£ãŠãç¹ã«æ¬¡ã®ããšãè¡ãå¿ èŠã¯ãããŸãã)
ããšãã°ãcall_pvããšã¯ç°ãªããåŒã³åºãåã« PUSHMARK ãå¿ èŠã§ã)ã
I32 unpackstring(const char *pat,
const char *patendãconst char *sã
const char *ãã¬ã³ããU32 ãã©ã°)
ããã Rescale ããŒã¿ æ§é
CvPADLIST
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
CV ã§ã¯ãPADLIST ãæãããã« CvPADLIST(cv) ãèšå®ã§ããŸãã ããã¯å±¥æŽæžã§ã
ã¹ã¯ã©ããããããåå¥å€æ°ãšãªãã³ãŒããäžæçãã€ã¹ã¬ããããšã«ä¿åããŸãã
å€ã
ãããã®ç®çã®ããã«ãããã©ãŒããããã¯äžçš®ã®å±¥æŽæžã§ãã eval"" ãåæ§ã§ã (ããã§ãªãå Žåãé€ããŸã)
èªç±ã«åŒã³åºãããšãã§ããeval"" ã®å®è¡ãå®äºãããšåžžã«ç Žæ£ãããŸã)ã
å¿ é ãã¡ã€ã«ã¯ãå€éšã®åå¥ã¹ã³ãŒããæããªãåçŽãª eval ã§ãã
XSUB ã«ã¯ CvPADLIST ããããŸããã dXSTARG 㯠PL_curpad ããå€ããã§ããããŸãããããã¯
å®éã«ã¯åŒã³åºãåŽã®ãããã§ã (ãã®ã¹ãããã¯ãã¹ãŠã® entersub ã«ãã£ãŠå²ãåœãŠãããŸã)ã ããªãã§ãã ãã
CV ã XSUB (ãCvISXSUB()ãã§æ±ºå®) ã®å Žå㯠CvPADLIST ãååŸãŸãã¯èšå®ããŸããCvPADLIST
ã¹ããã㯠XSUB ã®å¥ã®å éšç®çã«åå©çšãããŸãã
PADLIST ã«ã¯ãããããæ ŒçŽããã C é åããããŸãã
PADLIST ã® 0 çªç®ã®ãšã³ããªã¯ããååããè¡šã PADNAMELIST ã§ãã
ããããåå¥ã®ãéçåæ å ±ãã§ãã ã®åã ã®èŠçŽ
PADNAMELIST 㯠PADNAME ã§ãã å°æ¥ã®ãªãã¡ã¯ã¿ãªã³ã°ã«ãããPADNAMELIST ãåæ¢ãããå¯èœæ§ããããŸãã
PADLIST ã®é åã«æ ŒçŽããããããããã«äŸåããªãã§ãã ããã ãããããªã¹ãåããåç §ããŠãã ããã
PADLIST ã® CvDEPTH çªç®ã®ãšã³ããªã¯ãã¹ã¿ã㯠ãã¬ãŒã ã§ãã PAD (AV) ã§ãã
CV ãžã®ååž°ã®æ·±ãã ãã¬ãŒã AV ã® 0 çªç®ã®ã¹ãããã¯ã次㮠AV ã§ãã
@_ã ä»ã®ãšã³ããªã¯ãå€æ°ãšæäœã¿ãŒã²ããã®ã¹ãã¬ãŒãžã§ãã
PADNAMELIST ãå埩ãããšããã¹ãŠã®å¯èœãªãããé ç®ãå埩ãããŸãã ãããã¹ããã
ã¿ãŒã²ãã (SVs_PADTMP) ãš GV ã®å Žåãæçµçã«ã¯ &PL_padname_undef "åå" ãæã¡ãŸããã
å®æ°ã®ã¹ãããã«ã¯ &PL_padname_const "åå" ããããŸã (ãååããåç §) Pad_alloc()ïŒã ããã
&PL_padname_undef ãš &PL_padname_const ã䜿çšãããã®ã¯å®è£ ã®è©³çŽ°ã§ã
å€æŽã®äºå®ã ãããããã¹ãããã«ã¯ãã!PadnamePV(name)ããšãPadnamePV(name)ãã䜿çšããŸãã
&& !PadnameLEN(name)" ãããããæå®ããŸãã
ç§/ç§ãã¡ã®å€æ°ã¹ãããã®ã¿ãæå¹ãªååãååŸããŸãã æ®ãã¯æäœã¿ãŒã²ãã/GV/å®æ°ã§ã
ãããã¯ã³ã³ãã€ã«æã«éçã«å²ãåœãŠãããã解決ãããŸãã ãããã«ã¯ãããŸãã
å®è¡æã« eval"" ãéã㊠Perl ã³ãŒãããæ€çŽ¢ã§ããååã
ç§/ç§ãã¡ã®å€æ°ãã©ã®ããã«ãªãããã ãååãã ãã§ã¯æ€çŽ¢ã§ããªãããã
ã³ã³ãã€ã«æã«å²ãåœãŠãããã€ã³ããã¯ã¹ (é垞㯠PL_op->op_targ ã«ãããŸã)ã
圌ãã®ããã«SVãšããååãç¡é§ã«ããã®ã¯æå³ããããŸããã
PADNAMELIST å ã®ãããåã«ã¯ãå€æ°ã®ååãä¿æãã PV ããããŸãã
COP_SEQ_RANGE_LOW ãã£ãŒã«ããš _HIGH ãã£ãŒã«ãã¯ãç¯å² (low+1..high ãå«ã) ã圢æããŸãã
cop_seq ååãæå¹ãªçªå·ã ã³ã³ãã€ã«äžã«ããããã®ãã£ãŒã«ãã¯
ããŸããŸãªæ®µéã瀺ãç¹å¥ãªå€ PERL_PADSEQ_INTRO ãä¿æããŸãã
COP_SEQ_RANGE_LOW _HIGH
----- -----
PERL_PADSEQ_INTRO 0 å€æ°ã¯ãŸã å°å ¥ãããŠããŸãã:
{ ç§ã® ($x
valid-seq# ã¹ã³ãŒãå ã® PERL_PADSEQ_INTRO å€æ°:
{ ç§ã® ($x)
valid-seq# valid-seq# ã¹ã³ãŒãã®ã³ã³ãã€ã«ãå®äºããŸãã:
{ ç§ã® ($x) }
åä»ãèªåœã®å ŽåãPadnameTYPE ã¯åã¹ã¿ãã·ã¥ãæããŸãã ãç§ãã¡ã®ãèªåœã«ã€ããŠã¯ã
PadnameOURSTASH ã¯ãé¢é£ä»ããããã°ããŒãã«ã®ã¹ã¿ãã·ã¥ãæããŸã (éè€ãã
åãããã±ãŒãžå ã®ãourã宣èšã¯æ€åºã§ããŸã)ã PadnameGEN ã¯æã
ã³ã³ãã€ã«äžã«äžä»£çªå·ãä¿åããããã«äœ¿çšãããŸãã
PadnameOUTER ããããåã«èšå®ãããŠããå Žåããã¬ãŒã AV ã®ã¹ãããã¯
ãå€éšãããã®èªåœãžã® REFCNT åç §ã ãã®ãããªãšã³ããªã¯æã ãããŸã
ãåœç©ããšåŒã°ããŸãã ãã®å Žåãååã«ã¯ãlowããšãhighãã¯äœ¿çšãããŸããã
cop_seq ç¯å²ã¯å šäœã®ã¹ã³ãŒãå ã«ãããããä¿åããŸãã 代ããã«ãé«ããåº
å®éã®èªåœã«é¢ããæ å ±ãå«ãããã€ãã®ãã©ã° (ã¢ãã³ã§å®£èšãããŠãããã©ãããããã³
è€æ°åã€ã³ã¹ã¿ã³ã¹åã§ããã?)ãåœã® ANON ã®å Žåã¯ãäœã
åå¥ã®å€ãæ ŒçŽããã芪ã®ãããå ã®ã€ã³ããã¯ã¹ãå«ãŸããŸãã
ã¯ããŒã³äœæãè¿ éåããŸãã
ãååããã&ãã®å ŽåãPAD å ã®å¯Ÿå¿ãããšã³ããªã¯ã
ééã®å¯èœæ§ã
ãã©ãŒããã㯠anon subs ãšããŠæ±ãããæžã蟌ã¿ãè¡ããããã³ã«è€è£œãããããšã«æ³šæããŠãã ããã
ïŒå¿ èŠã«å¿ããŠïŒåŒã³åºãããŸãã
ãã©ã° SVs_PADSTALE ã¯ãåå¥äžã®æ¯åã¯ãªã¢ãããŸãã åã®ïŒïŒ å®è¡ããããããŠ
ã¹ã³ãŒãã®çµäºæã«èšå®ãããŸãã ããã«ããããå€æ° $x ã¯å©çšã§ããŸããããšããèŠåã衚瀺ãããããã«ãªããŸãã
eval ã§çæããããã®ãããšãã°
{ ç§ã® $x = 1; sub f { eval '$x'} } f();
ç¶æ å€æ°ã®å ŽåãSVs_PADSTALE ã¯ããŸã åæåãããŠããªããããšãæå³ããããã«ãªãŒããŒããŒããããŸãããããã¯
å éšç¶æ ã¯å¥ã®ããã ãšã³ããªã«ä¿åãããŸãã
PADLIST * CvPADLIST(CV *cv)
ããã¢ã¬ã€
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
ããã ãšã³ããªã® C é åã
SV ** PadARRAY(PADããã)
ããããªã¹ãARRAY
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
ããããå«ãããããªã¹ãã® C é åã æ·»ãåã«æ°åã®ã¿ãä»ããŸã >=
1ã0 çªç®ã®ãšã³ããªã¯åŒãç¶ã䜿çšã§ããããšãä¿èšŒãããŠããªãããã§ãã
PAD ** PadlistARRAY(PADLIST ããããªã¹ã)
ããããªã¹ãMAX
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
ããããªã¹ãå ã§æåŸã«å²ãåœãŠãããã¹ããŒã¹ã®ã€ã³ããã¯ã¹ã æåŸã®ãããã¯ã
åã®ã¹ãããã«ããããšã ãã®å Žåãããã«ç¶ããšã³ããªã¯ãã¹ãŠ NULL ã«ãªããŸãã
SSize_t PadlistMAX(PADLIST ããããªã¹ã)
ããããªã¹ãNAMES
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
ããããšã³ããªã«é¢é£ä»ããããååã
PADNAMELIST * PadlistNAMES(PADLIST ããããªã¹ã)
ããããªã¹ãNAMESARRAY
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
ãããåã® C é åã
PADNAME ** PadlistNAMESARRAY(PADLIST ããããªã¹ã)
ããããªã¹ãNAMESMAX
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
æåŸã®ãããåã®ã€ã³ããã¯ã¹ã
SSize_t PadlistNAMESMAX(PADLIST ããããªã¹ã)
ããããªã¹ãREFCNT
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
ããããªã¹ãã®åç §ã«ãŠã³ãã çŸåšãããã¯åžžã« 1 ã§ãã
U32 ããããªã¹ãREFCNT(PADLIST ããããªã¹ã)
PadMAX 泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
æåŸã®ããããšã³ããªã®ã€ã³ããã¯ã¹ã
SSize_t PadMAX(PADããã)
ãããããŒã LEN
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
ååã®é·ãã
STRLEN ãããå LEN(PADNAME pn)
padnamelistARRAY
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
ãããåã® C é åã
PADNAME ** PadnamelistARRAY(PADNAMELIST pnl)
ãããããŒã ãªã¹ãMAX
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
æåŸã®ãããåã®ã€ã³ããã¯ã¹ã
SSize_t PadnamelistMAX(PADNAMELIST pnl)
ãããããŒã ãªã¹ãREFCNT
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
ãããåãªã¹ãã®åç §æ°ã
SSize_t ãããåãªã¹ãREFCNT(PADNAMELIST pnl)
ãããããŒã ãªã¹ãREFCNT_dec
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
ãããåãªã¹ãã®åç §ã«ãŠã³ããæžãããŸãã
void PadnamelistREFCNT_dec(PADNAMELIST pnl)
ãããããŒã PV
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
ãããåæ§é äœã«ä¿åãããŠããååã ããã«ãããã¿ãŒã²ãã ã¹ãããã«å¯Ÿã㊠NULL ãè¿ãããŸãã
char * PadnamePV(PADNAME pn)
ãããããŒã REFCNT
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
ãããåã®åç §ã«ãŠã³ãã
SSize_t ãããåREFCNT(PADNAME pn)
ãããåREFCNT_dec
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
ãããåã®åç §ã«ãŠã³ããæžãããŸãã
void PadnameREFCNT_dec(PADNAME pn)
ãããããŒã SV
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
ãããåãã¢ãŒã¿ã« SV ãšããŠè¿ããŸãã
SV * ãããåSV(PADNAME pn)
ãããåUTF8
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
PadnamePV ã UTF8 ã§ãããã©ããã çŸæç¹ã§ã¯ãããã¯åžžã«åœãŠã¯ãŸããŸãã
bool ãããåUTF8(PADNAME pn)
ãããè¿œå å_pvs
ãpad_add_name_pvnããšãŸã£ããåãã§ãããæååã®ä»£ããã«ãªãã©ã«æååãåãåããŸãã
æåå/é·ãã®ãã¢ã
PADOFFSET Pad_add_name_pvs(const char *nameãU32 ãã©ã°ã
HV *typestashãHV *ourstash)
Pad_findmy_pvs
ãpad_findmy_pvnããšãŸã£ããåãã§ãããæååã®ä»£ããã«ãªãã©ã«æååãåãåããŸãã
æåå/é·ãã®ãã¢ã
PADOFFSET Pad_findmy_pvs(const char *nameãU32 ãã©ã°)
Pad_new æ°ããããããªã¹ããäœæããçŸåšã³ã³ãã€ã«äžã®ããããªã¹ãã®ã°ããŒãã«å€æ°ãæŽæ°ããŸãã
æ°ããããããªã¹ããæãpadlistã 次ã®ãã©ã°ã¯ OR æŒç®ã§ããŸãã
Padnew_CLONE ãã®ãããã¯ã¯ããŒã³ããã CV çšã§ã
Padnew_SAVE å€ãã°ããŒãã«ãä¿åã¹ã¿ãã¯ã«ä¿åããŸã
Padnew_SAVESUB ããµãã®éå§æã«è¿œå ã®ãã®ãä¿åããŸã
PADLIST * Pad_new(int flags)
PL_comppad
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
ã³ã³ãã€ã«äžãããã¯ãããã®å€éšåãå«ãé åãæããŸãã
çŸåšã³ã³ãã€ã«äžã®ã³ãŒãã®å Žåã (å®è¡æãCV ã«ã¯ãã®ãããªå€ãå€æ°å«ãŸããå¯èœæ§ããããŸã
é å; ã³ã³ãã€ã«æã«ã¯ XNUMX ã€ã ããæ§ç¯ãããŸãã) å®è¡æã«ã¯ãããã¯
çŸåšã®ãããã®çŸåšé¢é£ããå€ãå«ãé å
ã³ãŒããå®è¡ããŠããŸãã
PL_comppad_name
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
ã³ã³ãã€ã«äžãããã¯ãããã®ååéšåãå«ãé åãæããŸãã
çŸåšã³ã³ãã€ã«äžã®ã³ãŒãã®å Žåã
PL_ã«ãŒããã
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
ãPL_comppadãé åã®æ¬äœãçŽæ¥æããŸãã (ã€ãŸããããã¯
ãPAD_ARRAY(PL_comppad)ãã)
éèš³è ããš Variables
PL_modglobal
ãPL_modglobalãã¯ãæ¡åŒµæ©èœã§äœ¿çšãããæ±çšã®ã€ã³ã¿ãŒããªã¿ãŒ ã°ããŒãã« HV ã§ãã
ã€ã³ã¿ããªã¿ããšã«æ å ±ãä¿æããå¿ èŠãããã ãããšãããšãã¯ã
æ¡åŒµæ©èœãçžäºã«ããŒã¿ãå ±æããããã®ã·ã³ãã« ããŒãã«ãšããŠäœ¿çšã§ããŸãã ããã¯
ãææããæ¡åŒµæ©èœã®ããã±ãŒãžåãå é ã«ä»ããããŒã䜿çšããããšããå§ãããŸãã
ããŒã¿ã
HV* PL_modglobal
PL_na æ°ã«ããªãå Žåã«éåžžãSvPVããšãšãã«äœ¿çšããã䟿å©ãªå€æ°
çŽã®é·ãã«ã€ããŠã éåžžã¯ã次ã®ããããã宣èšããæ¹ãå¹ççã§ãã
ããŒã«ã«å€æ°ã䜿çšãã代ããã«ããã䜿çšãããããSvPV_nolenããã¯ãã䜿çšããŸãã
STRLEN PL_na
PL_opfreehook
ãNULLã以å€ã®å Žåããã®å€æ°ãæãé¢æ°ã¯ãé¢æ°ãåŒã³åºããããã³ã«åŒã³åºãããŸãã
OP ã¯ã察å¿ãã OP ãåŒæ°ãšããŠäœ¿çšããŠè§£æŸãããŸãã ããã«ãããæ¡åŒµæ©èœã§æ¬¡ã®ããšãå¯èœã«ãªããŸãã
OP ã«ããŒã«ã«ã«ã¢ã¿ãããããŠããäœåãªå±æ§ã解æŸããŸãã ãããä¿èšŒãããŠããŸã
æåã«èŠªOPã«å¯ŸããŠçºç«ãã次ã«ãã®åã«å¯ŸããŠçºç«ããŸãã
ãã®å€æ°ã眮ãæãããšãã¯ã
ãããã以åã«ã€ã³ã¹ããŒã«ãããããã¯ãèªåã®å éšã§åŒã³åºããå¯èœæ§ããããŸãã
Perl_ophook_t PL_opfreehook
PLããŒã
ãµãã«ãŒãã³ããšã®ããŒãããŒã« ãªããã£ãã€ã¶ãŒãžã®ãã€ã³ã¿ãŒã ããã¯ååŸããé¢æ°ã§ã
Perl ãµãã«ãŒãã³ (ãŸãã¯åçã®ç¬ç«ãã) ã®ã³ã³ãã€ã«ã®æåŸã«åŒã³åºãããŸãã
Perl ã³ãŒãã®äžéšïŒã䜿çšããŠãããã€ãã®æäœã®ä¿®æ£ãå®è¡ããå°èŠæš¡ãªå®è¡ãå®è¡ããŸãã
æé©åã ãã®é¢æ°ã¯ãã³ã³ãã€ã«ããããµãã«ãŒãã³ããšã« XNUMX ååŒã³åºãããŸãã
ãããŠãå¯äžã®ãã©ã¡ãŒã¿ãšããŠããšã³ã㪠ãã€ã³ãã§ãã op ãžã®ãã€ã³ã¿ãæž¡ãããŸãã
ãµãã«ãŒãã³ã op ããªãŒããã®å Žã§å€æŽããŸãã
ã®ããç©Žãªããã£ãã€ã¶ãŒãå®å šã«äº€æããªãã§ãã ããã ããããã³ãŒããè¿œå ããŠãã ãã
æ¢åã®ãªããã£ãã€ã¶ãã©ããããããšã§å®çŸããŸãã ãããè¡ãåºæ¬çãªæ¹æ³ã¯æ¬¡ã®ãšããã§ãã
perlguts ã®ãã³ã³ãã€ã« ãã¹ 3: ã®ããç©Žã®æé©åãã æ°ããã³ãŒããåžæããå Žåã¯ã
äžéšã ãã§ãªãããµãã«ãŒãã³ã®æ§é å šäœã§ ops ãæäœããŸãã
ã¬ãã«ã§ã¯ããPL_rpeeppãããã¯ãã©ããããæ¹ã䟿å©ã§ããå¯èœæ§ããããŸãã
ããŒã_t PL_ããŒã
PL_rpeep
ååž°çãªã®ããç©Žãªããã£ãã€ã¶ãŒãžã®ãã€ã³ã¿ãŒã ããã¯åŒã³åºãããé¢æ°ã§ã
Perl ãµãã«ãŒãã³ (ãŸãã¯åçã®ç¬ç«ããéšå) ã®ã³ã³ãã€ã«ã®çµäºæ
Perl ã³ãŒãã®) ããã€ãã®æäœã®ä¿®æ£ãå®è¡ããå°èŠæš¡ãªå®è¡ãå®è¡ããŸãã
æé©åã ãã®é¢æ°ã¯ããªã³ã¯ãããæäœã®ãã§ãŒã³ããšã« XNUMX ååŒã³åºãããŸãã
ãop_nextããã£ãŒã«ãã åãµã€ããã§ãŒã³ãåŠçããããã«ååž°çã«åŒã³åºãããŸãã ããã¯
å¯äžã®ãã©ã¡ãŒã¿ãšããŠããã§ãŒã³ã®å é ã«ããæäœãžã®ãã€ã³ã¿ãæž¡ããŸãã
op ããªãŒããã®å Žã§å€æŽããŸãã
ã®ããç©Žãªããã£ãã€ã¶ãŒãå®å šã«äº€æããªãã§ãã ããã ããããã³ãŒããè¿œå ããŠãã ãã
æ¢åã®ãªããã£ãã€ã¶ãã©ããããããšã§å®çŸããŸãã ãããè¡ãåºæ¬çãªæ¹æ³ã¯æ¬¡ã®ãšããã§ãã
perlguts ã®ãã³ã³ãã€ã« ãã¹ 3: ã®ããç©Žã®æé©åãã æ°ããã³ãŒããåžæããå Žåã¯ã
ãµãã«ãŒãã³å šäœã§ã¯ãªãããµãã«ãŒãã³ã®ãããã¬ãã«ã®æäœã®ã¿ãæäœããŸãã
æ§é äžããPL_peeppãããã¯ãã©ããããã»ãã䟿å©ãšæãããŸãã
peep_t PL_rpeepp
PL_sv_no
ããã¯ãåœã®ãSV ã§ãã ãPL_sv_yesããåç §ããŠãã ããã ãããåžžã« &PL_sv_no ãšããŠåç §ããŠãã ããã
SV PL_sv_no
PL_sv_undef
ããã¯ãundefãSVã§ãã ãããåžžã« &PL_sv_undef ãšããŠåç §ããŠãã ããã
SV PL_sv_undef
PL_sv_ã¯ã
ããããçã®ãSVã§ãã ãPL_sv_noããåç §ããŠãã ããã ãããåžžã« &PL_sv_yes ãšããŠåç §ããŠãã ããã
SV PL_sv_ã¯ã
REGEXP æ©èœ
SvRX SV ãã REGEXP ãååŸããããã®äŸ¿å©ãªãã¯ãã ããã¯ã»ãŒåçã§ã
次ã®ã¹ããããã«:
if (SvMAGICAL(sv))
mg_get(sv);
if (SvROK(sv))
sv = MUTABLE_SV(SvRV(sv));
if (SvTYPE(sv) == SVt_REGEXP)
(REGEXP*) sv ãè¿ããŸãã
REGEXP* ãèŠã€ãããªãå Žåã¯ãNULL ãè¿ãããŸãã
REGEXP * SvRX(SV *sv)
SvRXOK SV (ãŸãã¯ãããåç §ãã SV) ã SV ãã©ããã瀺ãããŒã«å€ãè¿ããŸãã
æ£èŠè¡šçŸã
åŸã§ REGEXP* ã䜿çšããŠäœãããããå Žåã¯ã代ããã« SvRX ã䜿çšããŠã
ãã«ã
bool SvRXOK(SV* sv)
ã¹ã¿ã㯠æäœ ãã¯ã
dMARK XSUB ã®ã¹ã¿ã㯠ããŒã«ãŒå€æ°ãmarkãã宣èšããŸãã ãããŒã¯ããš
ãããªããŒã¯ãã
dããŒã¯;
ããªããŒã¯
XSUB ã®å ã®ã¹ã¿ã㯠ããŒã¯ãä¿åããŸãã ããªãªããŒã¯ããåç §ããŠãã ããã
ããªã°ããŒã¯;
dSP ãSPãçµç±ã§å©çšå¯èœãªãXSUB ã® Perl ã®ã¹ã¿ã㯠ãã€ã³ã¿ã®ããŒã«ã« ã³ããŒã宣èšããŸãã
倧ããã ãSPããåç §ããŠãã ããã
dSP;
EXTEND XSUB ã®æ»ãå€ã®åŒæ°ã¹ã¿ãã¯ãæ¡åŒµããããã«äœ¿çšãããŸãã äžåºŠäœ¿çšãããšã
å°ãªããšããnitemsããã¹ã¿ãã¯ã«ããã·ã¥ããäœå°ãããããšãä¿èšŒããŸãã
void EXTEND(SP, SSize_t niitems)
MARK XSUB ã®ã¹ã¿ã㯠ããŒã«ãŒå€æ°ã ãdããŒã¯ããåç §ããŠãã ããã
mPUSHi æŽæ°ãã¹ã¿ãã¯ã«ããã·ã¥ããŸãã ã¹ã¿ãã¯ã«ã¯ãã®èŠçŽ çšã®ã¹ããŒã¹ãå¿ èŠã§ãã ãã
ãTARGãã¯äœ¿çšããªãã§ãã ããã ãPUSHiãããmXPUSHiããããã³ãXPUSHiããåç §ããŠãã ããã
void mPUSHi(IV iv)
mPUSHn double ãã¹ã¿ãã¯ã«ããã·ã¥ããŸãã ã¹ã¿ãã¯ã«ã¯ãã®èŠçŽ çšã®ã¹ããŒã¹ãå¿ èŠã§ãã ãã
ãTARGãã¯äœ¿çšããªãã§ãã ããã ãPUSHnãããmXPUSHnããããã³ãXPUSHnããåç §ããŠãã ããã
void mPUSHn(NV nv)
mPUSHp æååãã¹ã¿ãã¯ã«ããã·ã¥ããŸãã ã¹ã¿ãã¯ã«ã¯ãã®èŠçŽ çšã®ã¹ããŒã¹ãå¿ èŠã§ãã ã®
ãlenãã¯æååã®é·ãã瀺ããŸãã ãTARGãã¯äœ¿çšããŸããã ãPUSHpããåç §ããŠãã ããã
ãmXPUSHpããšãXPUSHpãã
void mPUSHp(char* str, STRLEN len)
mPUSH SV ãã¹ã¿ãã¯ã«ããã·ã¥ããSV ãæ¶æ» ãããŸãã ã¹ã¿ãã¯ã«ã¯æ¬¡ã®ã¹ããŒã¹ãå¿ èŠã§ã
ãã®èŠçŽ ã ãTARGãã¯äœ¿çšããŸããã ãPUSHãããã³ãmXPUSHããåç §ããŠãã ããã
void mPUSHs(SV* sv)
mPUSHu 笊å·ãªãæŽæ°ãã¹ã¿ãã¯ã«ããã·ã¥ããŸãã ã¹ã¿ãã¯ã«ã¯ããã®ããã®ã¹ããŒã¹ãå¿ èŠã§ã
èŠçŽ ã ãTARGãã¯äœ¿çšããŸããã ãPUSHuãããmXPUSHuããããã³ãXPUSHuããåç §ããŠãã ããã
void mPUSHu(UV uv)
mXPUSHi æŽæ°ãã¹ã¿ãã¯ã«ããã·ã¥ããå¿ èŠã«å¿ããŠã¹ã¿ãã¯ãæ¡åŒµããŸãã 䜿çšããŸãã
ãã¿ãŒã°ãã ãXPUSHiãããmPUSHiããããã³ãPUSHiããåç §ããŠãã ããã
void mXPUSHi(IV iv)
mXPUSHn double ãã¹ã¿ãã¯ã«ããã·ã¥ããå¿ èŠã«å¿ããŠã¹ã¿ãã¯ãæ¡åŒµããŸãã 䜿çšããŸãã
ãã¿ãŒã°ãã ãXPUSHnãããmPUSHnããããã³ãPUSHnããåç §ããŠãã ããã
void mXPUSHn(NV nv)
mXPUSHp æååãã¹ã¿ãã¯ã«ããã·ã¥ããå¿ èŠã«å¿ããŠã¹ã¿ãã¯ãæ¡åŒµããŸãã ãã¬ã³ã
æååã®é·ãã瀺ããŸãã ãTARGãã¯äœ¿çšããŸããã ãXPUSHpããåç §ããŠãã ããã
ãmPUSHpããšãPUSHpãã
void mXPUSHp(char* str, STRLEN len)
mXPUSHs SV ãã¹ã¿ãã¯ã«ããã·ã¥ããå¿ èŠã«å¿ããŠã¹ã¿ãã¯ãæ¡åŒµããSV ãæ¶æ» ãããŸãã
ãTARGãã¯äœ¿çšããŸããã ãXPUSHããšãmPUSHããåç §ããŠãã ããã
void mXPUSHs(SV* sv)
mXPUSHu 笊å·ãªãæŽæ°ãã¹ã¿ãã¯ã«ããã·ã¥ããå¿ èŠã«å¿ããŠã¹ã¿ãã¯ãæ¡åŒµããŸãã ãã
ãTARGãã¯äœ¿çšããªãã§ãã ããã ãXPUSHuãããmPUSHuããããã³ãPUSHuããåç §ããŠãã ããã
void mXPUSHu(UV uv)
ãªãªã°ããŒã¯
XSUB ã®å ã®ã¹ã¿ã㯠ããŒã¯ã ãããªããŒã¯ããåç §ã
POPi ã¹ã¿ãã¯ããæŽæ°ããããããŸãã
IV POPi
POPl ãã³ã°ãã¹ã¿ãã¯ãããããããŸãã
é·ãPOPXNUMX
POPn ã¹ã¿ãã¯ããããã«ããããããŸãã
NV POPn
POPp ã¹ã¿ãã¯ããæååããããããŸãã
char* POPp
ããããã€ãããã¯ã¹
ãã€ããã€ãŸã 256 æªæºã®æåã§æ§æãããæååãã¹ã¿ãã¯ãããããããŸãã
char* POPpbytex
POPpx ã¹ã¿ãã¯ããæååããããããŸãã POPpãšåãã äºã€ã®ååããããŸããã
æŽå²çãªçç±ã
char* POPpx
POP ã¹ã¿ãã¯ãã SV ããããããŸãã
SV* POP
PUSHi æŽæ°ãã¹ã¿ãã¯ã«ããã·ã¥ããŸãã ã¹ã¿ãã¯ã«ã¯ãã®èŠçŽ çšã®ã¹ããŒã¹ãå¿ èŠã§ãã
ãã»ãããããžãã¯ãæ±ããŸãã ãTARGãã䜿çšããããããdTARGETããŸãã¯ãdXSTARGããåŒã³åºãå¿ èŠããããŸãã
ããã宣èšããŸãã ãªã¹ããè¿ãããã«è€æ°ã®ãTARGãæåã®ãã¯ããåŒã³åºããªãã§ãã ããã
XSUB - 代ããã«ãmPUSHiããåç §ããŠãã ããã ãXPUSHiãããã³ãmXPUSHiããåç §ããŠãã ããã
void PUSHi(IV iv)
ããã·ã¥ããŒã¯
ã³ãŒã«ããã¯ã®åŒæ°ã®å·Šæ¬åŒ§ã ãPUTBACKããš perlcall ãåç §ããŠãã ããã
void PUSHMARK(SP)
PUSHã¢ãŒã¿ã«
æ°ããã¢ãŒã¿ã« SV ãã¹ã¿ãã¯ã«ããã·ã¥ããŸãã ã¹ã¿ãã¯ã«ã¯ãã®èŠçŽ çšã®ã¹ããŒã¹ãå¿ èŠã§ãã
ãTARGãã¯äœ¿çšããŸããã ãPUSHãããXPUSHmortalããããã³ãXPUSHããåç §ããŠãã ããã
void PUSHmortal()
PUSHn ããã«ãã¹ã¿ãã¯ã«ããã·ã¥ããŸãã ã¹ã¿ãã¯ã«ã¯ãã®èŠçŽ çšã®ã¹ããŒã¹ãå¿ èŠã§ãã ãã³ãã«
ãã»ãããããžãã¯ã ãTARGãã䜿çšããããããdTARGETããŸãã¯ãdXSTARGããåŒã³åºããŠå®£èšããå¿ èŠããããŸã
ããã XSUB ãããªã¹ããè¿ãããã«è€æ°ã®ãTARGãæåã®ãã¯ããåŒã³åºããªãã§ãã ãã - ãåç §ããŠãã ããã
代ããã«ãmPUSHnãã䜿çšããŸãã ãXPUSHnãããã³ãmXPUSHnããåç §ããŠãã ããã
void PUSHn(NV nv)
PUSHp æååãã¹ã¿ãã¯ã«ããã·ã¥ããŸãã ã¹ã¿ãã¯ã«ã¯ãã®èŠçŽ çšã®ã¹ããŒã¹ãå¿ èŠã§ãã ã®
ãlenãã¯æååã®é·ãã瀺ããŸãã ãã»ãããããžãã¯ãæ±ããŸãã ãTARGãã䜿çšããŠããããã
ãdTARGETããŸãã¯ãdXSTARGããåŒã³åºããŠå®£èšããå¿ èŠããããŸãã è€æ°é»è©±ããªãã§ãã ãã
XSUB ãããªã¹ããè¿ããTARGãæåã®ãã¯ã - 代ããã«ãmPUSHpããåç §ããŠãã ããã èŠã
ãXPUSHpããšãmXPUSHpããã
void PUSHp(char* str, STRLEN len)
PUSH SV ãã¹ã¿ãã¯ã«ããã·ã¥ããŸãã ã¹ã¿ãã¯ã«ã¯ãã®èŠçŽ çšã®ã¹ããŒã¹ãå¿ èŠã§ãã ã§ã¯ãªã
ãã»ãããããžãã¯ãåŠçããŸãã ãTARGãã¯äœ¿çšããŸããã ãPUSHmortalãããXPUSHããããã³ãXPUSHããåç §ããŠãã ããã
ãXPUSHã¢ãŒã¿ã«ãã
void PUSH(SV* sv)
PUSHu 笊å·ãªãæŽæ°ãã¹ã¿ãã¯ã«ããã·ã¥ããŸãã ã¹ã¿ãã¯ã«ã¯ããã®ããã®ã¹ããŒã¹ãå¿ èŠã§ã
èŠçŽ ã ãã»ãããããžãã¯ãæ±ããŸãã ãTARGãã䜿çšããããããdTARGETããŸãã¯ãdXSTARGãã䜿çšããå¿ èŠããããŸãã
ããã宣èšããããã«åŒã°ããŸããã ãªã¹ããè¿ãããã«è€æ°ã®ãTARGãæåã®ãã¯ããåŒã³åºããªãã§ãã ããã
XSUB ãã - 代ããã«ãmPUSHuããåç §ããŠãã ããã ãXPUSHuãããã³ãmXPUSHuããåç §ããŠãã ããã
void PUSHu(UV uv)
PUTBACK XSUB åŒæ°ã®éãæ¬åŒ§ã ããã¯éåžžãxsubppãã«ãã£ãŠåŠçãããŸãã èŠã
ãPUSHMARKãããã³ä»ã®çšéã® perlcallã
æ»ã;
SP ã¹ã¿ã㯠ãã€ã³ã¿ã ããã¯éåžžãxsubppãã«ãã£ãŠåŠçãããŸãã ãdSPãããã³ãSPAGAINããåç §ããŠãã ããã
SPAGAIN ã¹ã¿ã㯠ãã€ã³ã¿ãåãã§ããããŸãã ã³ãŒã«ããã¯ã®åŸã«äœ¿çšãããŸãã ãperlcallããåç §ããŠãã ããã
ã¹ãã¬ã€ã³;
XPUSHi æŽæ°ãã¹ã¿ãã¯ã«ããã·ã¥ããå¿ èŠã«å¿ããŠã¹ã¿ãã¯ãæ¡åŒµããŸãã ãã³ãã«ãã»ããã
éæ³ã ãTARGãã䜿çšããããããdTARGETããŸãã¯ãdXSTARGããåŒã³åºããŠå®£èšããå¿ èŠããããŸãã ãã
XSUB ãããªã¹ããè¿ãããã«è€æ°ã®ãTARGãæåã®ãã¯ããåŒã³åºããªã - ãåç §ããŠãã ããã
代ããã«ãmXPUSHiãã䜿çšããŸãã ãPUSHiãããã³ãmPUSHiããåç §ããŠãã ããã
void XPUSHi(IV iv)
XPUSHã¢ãŒã¿ã«
æ°ããå®åœã® SV ãã¹ã¿ãã¯ã«ããã·ã¥ããå¿ èŠã«å¿ããŠã¹ã¿ãã¯ãæ¡åŒµããŸãã ã§ã¯ãªã
ãTARGãã䜿çšããŸãã ãXPUSHãããPUSHmortalããããã³ãPUSHããåç §ããŠãã ããã
void XPUSHmortal()
XPUSHn double ãã¹ã¿ãã¯ã«ããã·ã¥ããå¿ èŠã«å¿ããŠã¹ã¿ãã¯ãæ¡åŒµããŸãã ãã³ãã«ãã»ããã
éæ³ã ãTARGãã䜿çšããããããdTARGETããŸãã¯ãdXSTARGããåŒã³åºããŠå®£èšããå¿ èŠããããŸãã ãã
XSUB ãããªã¹ããè¿ãããã«è€æ°ã®ãTARGãæåã®ãã¯ããåŒã³åºããªã - ãåç §ããŠãã ããã
代ããã«ãmXPUSHnãã䜿çšããŸãã ãPUSHnãããã³ãmPUSHnããåç §ããŠãã ããã
void XPUSHn(NV nv)
XPUSHp æååãã¹ã¿ãã¯ã«ããã·ã¥ããå¿ èŠã«å¿ããŠã¹ã¿ãã¯ãæ¡åŒµããŸãã ãã¬ã³ã
æååã®é·ãã瀺ããŸãã ãã»ãããããžãã¯ãæ±ããŸãã ãTARGãã䜿çšããŠããããã
ãdTARGETããŸãã¯ãdXSTARGããåŒã³åºããŠå®£èšããå¿ èŠããããŸãã è€æ°é»è©±ããªãã§ãã ãã
XSUB ãããªã¹ããè¿ããTARGãæåã®ãã¯ã - 代ããã«ãmXPUSHpããåç §ããŠãã ããã èŠã
ãPUSHpããšãmPUSHpããã
void XPUSHp(char* str, STRLEN len)
XPUSH SV ãã¹ã¿ãã¯ã«ããã·ã¥ããå¿ èŠã«å¿ããŠã¹ã¿ãã¯ãæ¡åŒµããŸãã åãæ±ããŸãã
ãã»ãããããžãã¯ã ãTARGãã¯äœ¿çšããŸããã ãXPUSHmortalãããPUSHããããã³ãXPUSHmortalããåç §ããŠãã ããã
ãPUSHã¢ãŒã¿ã«ãã
void XPUSHs(SV* sv)
XPUSHu 笊å·ãªãæŽæ°ãã¹ã¿ãã¯ã«ããã·ã¥ããå¿ èŠã«å¿ããŠã¹ã¿ãã¯ãæ¡åŒµããŸãã
ãã»ãããããžãã¯ãæ±ããŸãã ãTARGãã䜿çšããããããdTARGETããŸãã¯ãdXSTARGããåŒã³åºãå¿ èŠããããŸãã
ããã宣èšããŸãã ãªã¹ããè¿ãããã«è€æ°ã®ãTARGãæåã®ãã¯ããåŒã³åºããªãã§ãã ããã
XSUB - 代ããã«ãmXPUSHuããåç §ããŠãã ããã ãPUSHuãããã³ãmPUSHuããåç §ããŠãã ããã
void XPUSHu(UV uv)
XSRETURN
XSUB ããè¿ãããã¹ã¿ãã¯äžã®é ç®ã®æ°ã瀺ããŸãã ããã¯éåžžã
ãxsubppãã«ãã£ãŠåŠçãããŸãã
void XSRETURN(int niitems)
XSRETURN_EMPTY
XSUB ãã空ã®ãªã¹ããããã«è¿ããŸãã
XSRETURN_EMPTY;
XSRETURN_IV
XSUB ããããã«æŽæ°ãè¿ããŸãã ãXST_mIVãã䜿çšããŸãã
void XSRETURN_IV(IV iv)
XSRETURN_NO
XSUB ããããã« &PL_sv_no ãè¿ããŸãã ãXST_mNOãã䜿çšããŸãã
XSRETURN_NO;
XSRETURN_NV
XSUB ãã double ãããã«è¿ããŸãã ãXST_mNVãã䜿çšããŸãã
void XSRETURN_NV(NV nv)
XSRETURN_PV
XSUB ããæååã®ã³ããŒãããã«è¿ããŸãã ãXST_mPVãã䜿çšããŸãã
void XSRETURN_PV(char* str)
XSRETURN_UNDEF
XSUB ããããã« &PL_sv_undef ãè¿ããŸãã ãXST_mUNDEFãã䜿çšããŸãã
XSRETURN_UNDEF;
XSRETURN_UV
XSUB ããããã«æŽæ°ãè¿ããŸãã ãXST_mUVãã䜿çšããŸãã
void XSRETURN_UV(IV uv)
XSRETURN_YES
XSUB ãããã ã¡ã« &PL_sv_yes ãè¿ããŸãã ãXST_mYESãã䜿çšããŸãã
XSRETURN_YES;
XST_mIV ã¹ã¿ãã¯äžã®æå®ãããäœçœ®ãposãã«æŽæ°ãé 眮ããŸãã å€ã¯
æ°ããèŽåœç㪠SV ã«ä¿åãããŸãã
void XST_mIV(int pos, IV iv)
XST_mNO &PL_sv_no ãã¹ã¿ãã¯äžã®æå®ãããäœçœ®ãposãã«é 眮ããŸãã
void XST_mNO(int pos)
XST_mNV ã¹ã¿ãã¯äžã®æå®ãããäœçœ®ãposãã« double ãé 眮ããŸãã å€ã¯
æ°ããèŽåœç㪠SV ã«ä¿åãããŸãã
void XST_mNV(int pos, NV nv)
XST_mPV æååã®ã³ããŒãã¹ã¿ãã¯äžã®æå®ãããäœçœ®ãposãã«é 眮ããŸãã ã®
å€ã¯æ°ããæçµ SV ã«ä¿åãããŸãã
void XST_mPV(int pos, char* str)
XST_mUNDEF
&PL_sv_undef ãã¹ã¿ãã¯äžã®æå®ãããäœçœ®ãposãã«é 眮ããŸãã
void XST_mUNDEF(int pos)
XST_mã¯ã
&PL_sv_yes ãã¹ã¿ãã¯äžã®æå®ãããäœçœ®ãposãã«é 眮ããŸãã
void XST_mYES(int pos)
SV ãã©ã°
svtype Perl ã¿ã€ãã®ãã©ã°ã®åæã ãããã¯ãã¡ã€ã«å ã«ãããŸã SV.H ãsvtypeãã§
åæåã ãããã®ãã©ã°ããSvTYPEããã¯ãã§ãã¹ãããŸãã
ã¿ã€ãã¯æ¬¡ã®ãšããã§ãã
SVt_NULL
SVt_IV
SVt_NV
SVt_RV
SVt_PV
SVt_PVIV
SVt_PVNV
SVt_PVMG
SVt_INVLIST
SVt_REGEXP
SVt_PVGV
SVt_PVLV
SVt_PVAV
SVt_PVHV
SVt_PVCV
SVt_PVFM
SVt_PVIO
ãããã¯äžããé ã«èª¬æããã®ãæãç°¡åã§ãã
SVt_PVIO 㯠I/O ãªããžã§ã¯ãçšãSVt_PVFM ã¯ãã©ãŒãããçšãSVt_PVCV ã¯ãµãã«ãŒãã³çšã
ããã·ã¥ã®å Žå㯠SVt_PVHVãé åã®å Žå㯠SVt_PVAVã
ä»ã®ãã®ã¯ãã¹ãŠã¹ã«ã©ãŒåãã€ãŸãã$ãã«ãã€ã³ãã§ãããã®ã§ãã
å€æ°ã ãããã®å Žåãå éšåã¯ã»ãšãã©ã®å Žåãå éšã®åãšçŽäº€ããŸãã
ããŒã«èšèªã
ãããã£ãŠããSvTYPE(sv) < SVt_PVAVãããã§ãã¯ããããšããäœããããã©ããã確èªããæè¯ã®æ¹æ³ã§ãã
ã¯ã¹ã«ã©ãŒã§ãã
SVt_PVGV ã¯ã¿ã€ãã°ãããè¡šããŸãã !SvFAKE(sv) ã®å Žåãããã¯æ¬ç©ã§åŒ·å¶åã®ãªããã®ã§ãã
ã¿ã€ãã°ããã SvFAKE(sv) ã®å Žåãtypeglob ãé©çšãããã¹ã«ã©ãŒã§ãã
å²ãåœãŠãããŸããã ååºŠä»£å ¥ãããšãtypeglob ã§ã¯ãªããªããŸãã SVt_PVLV
èå°è£ã§å¥ã®ã¹ã«ã©ãŒã«å§ä»»ããã¹ã«ã©ãŒãè¡šããŸãã ããã¯
ããšãã°ããsubstrãã®æ»ãå€ãçµåãããããã·ã¥ããã³é åèŠçŽ ã«äœ¿çšãããŸãã
typeglob ãå«ãä»»æã®ã¹ã«ã©ãŒå€ãä¿æã§ããŸãã SVt_REGEXP ã¯éåžžçšã§ã
è¡šçŸã SVt_INVLIST 㯠Perl ã³ã¢ã®å éšäœ¿çšã®ã¿ãç®çãšããŠããŸãã
SVt_PVMG ã¯ãéåžžã®ãã¹ã«ã©ãŒ (typeglobãæ£èŠè¡šçŸããŸãã¯
代衚ïŒã ã»ãšãã©ã®ã¹ã«ã©ãŒã¯ PVMG ã®ãã¹ãŠã®å éšãã£ãŒã«ããå¿ èŠãšããªãããã
å¯èœãªå Žåã¯ããå°ããªæ§é äœãå²ãåœãŠãŠã¡ã¢ãªãç¯çŽããŸãã ä»ã®ã¿ã€ãã¯ãã¹ãŠã
å éšãã£ãŒã«ããå°ãªããåçŽãªåœ¢åŒã® SVt_PVMG ã§ãã
SVt_NULL 㯠undef ã®ã¿ãä¿æã§ããŸãã SVt_IV ã¯ãundefãæŽæ°ããŸãã¯åç §ãä¿æã§ããŸãã
(SVt_RV ã¯ãäžäœäºææ§ã®ããã«ååšãã SVt_IV ã®ãšã€ãªã¢ã¹ã§ãã) SVt_NV
ãããã®ããããããŸã㯠double ãä¿æã§ããŸãã SVt_PV 㯠undef ãŸãã¯æååã®ã¿ãä¿æã§ããŸãã
SVt_PVIV ã¯ãSVt_PV ãš SVt_IV ã®ã¹ãŒããŒã»ããã§ãã SVt_PVNV ãåæ§ã§ãã SVt_PVMG ã¯ã
SVt_PVNV ãä¿æã§ãããã®ã¯ãã¹ãŠä¿æããŸãããç¥çŠãããããšã¯ã§ããŸãããããããå¿ èŠã¯ãããŸããã
éæ³ã®ã
SVt_INVLIST
ã¹ã«ã©ãŒã®åãã©ã°ã ãsvtypeããåç §ããŠãã ããã
SVt_IV ã¹ã«ã©ãŒã®ã¿ã€ã ãã©ã°ã ãsvtypeããåç §ããŠãã ããã
SVt_NULL
ã¹ã«ã©ãŒã®åãã©ã°ã ãsvtypeããåç §ããŠãã ããã
SVt_NV ã¹ã«ã©ãŒã®ã¿ã€ã ãã©ã°ã ãsvtypeããåç §ããŠãã ããã
SVt_PV ã¹ã«ã©ãŒã®ã¿ã€ã ãã©ã°ã ãsvtypeããåç §ããŠãã ããã
SVt_PVAV
é åã®åãã©ã°ã ãsvtypeããåç §ããŠãã ããã
SVt_PVCV
ãµãã«ãŒãã³ã®ã¿ã€ããã©ã°ã ãsvtypeããåç §ããŠãã ããã
SVt_PVFM
ãã©ãŒãããã®ã¿ã€ããã©ã°ã ãsvtypeããåç §ããŠãã ããã
SVt_PVGV
ã¿ã€ãã°ããã®ã¿ã€ããã©ã°ã ãsvtypeããåç §ããŠãã ããã
SVt_PVHV
ããã·ã¥ã®ã¿ã€ããã©ã°ã ãsvtypeããåç §ããŠãã ããã
SVt_PVIO
I/O ãªããžã§ã¯ãã®ã¿ã€ã ãã©ã°ã ãsvtypeããåç §ããŠãã ããã
SVt_PVIV
ã¹ã«ã©ãŒã®åãã©ã°ã ãsvtypeããåç §ããŠãã ããã
SVt_PVLV
ã¹ã«ã©ãŒã®åãã©ã°ã ãsvtypeããåç §ããŠãã ããã
SVt_PVMG
ã¹ã«ã©ãŒã®åãã©ã°ã ãsvtypeããåç §ããŠãã ããã
SVt_PVNV
ã¹ã«ã©ãŒã®åãã©ã°ã ãsvtypeããåç §ããŠãã ããã
SVt_REGEXP
æ£èŠè¡šçŸã®ã¿ã€ããã©ã°ã ãsvtypeããåç §ããŠãã ããã
SV æäœ æ©èœ
boolSV ãbãã true å€ã®å Žå㯠true SV ãè¿ãããbãã 0 ã®å Žå㯠false SV ãè¿ããŸãã
ãPL_sv_yesãããã³ãPL_sv_noããåç §ããŠãã ããã
SV * boolSV(bool b)
croak_xs_usage
xsub ã®äœ¿çšæ³ã¡ãã»ãŒãžãåºåããããã®ãcroak()ãã®ç¹æ®ãªããªã¢ã³ã
croak_xs_usage(cvããeee_yowã);
ãcvãããããã±ãŒãžåãšãµãã«ãŒãã³åãèšç®ããåŒã³åºããŸãã
ã鳎ãïŒïŒãã ãããã£ãŠããcvãã &ouch::awk ã®å Žåããcroakãã¯æ¬¡ã®ããã«åŒã³åºãããŸãã
Perl_croak(aTHX_ "䜿çšæ³: %"SVf"::%"SVf"(%s)", "çã" "awk",
"ãããã");
void croak_xs_usage(const CV *const cv,
const char *const params)
get_sv æå®ããã Perl ã¹ã«ã©ãŒã® SV ãè¿ããŸãã ããã©ã°ãã¯ãgv_fetchpvãã«æž¡ãããŸãã
ãGV_ADDããèšå®ãããŠãããPerl å€æ°ãååšããªãå Žåã¯äœæãããŸãã
ãflagsãããŒãã§å€æ°ãååšããªãå Žåã¯ãNULL ãè¿ãããŸãã
泚: ãã®é¢æ°ã® perl_ 圢åŒã¯éæšå¥šã§ãã
SV* get_sv(const char *name, I32 ãã©ã°)
newRV_inc
SV ã® RV ã©ãããŒãäœæããŸãã å ã® SV ã®åç §ã«ãŠã³ãã¯æ¬¡ã®ãšããã§ãã
å¢å ããŸããã
SV* newRV_inc(SV* sv)
æ°ããSVãããå
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
ãããåãå«ãæ°ãã SV ãäœæããŸãã
SV* newSVpadname(PADNAME *pn)
newSVpvn_utf8
æ°ãã SV ãäœæããæåå (ãNULã (ã\0ã) æåãå«ãŸããå ŽåããããŸã) ãã³ããŒããŸãã
ããã«ã utf8 ã true ã®å Žåãæ°ãã SV ã§ãSvUTF8_onããåŒã³åºããŸãã ãšããŠå®è£ ãããŸãã
ãnewSVpvn_flagsãã®ã©ãããŒã
SV* newSVpvn_utf8(NULLOK const char* s, STRLEN len,
U32utf8)
SvCUR SV å ã®æååã®é·ããè¿ããŸãã ãSvLENããåç §ããŠãã ããã
ã¹ãã¬ã³ SvCUR(SV* sv)
SvCUR_set
SV ã«ããæååã®çŸåšã®é·ããèšå®ããŸãã ãSvCURãããã³
ãSvIV_setãã
void SvCUR_set(SV* sv, STRLEN len)
SvEND æååã®æåŸã®æåã®çŽåŸã®äœçœ®ãžã®ãã€ã³ã¿ãè¿ããŸãã
SV ã§ã¯ãéåžžãæ«å°Ÿã«ãNULãæåããããŸã (Perl ã§ãã£ãŠã)
ã¹ã«ã©ãŒã§ã¯å³å¯ã«ã¯å¿ èŠãããŸãã)ã ãSvCURããåç §ããŠãã ããã ãšããŠæåã«ã¢ã¯ã»ã¹ããŸã
*(SvEND(sv))ã
èŠå: ãSvCURãããSvLENããšçããå ŽåããSvENDãã¯æªå²ãåœãŠãæããŸãã
ã¡ã¢ãªã
char* SvEND(SV* sv)
SvGAMAGIC
SV ã get ããžãã¯ãŸãã¯ãªãŒããŒããŒããæã£ãŠããå Žå㯠true ãè¿ããŸãã ã©ã¡ããã true ã®å Žåã
ã¹ã«ã©ãŒã¯ã¢ã¯ãã£ããªããŒã¿ã§ãããããŒã¿ãè¿ããããã³ã«æ°ããå€ãè¿ãå¯èœæ§ããããŸãã
ã«ã¢ã¯ã»ã¹ãããŸãã ãããã£ãŠãè«çãŠãŒã¶ãŒããšã«äžåºŠã ãèªã¿åãããã«æ³šæããå¿ èŠããããŸãã
æäœãå®è¡ãããã®æ»ãå€ãåŠçããŸãã ã©ã¡ããåœãŠã¯ãŸããªãå Žåãã¹ã«ã©ãŒã®
å€ã¯æžã蟌ãŸããªãéãå€æŽã§ããŸããã
U32 SvGAMAGIC(SV* sv)
SvGROW SV å ã®æåãããã¡ãŒãæ¡åŒµããŠãæå®ãããæåãæ ŒçŽã§ããã¹ããŒã¹ã確ä¿ããŸãã
ãã€ãæ° (è¿œå ã®æ«å°ŸãNULãæåçšã«ã¹ããŒã¹ã確ä¿ããããšãå¿ããªãã§ãã ãã)ã
å¿ èŠã«å¿ããŠãsv_growããåŒã³åºããŠå±éãå®è¡ããŸãã ãžã®ãã€ã³ã¿ãè¿ããŸãã
æåãããã¡ã SV ã®ã¿ã€ã㯠SVt_PV 以äžã§ããå¿ èŠããããŸãã 代æ¿æ段㮠XNUMX ã€ã¯ãé»è©±ããããšã§ã
SV ã®ã¿ã€ããããããªãå Žåã¯ããsv_growãã
char * SvGROW(SV* sv, STRLEN len)
SvIOK SV ã«æŽæ°ãå«ãŸããŠãããã©ããã瀺ã U32 å€ãè¿ããŸãã
U32 SvIOK(SV* sv)
SvIOKp SV ã«æŽæ°ãå«ãŸããŠãããã©ããã瀺ã U32 å€ãè¿ããŸãã ãã§ãã¯ããŸã
ãã©ã€ããŒã èšå®ã 代ããã«ãSvIOKãã䜿çšããŠãã ããã
U32 SvIOKp(SV* sv)
SvIOK_notUV
SV ã«ç¬Šå·ä»ãæŽæ°ãå«ãŸãããã©ããã瀺ãããŒã«å€ãè¿ããŸãã
bool SvIOK_notUV(SV* sv)
SvIOK_off
SV ã® IV ã¹ããŒã¿ã¹ã®èšå®ã解é€ããŸãã
void SvIOK_off(SV* sv)
SvIOK_on
SV ã«ãããæŽæ°ã§ããããšãäŒããŸãã
void SvIOK_on(SV* sv)
SvIOK_only
SV ã«ãããæŽæ°ã§ããããšãäŒããä»ã®ãã¹ãŠã® OK ããããç¡å¹ã«ããŸãã
void SvIOK_only(SV* sv)
SvIOK_only_UV
SV ã«ããã笊å·ãªãæŽæ°ã§ããããšãäŒããä»ã®ãã¹ãŠã® OK ããããç¡å¹ã«ããŸãã
void SvIOK_only_UV(SV* sv)
SvIOK_UV
SV ã«å¿ é ã®æŽæ°ãå«ãŸããŠãããã©ããã瀺ãããŒã«å€ãè¿ããŸãã
眲åãããŠããªããã®ãšããŠè§£éãããŸãã å€ãç¯å²å ã«ããéè² ã®æŽæ°
IV ãš UV ã®äž¡æ¹ã®ãã©ã°ã¯ãSvUOK ãŸã㯠SVIOK ãšããŠèšå®ã§ããŸãã
bool SvIOK_UV(SV* sv)
SvIsCOW SV ãã³ããŒãªã³ã©ã€ã (å ±æããã·ã¥ã®ãããã) ã§ãããã©ããã瀺ã U32 å€ãè¿ããŸãã
ã㌠ã¹ã«ã©ãŒããŸã㯠5.9.0 ã COW çšã«æ§æãããŠããå Žåã¯å®å šãª Copy On Write ã¹ã«ã©ãŒ)ã
U32 SvIsCOW(SV* sv)
SvIsCOW_shared_hash
SV ãã³ããŒãªã³ã©ã€ãå ±æããã·ã¥ ããŒã§ãããã©ããã瀺ãããŒã«å€ãè¿ããŸãã
ã¹ã«ã©ãŒã
bool SvIsCOW_shared_hash(SV* sv)
SvIV æå®ããã SV ãæŽæ°ã«åŒ·å¶å€æããŠè¿ããŸãã ããŒãžã§ã³ã«ã€ããŠã¯ãSvIVxããåç §ããŠãã ããã
ããã«ãããsv ã XNUMX åã ãè©äŸ¡ãããããšãä¿èšŒãããŸãã
IV SvIV(SV* sv)
SvIVX ãã§ãã¯ãå€æãè¡ããã«ãSV ã® IV ã¹ãããã®çã®å€ãè¿ããŸãã ã®ã¿
SvIOK ã true ã§ããããšã確å®ãªå Žåã«äœ¿çšããŠãã ããã ãSvIV()ããåç §ããŠãã ããã
IV SvIVX(SV* sv)
SvIVx æå®ããã SV ãæŽæ°ã«åŒ·å¶å€æããŠè¿ããŸãã ãsvããè©äŸ¡ããããšãä¿èšŒããŸã
XNUMXåã ãã ãsvããå¯äœçšã®ããåŒã§ããå Žåã«ã®ã¿ããã䜿çšãããã以å€ã®å Žåã¯äœ¿çšããŸãã
ããå¹ççãªãSvIVãã䜿çšããŠãã ããã
IV SvIVx(SV* sv)
SvIV_nomg
ãSvIVããšäŒŒãŠããŸãããéæ³ãåŠçããŸããã
IV SvIV_nomg(SV* sv)
SvIV_set
sv ã® IV ãã€ã³ã¿ã®å€ã val ã«èšå®ããŸãã åãããã«å®è¡ããããšãå¯èœã§ã
ãSvIVXããžã®å·ŠèŸºå€å²ãåœãŠã䜿çšãããã®ãã¯ãã®é¢æ°ã å°æ¥ã® Perls ã§ã¯ã
ãã ãã巊蟺å€ã®ä»£ããã«ãSvIV_setãã䜿çšããæ¹ãå¹ççã§ãã
ãSvIVXãã«å²ãåœãŠãŸãã
void SvIV_set(SV* sv, IV val)
SvLEN SV å ã®æååãããã¡ã®ãµã€ãºãè¿ããŸãïŒäžéšã¯å«ãŸããŸããïŒã
ãSvOOKãã«èµ·å ããŸãã ãSvCURããåç §ããŠãã ããã
ã¹ãã¬ã³ ã¹vLEN(SV* sv)
SvLEN_set
SV ã«å«ãŸããæååã®å®éã®é·ããèšå®ããŸãã ãSvIV_setããåç §ããŠãã ããã
void SvLEN_set(SV* sv, STRLEN len)
SvMAGIC_set
sv ã® MAGIC ãã€ã³ã¿ã®å€ã val ã«èšå®ããŸãã ãSvIV_setããåç §ããŠãã ããã
void SvMAGIC_set(SV* sv, MAGIC* val)
SvNIOK SV ã«æ°å€ãæŽæ°ããŸãã¯ããããå«ãŸãããã瀺ã U32 å€ãè¿ããŸãã
ããã«ã
U32 SvNIOK(SV* sv)
SvNIOKp SV ã«æ°å€ãæŽæ°ããŸãã¯ããããå«ãŸãããã瀺ã U32 å€ãè¿ããŸãã
ããã«ã ãã§ãã¯ããŸã ãã©ã€ããŒã èšå®ã 代ããã«ãSvNIOKãã䜿çšããŠãã ããã
U32 SvNIOKp(SV* sv)
SvNIOK_off
SV ã® NV/IV ã¹ããŒã¿ã¹ãèšå®è§£é€ããŸãã
void SvNIOK_off(SV* sv)
SvNOK SV ã« double ãå«ãŸããŠãããã©ããã瀺ã U32 å€ãè¿ããŸãã
U32 SvNOK(SV* sv)
SvNOKp SV ã« double ãå«ãŸããŠãããã©ããã瀺ã U32 å€ãè¿ããŸãã ãã§ãã¯ããŸã
ãã©ã€ããŒã èšå®ã 代ããã«ãSvNOKãã䜿çšããŠãã ããã
U32 SvNOKp(SV* sv)
SvNOK_off
SV ã® NV ã¹ããŒã¿ã¹ã®èšå®ã解é€ããŸãã
void SvNOK_off(SV* sv)
SvNOK_on
SV ã«ããã double ã§ããããšãäŒããŸãã
void SvNOK_on(SV* sv)
SvNOK_only
SV ã«ããã double ã§ããããšãäŒããä»ã®ãã¹ãŠã® OK ããããç¡å¹ã«ããŸãã
void SvNOK_only(SV* sv)
SvNV æå®ããã SV ã double ã«åŒ·å¶å€æããŠè¿ããŸãã ããŒãžã§ã³ã«ã€ããŠã¯ãSvNVxããåç §ããŠãã ããã
sv ã XNUMX åã ãè©äŸ¡ããããšãä¿èšŒããŸãã
NV SvNV(SV* sv)
SvNVX ãã§ãã¯ãå€æãè¡ããã«ãSV ã® NV ã¹ãããã®çã®å€ãè¿ããŸãã ã®ã¿
SvNOK ã true ã§ããããšã確å®ãªå Žåã«äœ¿çšããŸãã ãSvNV()ããåç §ããŠãã ããã
NV SvNVX(SV* sv)
SvNVx æå®ããã SV ã double ã«åŒ·å¶å€æããŠè¿ããŸãã ãsvãã®ã¿ãè©äŸ¡ããããšãä¿èšŒããŸã
äžåºŠã ãsvããå¯äœçšã®ããåŒã§ããå Žåã«ã®ã¿ããã䜿çšãããã以å€ã®å Žåã¯
ããå¹ççãªãSvNVãã
NV SvNVx(SV* sv)
SvNV_nomg
ãSvNVããšäŒŒãŠããŸãããéæ³ãåŠçããŸããã
NV SvNV_nomg(SV* sv)
SvNV_set
sv ã® NV ãã€ã³ã¿ã®å€ã val ã«èšå®ããŸãã ãSvIV_setããåç §ããŠãã ããã
void SvNV_set(SV* sv, NV val)
SvOK å€ãå®çŸ©ãããŠãããã©ããã瀺ã U32 å€ãè¿ããŸãã ããã ãã§ã
ã¹ã«ã©ãŒã«ãšã£ãŠæå³ããããŸãã
U32 SvOK(SV* sv)
SvOOK æååãããã¡ãžã®ãã€ã³ã¿ããªãã»ãããããŠãããã©ããã瀺ã U32 ãè¿ããŸãã ãã
ããã¯ã¯ãæåã®å é ããã®åé€ãé«éåããããã«å éšçã«äœ¿çšãããŸãã
SVPVã SvOOK ã true ã®å Žåãå²ãåœãŠãããæååãããã¡ã®å é ã¯æ¬¡ã®ãšããã§ãã
å®éã«ã¯ SvPVX ããããSvOOK_offset()ããã€ãåã§ãã ãã®ãªãã»ããã¯ä»¥åã¯æ¬¡ã®å Žæã«ä¿åãããŠããŸããã
SvIVX ã§ãããçŸåšã¯ãããã¡ã®äºåéšåã«æ ŒçŽãããŠããŸãã
U32 SvOOK(SV* sv)
SvOOK_offset
èªã¿èŸŒã¿ãŸã LEN SvPVX ããå²ãåœãŠããããã¡ã€ã«ã®çã®éå§äœçœ®ãŸã§ã®ãªãã»ãã
ãããã¡ããsv_chopãã䜿çšããŠå¹ççã«åé€ããå Žåã¯ãŒã以å€ã«ãªããŸãã
ãããã¡ã®å é ããã®æåã ãã¯ããšããŠå®è£ ãããŸãã
ã®ã¢ãã¬ã¹ LENãã¿ã€ãã¯ãSTRLENãã§ããå¿ èŠããããŸãã è©äŸ¡ãã sv äžå以äžã
ã»ãã LEN ãSvOOK(sv)ãã false ã®å Žå㯠0 ã«ãªããŸãã
void SvOOK_offset(NN SV*sv, STRLEN len)
SvPOK SV ã«æååãå«ãŸããŠãããã©ããã瀺ã U32 å€ãè¿ããŸãã
U32 SvPOK(SV* sv)
SvPOKp SV ã«æååãå«ãŸããŠãããã©ããã瀺ã U32 å€ãè¿ããŸãã å°åæ
ã ãã©ã€ããŒã èšå®ã 代ããã«ãSvPOKãã䜿çšããŠãã ããã
U32 SvPOKp(SV* sv)
SvPOK_off
SV ã® PV ã¹ããŒã¿ã¹ã®èšå®ã解é€ããŸãã
void SvPOK_off(SV* sv)
SvPOK_on
SV ã«ãããæååã§ããããšãäŒããŸãã
void SvPOK_on(SV* sv)
SvPOK_only
SV ã«ãããæååã§ããããšãäŒããä»ã®ãã¹ãŠã® OK ããããç¡å¹ã«ããŸãã ãåããŸã
UTF-8ã¹ããŒã¿ã¹ããªãã«ããŸãã
void SvPOK_only(SV* sv)
SvPOK_only_UTF8
SV ã«ãããæååã§ããããšãäŒããä»ã®ãã¹ãŠã® OK ããããç¡å¹ã«ãã
UTF-8ã®ç¶æ ã®ãŸãŸã
void SvPOK_only_UTF8(SV* sv)
SvPV SV å ã®æååãžã®ãã€ã³ã¿ããŸã㯠SV ã®æåååããã圢åŒãè¿ããŸãã
SV ã«ã¯æååãå«ãŸããŸããã SV ã¯æåååãããããŒãžã§ã³ããã£ãã·ã¥ããå ŽåããããŸãã
ãSvPOKãã ãã²ãããéæ³ãæ±ãã ãlenãå€æ°ã¯æ¬¡ã®é·ãã«èšå®ãããŸãã
æåå (ããã¯ãã¯ããªã®ã§ã&len ã¯äœ¿çšããªãã§ãã ãã)ã ããŒãžã§ã³ã«ã€ããŠã¯ãSvPVxããåç §ããŠãã ããã
ããã«ãããsv ã XNUMX åã ãè©äŸ¡ãããããšãä¿èšŒãããŸãã
ãSvPV()ãã®æ»ãå€ã以äžãšçãããšããä¿èšŒã¯ãªãããšã«æ³šæããŠãã ããã
ãSvPVX(sv)ãããŸãã¯ãSvPVX(sv)ãã«æå¹ãªããŒã¿ãå«ãŸããŠããããšããŸãã¯é£ç¶ããåŒã³åºã
ãSvPV(sv)ãã¯æ¯ååããã€ã³ã¿å€ãè¿ããŸãã ããã¯ããæ¹ã«ãããã®ã§ã
ãªãŒããŒããŒããã³ããŒãªã³ã©ã€ããªã©ãåŠçãããããšã ãã®ãããªå Žåã
æ»ãå€ã¯äžæãããã¡ãªã©ãæãå ŽåããããŸãã ã©ãããŠãå¿ èŠãªå Žåã¯
SvPVX ãã£ãŒã«ããæå¹ã«ãã (ããšãã°ãããã«æžã蟌ãå Žå) ãåç §ããŠãã ããã
ãSvPV_forceãã
char* SvPV(SV* sv, STRLEN len)
SvPVãã€ã
ãSvPVããšäŒŒãŠããŸãããå¿ èŠã«å¿ã㊠sv ãæåã«ãã€ãè¡šçŸã«å€æããŸãã
char* SvPVbyte(SV* sv, STRLEN len)
SvPVbytex
ãSvPVããšäŒŒãŠããŸãããå¿ èŠã«å¿ã㊠sv ãæåã«ãã€ãè¡šçŸã«å€æããŸãã
sv ã XNUMX åã ãè©äŸ¡ããããšãä¿èšŒããŸãã ãã以å€ã®å Žåã¯ãããå¹ççãªãSvPVbyteãã䜿çšããŠãã ããã
char* SvPVbytex(SV* sv, STRLEN len)
SvPVbytex_force
ãSvPV_forceããšäŒŒãŠããŸãããå¿ èŠã«å¿ããŠæåã« sv ããã€ãè¡šçŸã«å€æããŸãã
sv ã XNUMX åã ãè©äŸ¡ããããšãä¿èšŒããŸãã ããå¹ççãªãSvPVbyte_forceãã䜿çšããŠãã ãã
ãããªããšã
char* SvPVbytex_force(SV* sv, STRLEN len)
SvPVbyte_force
ãSvPV_forceããšäŒŒãŠããŸãããå¿ èŠã«å¿ããŠæåã« sv ããã€ãè¡šçŸã«å€æããŸãã
char* SvPVbyte_force(SV* sv, STRLEN len)
SvPVbyte_nolen
ãSvPV_nolenããšäŒŒãŠããŸãããå¿ èŠã«å¿ããŠæåã« sv ããã€ãè¡šçŸã«å€æããŸãã
char* SvPVbyte_nolen(SV* sv)
SvPVutf8
ãSvPVããšäŒŒãŠããŸãããå¿ èŠã«å¿ããŠæåã« sv ã utf8 ã«å€æããŸãã
char* SvPVutf8(SV* sv, STRLEN len)
SvPVutf8x
ãSvPVããšäŒŒãŠããŸãããå¿ èŠã«å¿ããŠæåã« sv ã utf8 ã«å€æããŸãã è©äŸ¡ã®ä¿èšŒ
SV 㯠8 åã ãã§ãã ãã以å€ã®å Žåã¯ãããå¹ççãªãSvPVutfXNUMXãã䜿çšããŠãã ããã
char* SvPVutf8x(SV* sv, STRLEN len)
SvPVutf8x_force
ãSvPV_forceããšäŒŒãŠããŸãããå¿ èŠã«å¿ããŠæåã« sv ã utf8 ã«å€æããŸãã ãä¿èšŒããŸã
sv ã 8 åã ãè©äŸ¡ããŸãã ãã以å€ã®å Žåã¯ãããå¹ççãªãSvPVutfXNUMX_forceãã䜿çšããŠãã ããã
char* SvPVutf8x_force(SV* sv, STRLEN len)
SvPVutf8_force
ãSvPV_forceããšäŒŒãŠããŸãããå¿ èŠã«å¿ããŠæåã« sv ã utf8 ã«å€æããŸãã
char* SvPVutf8_force(SV* sv, STRLEN len)
SvPVutf8_nolen
ãSvPV_nolenããšäŒŒãŠããŸãããå¿ èŠã«å¿ããŠæåã« sv ã utf8 ã«å€æããŸãã
char* SvPVutf8_nolen(SV* sv)
SvPVX SV å ã®ç©çæååãžã®ãã€ã³ã¿ãè¿ããŸãã SV ã«ã¯æååãå«ãŸããŠããå¿ èŠããããŸãã
5.9.3 ããåã§ã¯ãSV ã®ã¿ã€ãã >= ã§ãªãéãããã®ãã¯ããå®è¡ããã®ã¯å®å šã§ã¯ãããŸããã
SVt_PVã
ããã¯ãèªåããŒãããããµãã«ãŒãã³ã®ååã XS AUTOLOAD ã«ä¿åããããã«ã䜿çšãããŸãã
ã«ãŒãã£ãŒã³ã perlguts ã®ãXSUB ã«ããèªåããŒãããåç §ããŠãã ããã
char* SvPVX(SV* sv)
SvPVx ãsvãã XNUMX åã ãè©äŸ¡ããããšãä¿èšŒãããSvPVãã®ããŒãžã§ã³ã 以äžã®å Žåã«ã®ã¿ããã䜿çšããŠãã ãã
ãsvãã¯å¯äœçšã®ããåŒã§ãããã以å€ã®å Žåã¯ãããå¹ççãªãSvPVãã䜿çšããŠãã ããã
char* SvPVx(SV* sv, STRLEN len)
SvPV_å
ãSvPVããšäŒŒãŠããŸãããSV ã«æåå (ãSvPOKã) ã®ã¿ã匷å¶çã«å«ããŸãã
æåå (ãSvPOK_onlyã)ãããã¯ãŸãã¯è©æ¬ºåž«ã«ãã£ãŠã ãããªãåãå¿ èŠã
ãSvPVXããçŽæ¥æŽæ°ããŠãã ããã ããã»ã¹ã«ã¯éæ³ãããããŸãã
ä»»æã®ã¹ã«ã©ãŒããã¬ãŒã³ PV ã«åŒ·å¶ãããšãæœåšçã«ã¹ããªãããããå¯èœæ§ãããããšã«æ³šæããŠãã ããã
ããããåŸãããæçšãªããŒã¿ã ããšãã°ãSV ããSvROKãã®å Žåãåç §å ã¯æ¬¡ã®ããã«ãªããŸãã
åç §ã«ãŠã³ãããã¯ãªã¡ã³ããããSV èªäœã
" ãªã©ã®å€ãå«ãæååãããã¡ãæ〠"SvPOK" ã¹ã«ã©ãŒã¢ã¬ã€(0x1234)ãã
char* SvPV_force(SV* sv, STRLEN len)
SvPV_force_nomg
ãSvPV_forceããšäŒŒãŠããŸãããget ããžãã¯ãåŠçããŸããã
char* SvPV_force_nomg(SV* sv, STRLEN len)
SvPV_nolen
ãSvPVããšäŒŒãŠããŸãããé·ãå€æ°ãèšå®ããŸããã
char* SvPV_nolen(SV* sv)
SvPV_nomg
ãSvPVããšäŒŒãŠããŸãããéæ³ãåŠçããŸããã
char* SvPV_nomg(SV* sv, STRLEN len)
SvPV_nomg_nolen
ãSvPV_nolenããšäŒŒãŠããŸãããéæ³ãåŠçããŸããã
char* SvPV_nomg_nolen(SV* sv)
SvPV_set
ããããããã¯ããªãã䜿ããããã®ã§ã¯ãªãããããããsv_usepvn_flagsãã欲ããã£ãã®ã§ãããã
ãŸãã¯ãsv_setpvnããŸãã¯ãsv_setpvsãã
"sv" å ã® PV ãã€ã³ã¿ã®å€ããPerl ã§å²ãåœãŠããã "NUL" ã§çµäºãããã€ã³ã¿ã«èšå®ããŸãã
æååãvalãã ãSvIV_setããåç §ããŠãã ããã
以åã® PV ãããã¡ãå¿ããã«è§£æŸããŠãã ããã 確èªãã¹ãããšããããããããŸãã æ°ãã€ããŠãã ãã
æ¢åã®ãã€ã³ã¿ãã³ããŒãªã³ã©ã€ããŸãã¯ãã®ä»ã®äžæ£è¡çºã«é¢äžããŠããå¯èœæ§ãããããã
ãSvOOK_off(sv)ããå®è¡ãããsv_force_normalããŸãã¯ãSvPV_forceãã䜿çšããŸãïŒãŸã㯠SvIsCOW ã確èªããŸãïŒ
flag) ã䜿çšããŠããŸããã®å€æŽãå®å šã§ããããšã確èªããŸãã ãããŠæåŸã«ãããã§ãªãå Žåã¯ã
COWããSvPV_freeããåŒã³åºããŠãåã® PV ãããã¡ã解æŸããŸãã
void SvPV_set(SV* sv, char* val)
SvREFCNT
ãªããžã§ã¯ãã®åç §ã«ãŠã³ãã®å€ãè¿ããŸãã
U32 SvREFCNT(SV* sv)
SvREFCNT_dec
æå®ããã SV ã®åç §ã«ãŠã³ãããã¯ãªã¡ã³ãããŸãã sv NULL ã®å ŽåããããŸãã
void SvREFCNT_dec(SV* sv)
SvREFCNT_dec_NN
SvREFCNT_dec ãšåãã§ãããç¥ã£ãŠããå Žåã«ã®ã¿äœ¿çšã§ããŸãã sv 㯠NULL ã§ã¯ãããŸããã ç§ãã¡ä»¥æ¥
NULL ãã©ããããã§ãã¯ããå¿ èŠããªããããé«éã§å°ããã§ãã
void SvREFCNT_dec_NN(SV* sv)
SvREFCNT_inc
æå®ããã SV ã®åç §ã«ãŠã³ããã€ã³ã¯ãªã¡ã³ãããSV ãè¿ããŸãã
次㮠SvREFCNT_inc* ãã¯ãã¯ãã¹ãŠãSvREFCNT_inc ã®æé©åãããããŒãžã§ã³ã§ãã
SvREFCNT_inc ã«çœ®ãæããããšãã§ããŸãã
SV* SvREFCNT_inc(SV* sv)
SvREFCNT_inc_NN
SvREFCNT_inc ãšåãã§ãããç¥ã£ãŠããå Žåã«ã®ã¿äœ¿çšã§ããŸãã sv 㯠NULL ã§ã¯ãããŸããã ç§ãã¡ä»¥æ¥
NULL ãã©ããããã§ãã¯ããå¿ èŠããªããããé«éã§å°ããã§ãã
SV* SvREFCNT_inc_NN(SV* sv)
SvREFCNT_inc_simple
SvREFCNT_inc ãšåãã§ãããå¯äœçšã®ãªãåŒã§ã®ã¿äœ¿çšã§ããŸãã
äžæçãªå€ãä¿åããå¿ èŠããªããããåŠçãé«éã«ãªããŸãã
SV* SvREFCNT_inc_simple(SV* sv)
SvREFCNT_inc_simple_NN
SvREFCNT_inc_simple ãšåãã§ãããç¥ã£ãŠããå Žåã«ã®ã¿äœ¿çšã§ããŸãã sv 㯠NULL ã§ã¯ãããŸããã
NULL ãã©ããããã§ãã¯ããå¿ èŠããªããããé«éãã€ãµã€ãºãå°ãããªããŸãã
SV* SvREFCNT_inc_simple_NN(SV* sv)
SvREFCNT_inc_simple_void
SvREFCNT_inc_simple ãšåãã§ããããªã¿ãŒã³ãå¿ èŠãªãå Žåã«ã®ã¿äœ¿çšã§ããŸãã
䟡å€ããã¯ãã¯æå³ã®ããå€ãè¿ãå¿ èŠã¯ãããŸããã
void SvREFCNT_inc_simple_void(SV* sv)
SvREFCNT_inc_simple_void_NN
SvREFCNT_inc ãšåãã§ãããæ»ãå€ãå¿ èŠãªãå Žåã«ã®ã¿äœ¿çšã§ããŸãã
ããªãã¯ãããç¥ã£ãŠããŸã sv 㯠NULL ã§ã¯ãããŸããããã¯ãã¯æå³ã®ããå€ãè¿ãå¿ èŠã¯ãããŸãã
å€ãå€æŽããããNULL ãã©ããããã§ãã¯ããŠãããå°ããé«éã«ãªããŸãã
void SvREFCNT_inc_simple_void_NN(SV* sv)
SvREFCNT_inc_void
SvREFCNT_inc ãšåãã§ãããæ»ãå€ãå¿ èŠãªãå Žåã«ã®ã¿äœ¿çšã§ããŸãã
ãã¯ãã¯æå³ã®ããå€ãè¿ãå¿ èŠã¯ãããŸããã
void SvREFCNT_inc_void(SV* sv)
SvREFCNT_inc_void_NN
SvREFCNT_inc ãšåãã§ãããæ»ãå€ãå¿ èŠãªãå Žåã«ã®ã¿äœ¿çšã§ããŸãã
ããªãã¯ãããç¥ã£ãŠããŸã sv 㯠NULL ã§ã¯ãããŸããããã¯ãã¯æå³ã®ããå€ãè¿ãå¿ èŠã¯ãããŸãã
å€ãå€æŽããããNULL ãã©ããããã§ãã¯ããŠãããå°ããé«éã«ãªããŸãã
void SvREFCNT_inc_void_NN(SV* sv)
SvROK SV ã RV ã§ãããã©ããããã¹ãããŸãã
U32 SvROK(SV* sv)
SvROK_off
SV ã® RV ã¹ããŒã¿ã¹ã®èšå®ã解é€ããŸãã
void SvROK_off(SV* sv)
SvROK_on
SV ã« RV ã§ããããšãäŒããŸãã
void SvROK_on(SV* sv)
SvRV RV ãéåç §ã㊠SV ãè¿ããŸãã
SV* SvRV(SV* sv)
SvRV_set
sv ã® RV ãã€ã³ã¿ã®å€ã val ã«èšå®ããŸãã ãSvIV_setããåç §ããŠãã ããã
void SvRV_set(SV* sv, SV* val)
SvSTASH SV ã®ã¹ã¿ãã·ã¥ãè¿ããŸãã
HV* SvSTASH(SV* sv)
SvSTASH_set
sv ã® STASH ãã€ã³ã¿ã®å€ã val ã«èšå®ããŸãã ãSvIV_setããåç §ããŠãã ããã
void SvSTASH_set(SV* sv, HV* val)
SvTAINT æ±æãæå¹ã§ãããçŸåšã®åŒã«äœããã®å ¥åããã£ãå Žåã« SV ãæ±æããŸãã
æ±æãããŠããŸã -- éåžžã¯å€æ°ã§ããããã±ãŒã«ãªã©ã®æé»çãªå ¥åãæ±æãããŠããå¯èœæ§ããããŸã
èšå®ã ãSvTAINTãã¯ããã®æ±æãåŒã®åºåã«äŒæããŸãã
æ²èŠ³çãªããæ¹ã§ãã€ãŸããæ£ç¢ºã«ã©ãã§ãããã«æ³šæãæãããšãªãã
åºåã¯ã©ã®å ¥åã®åœ±é¿ãåãããã
void SvTAINT(SV* sv)
SVTAINTED
SV ãæ±æãããŠãããã©ããã確èªããŸããååšããå Žå㯠TRUE ãè¿ããããã§ãªãå Žå㯠FALSE ãè¿ããŸãã
bool SvTAINTED(SV* sv)
SvTAINTED_off
SV ã®æ±ããåãé€ããŸãããªã éåžžã« ãã®ã«ãŒãã³ã§ã¯äžéšã®åè·¯ãç絡ãããã泚æããŠãã ããã
Perl ã®åºæ¬çãªã»ãã¥ãªãã£æ©èœã XS ã¢ãžã¥ãŒã«ã®äœæè ã¯ããã䜿çšããªãã§ãã ãã
ç¡æ¡ä»¶ã®æå³ããã¹ãŠå®å šã«ç解ããªãéãæ©èœããŸããã
䟡å€ãæ±ããªãããšãæ±æã®è§£é€ã¯ãæšæºã® Perl ã®æ¹æ³ã§è¡ãå¿ èŠããããŸãã
å€æ°ãçŽæ¥æ±æããªãã®ã§ã¯ãªãã泚ææ·±ãäœæãããæ£èŠè¡šçŸã§ãã
void SvTAINTED_off(SV* sv)
SvTAINTED_on
æ±æãæå¹ãªå ŽåãSV ãæ±ææžã¿ãšããŠããŒã¯ããŸãã
void SvTAINTED_on(SV* sv)
SvTRUE Perl ã SV ã true ãšããŠè©äŸ¡ããã false ãšããŠè©äŸ¡ãããã瀺ãããŒã«å€ãè¿ããŸãã
èŠã SvOK() å®çŸ©æžã¿/æªå®çŸ©ã®ãã¹ãçšãã¹ã«ã©ãŒãããã§ãªãå Žåãé€ãããgetãããžãã¯ãåŠçããŸãã
ãã§ã« SvPOKãSvIOKããŸã㯠SvNOK (ãã©ã€ããŒã ãã©ã°ã§ã¯ãªããããªã㯠ãã©ã°)ã
bool SvTRUE(SV* sv)
SvTRUE_nomg
Perl ã SV ã true ãšããŠè©äŸ¡ããã false ãšããŠè©äŸ¡ãããã瀺ãããŒã«å€ãè¿ããŸãã
èŠã SvOK() å®çŸ©æžã¿/æªå®çŸ©ã®ãã¹ãçšã ãgetãéæ³ã¯æ±ããŸããã
bool SvTRUE_nomg(SV* sv)
SvTYPE SV ã®ã¿ã€ããè¿ããŸãã ãsvtypeããåç §ããŠãã ããã
svtype SvTYPE(SV* sv)
SvUOK SV ã«å¿ é ã®æŽæ°ãå«ãŸããŠãããã©ããã瀺ãããŒã«å€ãè¿ããŸãã
眲åãããŠããªããã®ãšããŠè§£éãããŸãã å€ãç¯å²å ã«ããéè² ã®æŽæ°
IV ãš UV ã®äž¡æ¹ã®ãã©ã°ã¯ãSvUOK ãŸã㯠SVIOK ãšããŠèšå®ã§ããŸãã
bool SvUOK(SV* sv)
SvUPGRADE
SV ãããè€éãªåœ¢åŒã«ã¢ããã°ã¬ãŒãããããã«äœ¿çšãããŸãã ãsv_upgradeãã䜿çšããŠã
å¿ èŠã«å¿ããŠã¢ããã°ã¬ãŒãããŸãã ãsvtypeããåç §ããŠãã ããã
void SvUPGRADE(SV* sv, svtype ã¿ã€ã)
SvUTF8 SV ã® UTF-32 ã¹ããŒã¿ã¹ã瀺ã U8 å€ãè¿ããŸããç©äºãã»ããã¢ãããããŠããå Žå
æ£ããã¯ããã㯠SV ã« UTF-8 ãšã³ã³ãŒããããããŒã¿ãå«ãŸããŠãããã©ããã瀺ããŸããããªã
ããã䜿ãã¹ãã§ã After ãžã®é»è©± SvPVïŒïŒ ãŸãã¯ãã®ããªã¢ã³ãã® 1 ã€ïŒåŒã³åºãããã£ãå ŽåïŒ
æååã®ãªãŒããŒããŒãã¯å éšãã©ã°ãæŽæ°ããŸãã
bytes ãã©ã°ããèæ ®ããå Žåã¯ã代ããã«ãDO_UTF8ãã䜿çšããŠãã ããã
U32 SvUTF8(SV* sv)
SvUTF8_off
SV ã® UTF-8 ã¹ããŒã¿ã¹ãèšå®è§£é€ããŸã (ããŒã¿ã¯å€æŽãããããã©ã°ã®ã¿ãå€æŽãããŸã)ãããªãã§ãã ãã
軜èã«äœ¿ãã
void SvUTF8_off(SV *sv)
SvUTF8_on
SV ã® UTF-8 ã¹ããŒã¿ã¹ããªã³ã«ããŸã (ããŒã¿ã¯å€æŽãããããã©ã°ã®ã¿ãå€æŽãããŸã)ããã
軜çã«äœ¿çšããªãã§ãã ããã
void SvUTF8_on(SV *sv)
SvUV æå®ããã SV ã笊å·ãªãæŽæ°ã«åŒ·å¶å€æããŠè¿ããŸãã詳现ã«ã€ããŠã¯ããSvUVxããåç §ããŠãã ããã
sv ã 1 åã ãè©äŸ¡ããããšãä¿èšŒããããŒãžã§ã³ã
UV SvUV(SV* sv)
SvUVX ãã§ãã¯ãå€æãè¡ããã«ãSV ã® UV ã¹ãããã®çã®å€ãè¿ããŸããã®ã¿
SvIOK ã true ã§ããããšã確å®ãªå Žåã«äœ¿çšããŠãã ããã ãSvUV()ããåç §ããŠãã ããã
UV SvUVX(SV* sv)
SvUVx æå®ããã SV ã笊å·ãªãæŽæ°ã«åŒ·å¶å€æããŠè¿ããŸãããä¿èšŒããŸã
ãsvã㯠1 åã ãè©äŸ¡ããŸãã ãsvãããµã€ãä»ãã®åŒã§ããå Žåã«ã®ã¿ããã䜿çšããŸãã
ãã以å€ã®å Žåã¯ãããå¹ççãªãSvUVãã䜿çšããŠãã ããã
UV SvUVx(SV* sv)
SvUV_nomg
ãSvUVãã«äŒŒãŠããŸãããéæ³ãåŠçããŸããã
UV SvUV_nomg(SV* sv)
SvUV_set
sv ã® UV ãã€ã³ã¿ã®å€ã val ã«èšå®ããŸãã ãSvIV_setããåç §ããŠãã ããã
void SvUV_set(SV* sv, UV val)
SvVOK SV ã« v-string ãå«ãŸããŠãããã©ããã瀺ãããŒã«å€ãè¿ããŸãã
bool SvVOK(SV* sv)
sv_catpvn_nomg
ãsv_catpvnããšäŒŒãŠããŸãããéæ³ãåŠçããŸããã
void sv_catpvn_nomg(SV* sv, const char* ptr,
STRLENã¬ã³ïŒ
sv_catpv_nomg
ãsv_catpvããšäŒŒãŠããŸãããéæ³ãåŠçããŸããã
void sv_catpv_nomg(SV* sv, const char* ptr)
sv_catsv_nomg
ãsv_catsvããšäŒŒãŠããŸãããéæ³ãåŠçããŸããã
void sv_catsv_nomg(SV* dsv, SV* ssv)
sv_derived_from
ãsv_derived_from_pvããšãŸã£ããåãã§ããããflagsããã©ã¡ãŒã¿ãåããŸããã
bool sv_derived_from(SV* sv, const char *const å)
sv_derived_from_pv
ãsv_derived_from_pvnããšãŸã£ããåãã§ãããæååã®ä»£ããã« NULL ã§çµããæååãåãåããŸãã
æåå/é·ãã®ãã¢ã
bool sv_derived_from_pv(SV* sv,
const char *å®æ°åã
U32 ãã©ã°)
sv_derived_from_pvn
SV ãæå®ãããã¯ã©ã¹ãã掟çãããã©ããã瀺ãããŒã«å€ãè¿ããŸãã at
ã C ã¬ãã«ã Perl ã¬ãã«ã§å°åºã確èªããã«ã¯ãéåžžã® Perl ãšããŠãisa()ããåŒã³åºããŸãã
æ¹æ³ã
çŸåšããflagsãã®å¯äžã®éèŠãªå€ã¯ SVf_UTF8 ã§ãã
bool sv_derived_from_pvn(SV* sv,
const char *å®æ°åã
const STRLEN lenãU32 ãã©ã°)
sv_derived_from_sv
ãsv_derived_from_pvnããšãŸã£ããåãã§ãããSV ã®åœ¢åŒã§ååæååãåãåããŸãã
æååãšé·ãã®ãã¢ã®ä»£ããã«ã
bool sv_derived_from_sv(SV* sv, SV *namesv,
U32 ãã©ã°)
sv_does ãsv_does_pvããšäŒŒãŠããŸããããflagsããã©ã¡ãŒã¿ãåããŸããã
bool sv_does(SV* sv, const char *const å)
sv_does_pv
ãsv_does_svããšäŒŒãŠããŸãããSV ã®ä»£ããã« NULL ã§çµããæååãåãåããŸãã
bool sv_does_pv(SV* sv, const char *const å,
U32 ãã©ã°)
sv_does_pvn
ãsv_does_svããšäŒŒãŠããŸãããSV ã®ä»£ããã«æååãšé·ãã®ãã¢ãåãåããŸãã
bool sv_does_pvn(SV* sv, const char *const å,
const STRLEN lenãU32 ãã©ã°)
sv_does_sv
SV ãç¹å®ã®ååä»ãããŒã«ãå®è¡ãããã©ããã瀺ãããŒã«å€ãè¿ããŸããã®
SV ã«ã¯ãPerl ãªããžã§ã¯ããŸã㯠Perl ã¯ã©ã¹ã®ååãæå®ã§ããŸãã
bool sv_does_sv(SV* svãSV* namesvãU32 ãã©ã°)
sv_report_used
ãŸã 解æŸãããŠããªããã¹ãŠã® SV ã®å 容ããã³ãããŸã (ãããã°æ¯æŽ)ã
void sv_report_used()
sv_setsv_nomg
ãsv_setsvããšäŒŒãŠããŸãããéæ³ãåŠçããŸããã
void sv_setsv_nomg(SV* dsv, SV* ssv)
sv_utf8_upgrade_nomg
sv_utf8_upgrade ãšäŒŒãŠããŸããããsvãã«å¯ŸããŠéæ³ãå®è¡ããŸããã
STRLEN sv_utf8_upgrade_nomg(NN SV *sv)
SVãã㣠å²ãåœãŠ
look_like_number
SV ã®å 容ãæ°å€ã®ããã«èŠãã (ãŸãã¯æ°å€ã§ãã) ãã©ããããã¹ãããŸãã ãã€ã³ãããš
ãç¡é倧ãã¯æ°å€ãšããŠæ±ãããŸã (ãããã£ãŠãæ°å€ä»¥å€ã®èŠåã¯çºè¡ãããŸãã)ã
ããããªãã® atof() 圌ããäžå¿«ã«ãããŸããã Get-magic ã¯ç¡èŠãããŸãã
I32 èŠãç®ã®æ°(SV *const sv)
newRV_noinc
SV ã® RV ã©ãããŒãäœæããŸãã å ã® SV ã®åç §ã«ãŠã³ãã¯æ¬¡ã®ãšããã§ãã
å¢å ããŸããã
SV* newRV_noinc(SV *const tmpRef)
newSV æ°ããSVãäœæããŸãããŒã以å€ã®ãlenããã©ã¡ãŒã¿ã¯ã
SV ãæã€å¿ èŠãããäºåã«å²ãåœãŠãããæååã¹ããŒã¹ãæ«å°Ÿã®ãNULãã®è¿œå ãã€ã
ãäºçŽãããŠããŸãã (æååã¹ããŒã¹ãæå®ãããŠããŠããSV ã«ã¯ SvPOK ã¯èšå®ãããŸãã)
æ°ãã SV ã®åç §ã«ãŠã³ã㯠1 ã«èšå®ãããŸãã
5.9.3幎ã«ã¯ã newSV() å€ããã®ã眮ãæããŸã ãã¥ãŒã¹SV() API ãäœæããæåã®ãã©ã¡ãŒã¿ãåé€ããŸãã
xãåŒã³åºãå ãèªåèªèº«ãèå¥ã§ããããã«ãããããã°è£å©ããã®æŽå©ã¯ã
æ°ãããã«ã ãªãã·ã§ã³ PERL_MEM_LOG ã«çœ®ãæããããŸãã (ãPERL_MEM_LOGããåç §)
perlhacktips)ã å€ã API ã¯ãXS ã¢ãžã¥ãŒã«ã§äœ¿çšããããã«ãŸã ååšããŠããŸãã
å€ãããŒã«ã
SV* newSV(const STRLEN len)
æ°ããSVhek
ããã·ã¥ ããŒæ§é ããæ°ãã SV ãäœæããŸããããã¯ãã€ã³ãããã¹ã«ã©ãŒãçæããŸã
å¯èœãªå Žåã¯å ±ææååããŒãã«ã«ã³ããŒããŸãã次ã®å Žåãæ°ãã (æªå®çŸ©) SV ãè¿ããŸãã
hek 㯠NULL ã§ãã
SV* newSVhek(const HEK *const hek)
newSViv æ°ãã SV ãäœæããããã«æŽæ°ãã³ããŒããŸãã SV ã®åç §ã«ãŠã³ãã¯æ¬¡ã®ãšããã§ãã
1ã«èšå®ããŸãã
SV* newSViv(const IV i)
newSVnv æ°ãã SV ãäœæããããã«æµ®åå°æ°ç¹å€ãã³ããŒããŸããåç §ã«ãŠã³ã
SV 㯠1 ã«èšå®ãããŸãã
SV* newSVnv(const NV n)
newSVpv æ°ãã SV ãäœæããæåå (ãNULã (ã\0ã) æåãå«ãŸããå ŽåããããŸã) ãã³ããŒããŸãã
ããã«ã SV ã®åç §ã«ãŠã³ã㯠1 ã«èšå®ãããŸãããlenãã XNUMX ã®å ŽåãPerl ã¯
ã䜿çšããŠé·ããèšç®ããŸã strlenïŒïŒ, (ã€ãŸãããã®ãªãã·ã§ã³ã䜿çšãããšããsãã
ãNULãæåãåã蟌ãããšã¯ã§ãããçµç«¯ã®ãNULããã€ããå¿ èŠã§ãïŒã
å¹çãé«ããããã«ã代ããã«ãnewSVpvnãã®äœ¿çšãæ€èšããŠãã ããã
SV* newSVpv(const char *const s, const STRLEN len)
æ°ããSVpvf
æ°ãã SV ãäœæãããsprintfãã®ãããªåœ¢åŒã®æååã§åæåããŸãã
SV* newSVpvf(const char *const pat, ...)
æ°ããSVpvn
æ°ãã SV ãäœæããããã«æååãã³ããŒããŸããæååã«ã¯ãNULãæåãå«ãŸããå ŽåããããŸãã
("\0") ããã³ãã®ä»ã®ãã€ã㪠ããŒã¿ã SV ã®åç §ã«ãŠã³ã㯠1 ã«èšå®ãããŸãã
ãlenãããŒãã®å ŽåãPerl ã¯é·ã 0 ã® (Perl) æååãäœæããŸããããªãã¯
ãœãŒã¹ãããã¡ãå°ãªããšããlenããã€ãé·ã§ããããšãä¿èšŒãã責任ããããŸãããã
ãbufferãåŒæ°ã NULL ã®å Žåãæ°ãã SV ã¯æªå®çŸ©ã«ãªããŸãã
SV* newSVpvn(const char *const s, const STRLEN len)
newSVpvn_flags
æ°ãã SV ãäœæããæåå (ãNULã (ã\0ã) æåãå«ãŸããå ŽåããããŸã) ãã³ããŒããŸãã
ããã«ã SV ã®åç §ã«ãŠã³ã㯠1 ã«èšå®ãããŸãããlenãã XNUMX ã®å Žåã
Perl ã¯é·ã 0 ã®æååãäœæããŸããããªãã«ã¯ã次ã®ããšãä¿èšŒãã責任ããããŸãã
ãœãŒã¹æååã®é·ãã¯å°ãªããšããlenããã€ãã§ãã ãsãåŒæ°ã NULL ã®å Žåãæ°ãã
SVã¯äžå®ãšãªããŸããçŸåšåãå ¥ãããããã©ã° ãããã¯ãSVf_UTF8ããšãSVf_UTFXNUMXãã®ã¿ã§ãã
ãSVs_TEMPãã ãSVs_TEMPããèšå®ãããŠããå Žåãçµæã«å¯ŸããŠãsv_2mortal()ããåŒã³åºãããŸãã
æ»ãåã«ã ãSVf_UTF8ããèšå®ãããŠããå Žåããsã㯠UTF-8 ã§ãããšã¿ãªããã
æ°ãã SV ã«ã¯ãSVf_UTF8ããã©ã°ãèšå®ãããŸãã ãnewSVpvn_utf8()ãã¯äŸ¿å©ã§ã
ãã®é¢æ°ã®ã©ãããŒã次ã®ããã«å®çŸ©ãããŸãã
#define newSVpvn_utf8(s, len, u) \
newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
SV* newSVpvn_flags(const char *const s,
const STRLEN ã¬ã³ã
const U32 ãã©ã°)
newSVpvn_share
æååå ã®å ±ææååãæã SvPVX_const ã䜿çšããŠæ°ãã SV ãäœæããŸã
ããŒãã«ãæååãããŒãã«ã«ãŸã ååšããªãå Žåã¯ãæåã«æååãäœæãããŸãã
SvIsCOW ãã©ã°ããªã³ã«ããŸã (ãŸã㯠5.16 以åã§ã¯ READONLY ãš FAKE)ããã
ãhashããã©ã¡ãŒã¿ããŒã以å€ã®å Žåã¯ããã®å€ã䜿çšãããŸãããã以å€ã®å Žåã¯ãããã·ã¥ãèšç®ãããŸãã
æååã®ããã·ã¥ã¯ãåŸã§ãSvSHARED_HASH()ãã䜿çšã㊠SV ããååŸã§ããŸãã
倧ãããããã§ã®èãæ¹ã¯ãæååããŒãã«ãå ±æããã·ã¥ããŒã«äœ¿çšãããããã§ãã
ãããã®æååã«ã¯ SvPVX_const == HeKEY ãå«ãŸããããã·ã¥æ€çŽ¢ã§ã¯æååãåé¿ãããŸãã
æ¯èŒããŠãã ããã
SV* newSVpvn_share(const char* sãI32 lenãU32 ããã·ã¥)
æ°ããSVpv
ãnewSVpvnããšäŒŒãŠããŸãããæååã®ä»£ããã«ãªãã©ã«ã®ãNULãã§çµããæååãåãåããŸãã
æåå/é·ãã®ãã¢ã
SV* newSVpvs(const char* s)
newSVpvs_flags
ãnewSVpvn_flagsããšäŒŒãŠããŸãããæååã®ä»£ããã«ãªãã©ã«ã®ãNULãã§çµããæååãåãåããŸãã
æåå/é·ãã®ãã¢ã
SV* newSVpvs_flags(const char* sãU32 ãã©ã°)
newSVpvs_share
ãnewSVpvn_shareããšäŒŒãŠããŸãããæååã®ä»£ããã«ãªãã©ã«ã®ãNULãã§çµããæååãåãåããŸãã
æååãšé·ãã®ãã¢ã§ãããããã·ã¥ ãã©ã¡ãŒã¿ã¯çç¥ãããŸãã
SV* newSVpvs_share(const char* s)
newSVpv_share
ãnewSVpvn_shareããšäŒŒãŠããŸãããæååã®ä»£ããã«ãNULãã§çµããæååãåãåããŸãã
æåå/é·ãã®ãã¢ã
SV* newSVpv_share(const char* sãU32 ããã·ã¥)
newSVrv æ¢åã® RVãrvããæãæ°ãã SV ãäœæããŸãã ãrvãã RV ã§ã¯ãªãå Žå
ãã®åŸã1 ã«ã¢ããã°ã¬ãŒããããŸãã ãclassnameãã null ã§ãªãå Žåãæ°ãã SV ã¯æ¬¡ã®ããã«ãªããŸãã
æå®ãããããã±ãŒãžã§ç¥çŠãããŸããæ°ãã SV ãšãã®åç §ãè¿ãããŸã
count 㯠1 ã§ããåç §ã«ãŠã³ã 1 ã¯ãrvãã«ãã£ãŠææãããŸãã
SV* newSVrv(SV *const rv,
const char *const ã¯ã©ã¹å)
newSVsv å ã® SV ã®æ£ç¢ºãªè€è£œã§ããæ°ãã SV ãäœæããŸãã (çšé
ãsv_setsvãã)
SV* newSVsv(SV *const old)
newSVuv æ°ãã SV ãäœæããããã«ç¬Šå·ãªãæŽæ°ãã³ããŒããŸããã®åç §ã«ãŠã³ã
SV 㯠1 ã«èšå®ãããŸãã
SV* newSVuv(const UV u)
æ°ããSV_type
æå®ãããã¿ã€ãã®æ°ãã SV ãäœæããŸããæ°ãã SV ã®åç §ã«ãŠã³ãã¯æ¬¡ã®ãšããã§ãã
1ã«èšå®ããŸãã
SV* newSV_type(const svtype ã¿ã€ã)
sv_2ããŒã«
ãã®ãã¯ãã䜿çšã§ããã®ã¯æ¬¡ã®å Žåã®ã¿ã§ãã sv_true() ãŸãã¯ãã®åçã®ãã¯ãã§ããã
åŸè ã®åŒæ°ã¯ SvPOKãSvIOKãSvNOK ã®ãããã§ããããŸããã sv_2bool_flags ãåŒã³åºããŸãã
SV_GMAGIC ãã©ã°ã
bool sv_2bool(SV *const sv)
sv_2bool_flags
ãã®æ©èœã䜿çšã§ããã®ã¯æ¬¡ã®å Žåã®ã¿ã§ãã sv_true() ãšå人ããããŠåŸè ã®å Žåã®ã¿
åŒæ°ã SvPOKãSvIOKãSvNOK ã®ãããã§ããããŸããããã©ã°ã« SV_GMAGIC ãå«ãŸããŠããå Žåã
ãã㯠mg_getïŒïŒ æåã
bool sv_2bool_flags(SV *svãI32 ãã©ã°)
sv_2cv ããŸããŸãªæŠç¥ã䜿çšããŠãSV ãã CV ãååŸããããšããŸããããã«ãå¯èœã§ããã°æ¬¡ã®ããã«ããŠãã ãã
*st ãš *gvp ãã¹ã¿ãã·ã¥ãšããã«é¢é£ä»ãããã GV ã«èšå®ããŸãã ãlrefãã®ãã©ã°ã¯æ¬¡ã®ãšããã§ãã
gv_fetchsv ã«æž¡ãããŸãã
CV* sv_2cv(SV* sv, HV **const st, GV **const gvp,
const I32 lref)
sv_2io ããŸããŸãªã¬ã³ãããã䜿çšããŠãSV ãã IO ãååŸããããšããŸããGV ã®å Žå㯠IO ã¹ãããã§ãããŸãã¯
RV ã®å Žåã¯ååž°çãªçµæããŸãã¯ããã®ååã«ã¡ãªãã§åä»ããããã·ã³ãã«ã® IO ã¹ããã
æååã®å Žå㯠PVã
ãGetãããžãã¯ã¯æž¡ããã SV ã§ã¯ç¡èŠãããŸãããSV ã®å Žåã¯ãSvRV(sv)ãã§åŒã³åºãããŸãã
RVã§ãã
IO* sv_2io(SV *const sv)
sv_2iv_flags
å¿ èŠãªæååå€æãè¡ã£ãŠãSV ã®æŽæ°å€ãè¿ããŸãããã
flags ã«ã¯ SV_GMAGIC ãå«ãŸããŠããã mg_getïŒïŒ åããéåžžã¯æ¬¡ã®æ¹æ³ã§äœ¿çšãããŸãã
ãSvIV(sv)ãããã³ãSvIVx(sv)ããã¯ãã
IV sv_2iv_flags(SV *const svãconst I32 ãã©ã°)
sv_2ã¢ãŒã¿ã«
æ¢åã® SV ãæ»äº¡è ãšããŠããŒã¯ããŸãã SV ã¯ãããã«ãç Žå£ãããŸãã
FREETMPS ãžã®æ瀺çãªåŒã³åºãããŸãã¯ã¹ããŒãã¡ã³ããªã©ã®å Žæã§ã®æé»çãªåŒã³åºãã«ãã
å¢çç· SvTEMP() ããªã³ã«ãªã£ãŠãããšããããšã¯ãSV ã®æååãããã¡ãŒã
ãã® SV ãã³ããŒãããå Žåã¯ãçãŸãããã ãsv_newmortalãããã³ãsv_mortalcopyããåç §ããŠãã ããã
SV* sv_2mortal(SV *const sv)
sv_2nv_flags
å¿ èŠãªæååãŸãã¯æŽæ°ã®å€æãè¡ã£ãŠãSV ã®æ°å€ãè¿ããŸãã
ãã©ã°ã« SV_GMAGIC ãå«ãŸããŠããå Žåã mg_getïŒïŒ åããéåžžã¯æ¬¡ã®æ¹æ³ã§äœ¿çšãããŸãã
ãSvNV(sv)ããã¯ããšãSvNVx(sv)ããã¯ãã
NV sv_2nv_flags(SV *const svãconst I32 ãã©ã°)
sv_2pvbyte
SV ã®ãã€ããšã³ã³ãŒãè¡šçŸãžã®ãã€ã³ã¿ãè¿ãã*lp ããã®å€ã«èšå®ããŸãã
é·ããå¯äœçšãšã㊠SV ã UTF-8 ããããŠã³ã°ã¬ãŒããããå¯èœæ§ããããŸãã
éåžžã¯ãSvPVbyteããã¯ãçµç±ã§ã¢ã¯ã»ã¹ããŸãã
char* sv_2pvbyte(SV *sv, STRLEN *const lp)
sv_2pvutf8
SV ã® UTF-8 ãšã³ã³ãŒãè¡šçŸãžã®ãã€ã³ã¿ãŒãè¿ãã *lp ããã®å€ã«èšå®ããŸãã
é·ããå¯äœçšãšã㊠SV ã UTF-8 ã«ã¢ããã°ã¬ãŒããããå¯èœæ§ããããŸãã
éåžžã¯ãSvPVutf8ããã¯ãçµç±ã§ã¢ã¯ã»ã¹ããŸãã
char* sv_2pvutf8(SV *sv, STRLEN *const lp)
sv_2pv_flags
SV ã®æååå€ãžã®ãã€ã³ã¿ãè¿ãã*lp ã«ãã®é·ããèšå®ããŸãããã
flags ã«ã¯ SV_GMAGIC ãå«ãŸããŠããã mg_getïŒïŒ åãã次ã®å Žåã« sv ãæååã«åŒ·å¶ããŸãã
å¿ èŠãéåžžã¯ãSvPV_flagsããã¯ããä»ããŠåŒã³åºãããŸãã ãsv_2pv()ããš
ãsv_2pv_nomgããéåžžã¯ããã«è¡ããŸãã
char* sv_2pv_flags(SV *const sv, STRLEN *const lp,
const I32 ãã©ã°)
sv_2uv_flags
å¿ èŠãªæååå€æãè¡ã£ãŠãSV ã®ç¬Šå·ãªãæŽæ°å€ãè¿ããŸãã
ãã©ã°ã« SV_GMAGIC ãå«ãŸããŠããå Žåã mg_getïŒïŒ åããéåžžã¯æ¬¡ã®æ¹æ³ã§äœ¿çšãããŸãã
ãSvUV(sv)ãããã³ãSvUVx(sv)ããã¯ãã
UV sv_2uv_flags(SV *const svãconst I32 ãã©ã°)
sv_backoff
æååãªãã»ãããåé€ããŸããéåžžã¯ãSvOOK_offããã¯ã ã©ãããŒã䜿çšããå¿ èŠããããŸãã
ã代ããã«ã䜿ããã ããã
int sv_backoff(SV *const sv)
sv_bless
æå®ãããããã±ãŒãžã« SV ãç¥çŠããŸãã SV 㯠RV ã§ããå¿ èŠããããŸããããã±ãŒãžã¯æ¬¡ã®ãšããã§ãã
stash ã«ãã£ãŠæå®ãããŸã (ãgv_stashpv()ããåç §)ã SV ã®åç §ã«ãŠã³ãã¯ã
圱é¿ãåããŸããã
SV* sv_bless(SV *const svãHV *const stash)
sv_catpv
ãNULãã§çµããæååãæååã®æ«å°Ÿã«é£çµããŸãã
SVã SV ã« UTF-8 ã¹ããŒã¿ã¹ãèšå®ãããŠããå Žåãè¿œå ããããã€ãã¯æ¬¡ã®ããã«ãªããŸãã
æå¹ãª UTF-8ã ãgetãããžãã¯ã¯åŠçããŸããããsetãããžãã¯ã¯åŠçããŸããã ãsv_catpv_mgããåç §ããŠãã ããã
void sv_catpv(SV *const sv, const char* ptr)
sv_catpvf
åŒæ°ããsprintfãã®ããã«åŠçãããã©ãŒããããããåºåã SV ã«è¿œå ããŸãã
è¿œå ãããããŒã¿ã«ãã¯ã€ããæå (以äžãå«ããããã«éå®ãããªã) ãå«ãŸããŠããå Žåã
%s ã§ãã©ãŒãããããã UTF-8 PV ãš %c ã§ãã©ãŒãããããã 255 ãè¶ ããæåãæ〠SV)ã
å ã® SV 㯠UTF-8 ã«ã¢ããã°ã¬ãŒããããå¯èœæ§ããããŸãã ãgetãããžãã¯ã¯åŠçããŸããããsetãããžãã¯ã¯åŠçããŸãã
éæ³ã ãsv_catpvf_mgããåç §ããŠãã ãããå ã® SV ã UTF-8 ã®å Žåããã¿ãŒã³ã¯æ¬¡ã®ããã«ãªããŸãã
æå¹ãª UTF-8;å ã® SV ããã€ãã§ããã°ããã¿ãŒã³ããã€ãã§ããå¿ èŠããããŸãã
void sv_catpvf(SV *const sv, const char *const pat,
...ïŒ
sv_catpvf_mg
ãsv_catpvfããšäŒŒãŠããŸããããsetãããžãã¯ãåŠçããŸãã
void sv_catpvf_mg(SV *const sv,
const char *const pat, ...)
sv_catpvn
SV å ã®æååã®æ«å°Ÿã«æååãé£çµããŸãã ãã¬ã³ã
ã³ããŒãããã€ãæ°ã瀺ããŸãã SV ã« UTF-8 ã¹ããŒã¿ã¹ãèšå®ãããŠããå Žåã
è¿œå ããããã€ãã¯æå¹ãª UTF-8 ã§ããå¿ èŠããããŸãã ãgetãããžãã¯ã¯åŠçããŸããããsetãããžãã¯ã¯åŠçããŸããã
ãsv_catpvn_mgããåç §ããŠãã ããã
void sv_catpvn(SV *dsv, const char *sstr, STRLEN len)
sv_catpvn_flags
SV å ã®æååã®æ«å°Ÿã«æååãé£çµããŸãã ãã¬ã³ã
ã³ããŒãããã€ãæ°ã瀺ããŸãã
ããã©ã«ãã§ã¯ãSV ã«
UTF-8 ã¹ããŒã¿ã¹ ã»ããããã以å€ã®å Žåã¯ãã€ãåã匷å¶çã«è¿œå ããããšãã§ããŸã
ãSV_CATUTF8ããã©ã°ãæå®ããããšã§ UTF-8 ãšããŠè§£éãããæååãããã³ãã€ããšããŠè§£éãããæåå
ãSV_CATBYTESããã©ã°ãæå®ããããšã«ãã£ãŠã SV ãŸãã¯è¿œå ãããæååã¯æ¬¡ã®ããã«ãªããŸãã
å¿ èŠã«å¿ã㊠UTF-8 ã«ã¢ããã°ã¬ãŒãããŸãã
ãflagsãã«ãSV_SMAGICãããããèšå®ãããŠããå Žåããã®åŸãdsvãã«ãmg_setããèšå®ãããŸãã
é©åãªã ãsv_catpvnããšãsv_catpvn_nomgãã¯ããã«é¢ããŠå®è£ ãããŠããŸã
æ©èœã
void sv_catpvn_flags(SV *const dstr,
const char *sstrã
const STRLEN ã¬ã³ã
const I32 ãã©ã°)
sv_catpvs
ãsv_catpvnããšäŒŒãŠããŸãããæååãšé·ãã®ãã¢ã®ä»£ããã«ãªãã©ã«æååãåãåããŸãã
void sv_catpvs(SV* sv, const char* s)
sv_catpvs_flags
ãsv_catpvn_flagsããšäŒŒãŠããŸãããæååã®ä»£ããã«ãªãã©ã«ã®ãNULãã§çµããæååãåãåããŸãã
æåå/é·ãã®ãã¢ã
void sv_catpvs_flags(SV* sv, const char* s,
I32 ãã©ã°)
sv_catpvs_mg
ãsv_catpvn_mgããšäŒŒãŠããŸãããæååãšé·ãã®ãã¢ã®ä»£ããã«ãªãã©ã«æååãåãåããŸãã
void sv_catpvs_mg(SV* sv, const char* s)
sv_catpvs_nomg
ãsv_catpvn_nomgããšäŒŒãŠããŸãããæååãšé·ãã®ãã¢ã®ä»£ããã«ãªãã©ã«æååãåãåããŸãã
void sv_catpvs_nomg(SV* sv, const char* s)
sv_catpv_flags
ãNULãã§çµããæååãæååã®æ«å°Ÿã«é£çµããŸãã
SVã SV ã« UTF-8 ã¹ããŒã¿ã¹ãèšå®ãããŠããå Žåãè¿œå ããããã€ãã¯æ¬¡ã®ããã«ãªããŸãã
æå¹ãª UTF-8ã ãflagsãã«ãSV_SMAGICãããããèšå®ãããŠããå Žåããmg_setãã¯
å¿ èŠã«å¿ã㊠SV ãå€æŽããŸãã
void sv_catpv_flags(SV *dstr, const char *sstr,
const I32 ãã©ã°)
sv_catpv_mg
ãsv_catpvããšäŒŒãŠããŸããããsetãããžãã¯ãåŠçããŸãã
void sv_catpv_mg(SV *const sv, const char *const ptr)
sv_catsv
SV "ssv" ã®æååã SV "dsv" ã®æååã®æ«å°Ÿã«é£çµããŸãããã
ãssvã㯠null ã§ãäœãè¡ããŸããããã以å€ã®å Žåã¯ããdsvãã®ã¿ãå€æŽããŸãã ãgetãéæ³ãæ±ã
äž¡æ¹ã®SVã«ãããŸããããã»ãããããžãã¯ã¯ãããŸããã ãsv_catsv_mgãããã³ãsv_catsv_nomgããåç §ããŠãã ããã
void sv_catsv(SV *dstr, SV *sstr)
sv_catsv_flags
SV "ssv" ã®æååã SV "dsv" ã®æååã®æ«å°Ÿã«é£çµããŸãããã
ãssvã㯠null ã§ãäœãè¡ããŸããããã以å€ã®å Žåã¯ããdsvãã®ã¿ãå€æŽããŸãã ããã©ã°ãã«å«ãŸããå Žå
ãSV_GMAGICãããããèšå®ãããšãå¿ èŠã«å¿ããŠäž¡æ¹ã® SV ã§ãmg_getããåŒã³åºãããŸãã ããã©ã°ãã®å Žå
"SV_SMAGIC" ãå«ãããšãåŸã§å€æŽããã SV äžã§ "mg_set" ãåŒã³åºãããŸãã
é©åãªã ãsv_catsvããsv_catsv_nomgããsv_catsv_mgãã¯ã
ãã®æ©èœã®æ¡ä»¶ã
void sv_catsv_flags(SV *const dsv, SV *const ssv,
const I32 ãã©ã°)
sv_chop æååãããã¡ã®å é ããæåãå¹ççã«åé€ããŸãã
SvPOK(sv)ããŸãã¯å°ãªããšã SvPOKp(sv) 㯠true ã§ãªããã°ãªããããptrãã¯ãžã®ãã€ã³ã¿ã§ãªããã°ãªããŸããã
æååãããã¡å ã®ã©ããã«ãããŸãã ãptrããæåã®æåã«ãªããŸãã
調æŽãã匊ã ãOOKããã¯ãã䜿çšããŸãã埩垰æã¯SvPOK(sv)ãšSvPOKp(sv)ã®ã¿
OK ãã©ã°ã®ãã¡ã® 1 ã€ã true ã«ãªããŸãã
泚æ: ãã®é¢æ°ãæ»ã£ãåŸã¯ããptrããš SvPVX_const(sv) ã¯åç §ã§ããªããªãå¯èœæ§ããããŸãã
åãããŒã¿ãã£ã³ã¯ã«ã
æ®å¿µãªããšã«ããã®é¢æ°ã®åå㯠Perl ã®ãchopãã®ååãšäŒŒãŠããŸãã
æŒç®åã¯å®å šã«å¶ç¶ã§ãããã®é¢æ°ã¯å·ŠããåäœããŸãã "ãã§ãã"
å³ããåäœããŸãã
void sv_chop(SV *const sv, const char *const ptr)
sv_clear
SV ãã¯ãªã¢ããŸãããã¹ãã©ã¯ã¿ãŒãåŒã³åºããæ¬äœã§äœ¿çšãããŠããã¡ã¢ãªã解æŸãã
身äœãã®ãã®ã SVã®é 㯠ã¿ã€ãã¯ãã¹ãŠ 1 ã«èšå®ãããŠããŸããã解æŸãããŠããŸã
å°çèŠæš¡ã®ç Žå£äžã«èª€ã£ãŠçããŠãããšã¿ãªãããªãããã«ãããã
ãã®é¢æ°ã¯ãREFCNT ã 0 ã®å Žåã«ã®ã¿åŒã³åºãå¿ èŠããããŸããã»ãšãã©ã®æé
代ããã«ãsv_free()ãïŒãŸãã¯ãã®ãã¯ã ã©ãããŒãSvREFCNT_decãïŒãåŒã³åºããŠãã ããã
void sv_clear(SV *const orig_sv)
sv_cmp 1 ã€ã® SV ã®æååãæ¯èŒããŸãã -0ã1ããŸã㯠XNUMX ãè¿ãã
ãsv1ãã®æååã¯ããsv2ãã®æååããå°ãããçããããŸãã¯å€§ããã§ããã¯
UTF-8 ãšããã€ãã®äœ¿çšããèªèãããã³ãã«ã¯éæ³ãååŸãããã®åŒæ°ã匷å¶çã«ååŸããŸãã
å¿ èŠã«å¿ããŠæååãè¿œå ããŸãã ãsv_cmp_localeããåç §ããŠãã ããã
I32 sv_cmp(SV *const sv1, SV *const sv2)
sv_cmp_flags
1 ã€ã® SV å ã®æååãæ¯èŒããŸãã -0ã1ããŸã㯠XNUMX ãè¿ãã
ãsv1ãã®æååã¯ããsv2ãã®æååããå°ãããçããããŸãã¯å€§ããã§ããã¯
UTF-8 ãšããã€ãã®äœ¿çšããèªèããå¿ èŠã«å¿ããŠåŒæ°ãæååã«åŒ·å¶ããŸãããã
ãã©ã°ã«ã¯ SV_GMAGIC ãå«ãŸããŠãããget ããžãã¯ãåŠçããŸãããã¡ããåç §
ãsv_cmp_locale_flagsãã
I32 sv_cmp_flags(SV *const sv1, SV *const sv2,
const U32 ãã©ã°)
sv_cmp_locale
ãã±ãŒã«ãèªèããæ¹æ³ã§ 8 ã€ã® SV å ã®æååãæ¯èŒããŸãã UTF-XNUMX ã§ãããã䜿çšã
ãã€ããèªèãããã³ãã«ã¯éæ³ãååŸããå¿ èŠã«å¿ããŠåŒæ°ãæååã«åŒ·å¶ããŸãã
ãsv_cmpããåç §ããŠãã ããã
I32 sv_cmp_locale(SV *const sv1, SV *const sv2)
sv_cmp_locale_flags
ãã±ãŒã«ãèªèããæ¹æ³ã§ 8 ã€ã® SV å ã®æååãæ¯èŒããŸãã UTF-XNUMX ã§ãããã䜿çšã
ãã€ããèªèããå¿ èŠã«å¿ããŠãã®åŒæ°ãæååã«åŒ·å¶ããŸãããã©ã°ã®å Žå
SV_GMAGIC ãå«ãŸããŠãããget ããžãã¯ãåŠçããŸãã ãsv_cmp_flagsããåç §ããŠãã ããã
I32 sv_cmp_locale_flags(SV *const sv1,
SV *const sv2ã
const U32 ãã©ã°)
sv_collxfrm
ããã¯ãSV_GMAGIC ãã©ã°ãæå®ããŠãsv_collxfrm_flagsããåŒã³åºããŸãã ãsv_collxfrm_flagsããåç §ããŠãã ããã
char* sv_collxfrm(SV *const sv, STRLEN *const nxp)
sv_collxfrm_flags
Collatââe Transform ããžãã¯ããŸã ååšããŠããªãå Žåã¯ãSV ã«è¿œå ããŸãããã©ã°ã®å Žå
SV_GMAGIC ãå«ãŸããŠããå Žåãget-magic ãåŠçããŸãã
ä»»æã®ã¹ã«ã©ãŒå€æ°ã¯ãã¹ã«ã©ãŒãå«ã PERL_MAGIC_collxfrm ããžãã¯ãå®è¡ã§ããŸãã
å€æ°ã®ããŒã¿ã§ãããéåžžã®ã¡ã¢ãªãèªèã§ãã圢åŒã«å€æãããŸãã
æ¯èŒã䜿çšãããšããã±ãŒã«èšå®ã«åŸã£ãŠããŒã¿ãæ¯èŒã§ããŸãã
char* sv_collxfrm_flags(SV *const sv,
STRLEN *const nxpã
I32 å®æ°ãã©ã°)
sv_copypv_flags
sv_copypv ããã³ sv_copypv_nomg ã®å®è£ ããã©ã°ãå«ãŸããŠããå Žåãget magic ãåŒã³åºããŸãã
SV_GMAGICã
void sv_copypv_flags(SV *const dsv, SV *const ssv,
const I32 ãã©ã°)
sv_copypv_nomg
sv_copypv ãšäŒŒãŠããŸãããæåã« get magic ãåŒã³åºããŸããã
void sv_copypv_nomg(SV *const dsv, SV *const ssv)
sv_dec SV ã®å€ãèªåãã¯ãªã¡ã³ããã次ã®å Žåã«æååããæ°å€ãžã®å€æãå®è¡ããŸãã
å¿ èŠã ãgetãããžãã¯ãšæŒç®åã®ãªãŒããŒããŒããåŠçããŸãã
void sv_dec(SV *const sv)
sv_dec_nomg
SV å ã®å€ãèªåãã¯ãªã¡ã³ããã次ã®å Žåã«æååããæ°å€ãžã®å€æãå®è¡ããŸãã
å¿ èŠãæŒç®åã®ãªãŒããŒããŒããåŠçããŸãã ãgetãããžãã¯ã®åŠçãã¹ãããããŸãã
void sv_dec_nomg(SV *const sv)
sv_eq 2 ã€ã® SV ã®æååãåäžãã©ããã瀺ãããŒã«å€ãè¿ããŸããã¯
UTF-8 ãšããã€ãã®äœ¿çšããèªèãããã³ãã«ã¯éæ³ãååŸãããã®åŒæ°ã匷å¶çã«ååŸããŸãã
å¿ èŠã«å¿ããŠæååãè¿œå ããŸãã
I32 sv_eq(SV* sv1ãSV* sv2)
sv_eq_flags
2 ã€ã® SV ã®æååãåäžãã©ããã瀺ãããŒã«å€ãè¿ããŸããã¯
UTF-8 ãšããã€ãã®äœ¿çšããèªèããå¿ èŠã«å¿ããŠåŒæ°ãæååã«åŒ·å¶ããŸãããã
flags ã«ã¯ SV_GMAGIC ãå«ãŸããŠãããget-magic ãåŠçããŸãã
I32 sv_eq_flags(SV* sv1ãSV* sv2ãconst U32 ãã©ã°)
sv_force_normal_flags
SV äžã®ããŸããŸãªçš®é¡ã®åœè£ ãå ã«æ»ããŸããåœè£ ã¯æååã以äžããæå³ããŸãã
PV ã¯å ±ææååã§ããããããã©ã€ããŒã ã³ããŒãäœæããŸããç§ãã¡ãåç §è ã§ããå Žåã¯ãåç §ãåæ¢ããŠãã ããããã
ç§ãã¡ã¯ glob ãªã®ã§ãxpvmg ã«ããŠã³ã°ã¬ãŒãããŸããã³ããŒãªã³ã©ã€ã ã¹ã«ã©ãŒã®å Žåãããã¯
ã³ããŒãè¡ããšãã®æžã蟌ã¿æéãããŒã«ã«ã§ã䜿çšãããŸããããã vstring ã®å Žåã
vstring ããžãã¯ãåé€ããŸãã ãSV_COW_DROP_PVããèšå®ãããŠããå Žåã¯ãã³ããŒãªã³ã©ã€ã ã¹ã«ã©ãŒ
PV ãããã¡ (ååšããå Žå) ãåé€ããã³ããŒãäœæããã®ã§ã¯ãªã SvPOK_off ã«ãªããŸãã
(ãã®ã¹ã«ã©ãŒãä»ã®å€ã«èšå®ãããããšããŠããå Žåã«äœ¿çšãããŸãã) ããã«ã
ãflagsããã©ã¡ãŒã¿ã¯ãreff 解é€æã«ãsv_unref_flags()ãã«æž¡ãããŸãã
ãsv_force_normalãã¯ããã©ã°ã 0 ã«èšå®ããŠãã®é¢æ°ãåŒã³åºããŸãã
ãã®é¢æ°ã¯ããã® SV ãããããå€æŽãããããšã Perl ã«éç¥ããããã«äœ¿çšãããããšãæåŸ ãããŠããŸãã
ã«æžãããŠãããè¿œå ã®åž³ç°¿ç®¡çã«å¯ŸåŠããå¿ èŠããããŸãããããã£ãŠãããã¯
èªã¿åãå°çšå€ãã¯ããŒã¯ããŸãã
void sv_force_normal_flags(SV *const sv,
const U32 ãã©ã°)
sv_free SV ã®åç §ã«ãŠã³ãããã¯ãªã¡ã³ããããŒãã«ãªã£ãå Žåã¯ããsv_clearããåŒã³åºããŸãã
ãã¹ãã©ã¯ã¿ãŒãåŒã³åºããæ¬äœã§äœ¿çšãããŠããã¡ã¢ãªã解æŸããŸããæåŸã«å²ãåœãŠã解é€ããŸã
SVã®ããããã®ãã®ãéåžžã¯ã©ãã㌠ãã¯ããSvREFCNT_decããä»ããŠåŒã³åºãããŸãã
void sv_free(SV *const sv)
sv_gets ãã¡ã€ã«ãã³ãã«ããè¡ãååŸããSV ã«ä¿åãããªãã·ã§ã³ã§æ¬¡ã®è¡ã«è¿œå ããŸãã
çŸåšä¿åãããŠããæååã ãappendãã 0 ã§ãªãå Žåããã®è¡ã¯ SV ã«è¿œå ãããŸãã
äžæžããã代ããã«ã ãappendãã¯ã
è¿œå ãããæåå㯠SV å ã® ã§å§ãŸãå¿ èŠããããŸã (éåžžããSvCUR(sv)ããé©åã§ã)
éžæïŒã
char* sv_gets(SV *const sv, PerlIO *const fp,
I32 è¿œå )
sv_get_backrefs
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
SV ã匱åç §ã®ã¿ãŒã²ããã§ããå ŽåãåŸæ¹åç §ãè¿ããŸãã
SV ã«é¢é£ä»ããããæ§é äœããã以å€ã®å Žå㯠NULL ãè¿ããŸãã
null 以å€ã®çµæãè¿ãå Žåãæ»ãå€ã®åãé¢ä¿ããŸããããã
AV ã®å ŽåãAV ã®èŠçŽ ã¯ããããæã匱ãåç § RV ã«ãªããŸãã
ã¢ã€ãã ãä»ã®åã®å Žåãé ç®èªäœã匱åç §ã«ãªããŸãã
åç § Perl_sv_add_backref(), Perl_sv_del_backref(), Perl_sv_kill_backrefs()
SV* sv_get_backrefs(SV *const sv)
sv_grow SV å ã®æåãããã¡ãæ¡åŒµããŸããå¿ èŠã«å¿ããŠããsv_unrefãã䜿çšãã
SV ããSVt_PVãã«ã¢ããã°ã¬ãŒãããŸããæåãããã¡ãžã®ãã€ã³ã¿ãè¿ããŸãã䜿çš
代ããã«ãSvGROWãã©ãããŒã
char* sv_grow(SV *const sv, STRLEN newlen)
sv_inc SV ã®å€ãèªåã€ã³ã¯ãªã¡ã³ããã次ã®å Žåã«æååããæ°å€ãžã®å€æãå®è¡ããŸãã
å¿ èŠã ãgetãããžãã¯ãšæŒç®åã®ãªãŒããŒããŒããåŠçããŸãã
void sv_inc(SV *const sv)
sv_inc_nomg
SV ã®å€ãèªåã€ã³ã¯ãªã¡ã³ããã次ã®å Žåã«æååããæ°å€ãžã®å€æãå®è¡ããŸãã
å¿ èŠãæŒç®åã®ãªãŒããŒããŒããåŠçããŸãã ãgetãããžãã¯ã®åŠçãã¹ãããããŸãã
void sv_inc_nomg(SV *const sv)
sv_æ¿å ¥
SV å ã®æå®ããããªãã»ãã/é·ãã«æååãæ¿å ¥ããŸããã«äŒŒãŠããŸã
ããŒã« substrïŒïŒ é¢æ°ããã³ãã«ã«ã¯éæ³ãããããŸãã
void sv_insert(SV *const bigstr, const STRLEN ãªãã»ãã,
const STRLEN ã¬ã³ã
const char *const littleã
const STRLEN littlelen)
sv_insert_flags
ãsv_insertããšåãã§ãããè¿œå ã®ããã©ã°ãããSvPV_force_flagsãã«æž¡ãããŸãã
ããã¯ãbigstrãã«é©çšãããŸãã
void sv_insert_flags(SV *const bigstr,
const STRLEN ãªãã»ããã
const STRLEN ã¬ã³ã
const char *const littleã
const STRLEN ãªãã«ã¬ã³ã
const U32 ãã©ã°)
sv_isa SV ãæå®ãããã¯ã©ã¹ã«ç¥çŠãããŠãããã©ããã瀺ãããŒã«å€ãè¿ããŸãã
ããã¯ãµãã¿ã€ãããã§ãã¯ããŸããã ãsv_derived_fromãã䜿çšããŠç¶æ¿ãæ€èšŒãã
é¢ä¿ã
int sv_isa(SV* sv, const char *const å)
sv_isoobject
SV ãç¥çŠããããªããžã§ã¯ããæã RV ã§ãããã©ããã瀺ãããŒã«å€ãè¿ããŸãã
SV ã RV ã§ã¯ãªãå ŽåããŸãã¯ãªããžã§ã¯ããç¥çŠãããŠããªãå Žåãããã¯è¿ãããŸãã
åœã
int sv_isobject(SV* sv)
sv_len SV å ã®æååã®é·ããè¿ããŸããéæ³ãšå匷å¶ãåŠçãã
UTF8 ãã©ã°ãé©åã«èšå®ããŸãã ãSvCURããåç §ããŠãã ãããããã«ããã
xpv_cur ã¹ãããã
STRLEN sv_len(SV *const sv)
sv_len_utf8
ã¯ã€ã UTF-8 ãã€ããã«ãŠã³ãããŠãSV å ã®æååã®æåæ°ãè¿ããŸãã
åäžã®æåãšããŠãéæ³ãšå匷å¶ãåŠçããŸãã
STRLEN sv_len_utf8(SV *const sv)
sv_magic
SVã«éæ³ãä»äžããŸãããŸããå¿ èŠã«å¿ããŠãsvããã¿ã€ããSVt_PVMGãã«ã¢ããã°ã¬ãŒãããŸãã
ãhowãã¿ã€ãã®æ°ããããžãã¯é ç®ãããžãã¯ãªã¹ãã®å é ã«è¿œå ããŸãã
åŠçã®èª¬æã«ã€ããŠã¯ããsv_magicextã(ãsv_magicããçŸåšåŒã³åºããŠãã)ãåç §ããŠãã ããã
ãnameãåŒæ°ãšãnamlenãåŒæ°ã®ã
SvREADONLY SV ã«ããžãã¯ãè¿œå ããããããã«è¿œå ãããããã«ã¯ããsv_magicextãã䜿çšããå¿ èŠããããŸãã
åããæ¹æ³ãã® 1 ã€ã®ã€ã³ã¹ã¿ã³ã¹ãããã
void sv_magic(SV *const sv, SV *const obj,
const int æ¹æ³ãconst char *const åã
const I32 ãã ã¬ã³)
sv_magicext
SV ã«éæ³ãè¿œå ããå¿ èŠã«å¿ããŠã¢ããã°ã¬ãŒãããŸããæäŸããã vtable ãé©çšãã
è¿œå ãããéæ³ãžã®ãã€ã³ã¿ãè¿ããŸãã
ãsv_magicextãã¯ãsv_magicããèš±å¯ããªããã®ãèš±å¯ããããšã«æ³šæããŠãã ãããã§
ç¹ã«ãSvREADONLY SV ã«ããžãã¯ãè¿œå ããè€æ°ã®ã€ã³ã¹ã¿ã³ã¹ãè¿œå ã§ããŸãã
åããæ¹æ³ãã
ãnamlenãããŒããã倧ããå Žåããsavepvnã copy ãååãã®å€ãæ ŒçŽãããŠããå Žåã
ãnamlenãããŒãã®å Žåããnameãã¯ãã®ãŸãŸä¿åãããå¥ã®ç¹æ®ãªã±ãŒã¹ãšããŠã次ã®å Žåã«ä¿åãããŸãã
ã(name && namlen == HEf_SVKEY)ãã®å Žåããnameãã«ã¯ãSV*ããå«ãŸãããšã¿ãªããã次ã®ããã«ãªããŸãã
REFCNT ãã€ã³ã¯ãªã¡ã³ããããç¶æ ã§ãã®ãŸãŸä¿åãããŸãã
(ããã¯çŸåšããsv_magicãã«ãã£ãŠãµãã«ãŒãã³ãšããŠäœ¿çšãããŠããŸãã)
MAGIC * sv_magicext(SV *const sv, SV *const obj,
const int ã©ã®ããã«ã
const MGVTBL *const vtbl,
const char *å®æ°åã
const I32 ãã ã¬ã³)
sv_mortalcopy
å ã® SV ã®ã³ããŒã§ããæ°ãã SV ãäœæããŸã (ãsv_setsvãã䜿çš)ãæ°ãã
SV ã¯æ»äº¡è ãšããŠããŒã¯ãããŸããæ瀺çãªåŒã³åºãã«ãã£ãŠãããã«ãç Žæ£ãããŸã
FREETMPS ãžã®ã¢ã¯ã»ã¹ããŸãã¯ã¹ããŒãã¡ã³ãå¢çãªã©ã®å Žæã§ã®æé»çãªåŒã³åºãã«ãã£ãŠãèŠã
ãsv_newmortalããšãsv_2mortalããã
SV* sv_mortalcopy(SV *const oldsv)
sv_newmortal
èŽåœçãªæ°ãããã« SV ãäœæããŸãã SV ã®åç §ã«ãŠã³ã㯠1 ã«èšå®ãããŸãã
FREETMPS ãžã®æ瀺çãªåŒã³åºãããŸãã¯
ã¹ããŒãã¡ã³ãå¢çãªã©ã®å Žæã§ã®æé»çãªåŒã³åºãã ãsv_mortalcopyããåç §ããŠãã ããã
ãããŠãsv_2mortalãã
SV* sv_newmortal()
sv_newref
SV ã®åç §ã«ãŠã³ããã€ã³ã¯ãªã¡ã³ãããŸãã代ããã«ãSvREFCNT_inc()ãã©ãããŒã䜿çšããŠãã ããã
SV* sv_newref(SV *const sv)
sv_pos_b2u
offsetp ãæãå€ããå é ããã®ãã€ãæ°ããå€æããŸãã
æååã UTF-8 æåã®åçæ°ã«æç®ããŸããéæ³ãæ±ãã
åã®åŒ·å¶ã
ãsv_pos_b2u_flagsããåªå çã«äœ¿çšããŠãã ãããããã«ããã次ã®æååãããé·ãæååãæ£ããåŠçãããŸãã
2Gbã
void sv_pos_b2u(SV *const sv, I32 *const offsetp)
sv_pos_b2u_flags
æååã®å é ããã®ãã€ãæ°ããã®ãªãã»ãããã«ãŠã³ãã«å€æããŸãã
åçã®æ°ã® UTF-8 æåãã¿ã€ãã®åŒ·å¶ãåŠçããŸãã ãã©ã° åæ Œ
ãSvPV_flagsãã«èšå®ããéåžžã¯ãSV_GMAGIC|SV_CONST_RETURNãã§åŠçããå¿ èŠããããŸãã
éæ³ã
STRLEN sv_pos_b2u_flags(SV *const sv,
STRLEN å®æ°ãªãã»ãããU32 ãã©ã°)
sv_pos_u2b
offsetp ãæãå€ããUTF-8 æåã®æ°ããå€æããŸãã
æååã®å é ãããåçã®ãã€ãæ°ãŸã§ã®ã«ãŠã³ãã lenp ãéã®å Žå
ãŒãã®å Žåãlenp ã«å¯ŸããŠãåãããšãè¡ããŸãããä»åã¯ãªãã»ããããéå§ããŸãã
æååã®å é ããããããéæ³ãšå匷å¶ãåŠçããŸãã
ãsv_pos_u2b_flagsããåªå çã«äœ¿çšããŠãã ãããããã«ããã次ã®æååãããé·ãæååãæ£ããåŠçãããŸãã
2Gbã
void sv_pos_u2b(SV *const sv, I32 *const offsetp,
I32 *const lenp)
sv_pos_u2b_flags
æååã®å é ããã® UTF-8 æåæ°ã®ãªãã»ããã
åçã®ãã€ãæ°ã®ã«ãŠã³ãã lenp ããŒã以å€ã®å Žåãåãããšãè¡ããŸãã
lenp ã§ãããä»åã¯å é ããã§ã¯ãªããªãã»ããããéå§ããŸãã
匊ãã¿ã€ãã®åŒ·å¶ãåŠçããŸãã ãã©ã° ã¯ãSvPV_flagsãã«æž¡ãããéåžžã¯
ããžãã¯ãåŠçããã«ã¯ãSV_GMAGIC|SV_CONST_RETURNãã«ããå¿ èŠããããŸãã
STRLEN sv_pos_u2b_flags(SV *const sv, STRLEN uoffset,
STRLEN *const lenpãU32 ãã©ã°)
sv_pvbyten_force
ãSvPVbytex_forceããã¯ãã®ããã¯ãšã³ãã代ããã«åžžã«ãã¯ãã䜿çšããŠãã ããã
char* sv_pvbyten_force(SV *const sv, STRLEN *const lp)
sv_pvn_force
äœããã®æ¹æ³ã§ SV ããæå³ã®ããæååãååŸããŸããã®ãã©ã€ããŒãå®è£
è€éãªãã¯ãåŒã«å¯Ÿå¿ã§ããªãã³ã³ãã€ã©åãã®ãã¯ããSvPV_forceãã
代ããã«åžžã«ãã¯ãã䜿çšããŠãã ããã
char* sv_pvn_force(SV* sv, STRLEN* lp)
sv_pvn_force_flags
äœããã®æ¹æ³ã§ SV ããæå³ã®ããæååãååŸããŸãã ãflagsãã«ãSV_GMAGICãããããèšå®ãããŠããå Žåã
é©åãªå Žåã¯ãsvãã§ãmg_getããå®è¡ããŸããããã以å€ã®å Žåã¯å®è¡ããŸããã ãsv_pvn_forceããš
ãã®æ©èœã«é¢ããŠã¯ãsv_pvn_force_nomgããå®è£ ãããŠããŸããæ®éã«æ¬²ããã®ã¯
代ããã«ããŸããŸãªã©ãã㌠ãã¯ãã䜿çšããã«ã¯ããSvPV_forceãããã³ãSvPV_force_nomgããåç §ããŠãã ããã
char* sv_pvn_force_flags(SV *const sv,
STRLEN *å®æ° lp,
const I32 ãã©ã°)
sv_pvutf8n_force
ãSvPVutf8x_forceããã¯ãã®ããã¯ãšã³ãã代ããã«åžžã«ãã¯ãã䜿çšããŠãã ããã
char* sv_pvutf8n_force(SV *const sv, STRLEN *const lp)
sv_reftype
SV ãäœãžã®åç §ã§ãããã説æããæååãè¿ããŸãã
const char* sv_reftype(const SV *const sv, const int ob)
sv_replace
æåã®åŒæ°ã 2 çªç®ã®åŒæ°ã®ã³ããŒã«ããŠãããå ã®åŒæ°ãåé€ããŸããã®
ã¿ãŒã²ãã SV ã¯ãœãŒã¹ SV ã®æ¬äœã®æææš©ãç©ççã«åŒãç¶ãã
ãã®ãã©ã°ãç¶æ¿ããŸãããã ããã¿ãŒã²ããã¯ææããéæ³ãšãã¹ãŠã®éæ³ãä¿æããŸãã
ãœãŒã¹ã¯ç Žæ£ãããŸããããã¯ããªãç¹æ®ãª SV ã³ããŒã§ããããšã«æ³šæããŠãã ããã
æè¡;ã»ãšãã©ã®å Žåããsv_setsvããŸãã¯ãã®å€ãã®ãã¯ãã® 1 ã€ã䜿çšããããšã«ãªããŸãã
ããã³ããšã³ãã
void sv_replace(SV *const sv, SV *const nsv)
sv_reset
ããªã»ãããPerl é¢æ°ã®åºç€ãšãªãå®è£ ã perl ã¬ãã«ã«æ³šæããŠãã ããã
ãã®é¢æ°ã¯æŒ ç¶ãšéæšå¥šã«ãªã£ãŠããŸãã
void sv_reset(const char* s, HV *const stash)
sv_rvweaken
åç §ã匱ãã: ãã® RV ã«ãSvWEAKREFããã©ã°ãèšå®ããŸããåç §å ã®SVãäžãã
ãPERL_MAGIC_backrefãããžã㯠(ãŸã ååšããŠããªãå Žå)ããããžã®åŸæ¹åç §ãããã·ã¥ããŸã
ãã®ããžãã¯ã«é¢é£ä»ããããåŸæ¹åç §ã®é åãžã® RVã RV ã
éæ³ã®å Žåãèšå®ãããéæ³ã¯ RV ãã¯ãªã¢ãããåŸã«åŒã³åºãããŸãã
SV* sv_rvweaken(SV *const sv)
sv_setiv
æŽæ°ãæå®ããã SV ã«ã³ããŒããå¿ èŠã«å¿ããŠæåã«ã¢ããã°ã¬ãŒãããŸããã§ã¯ãªã
ãã»ãããããžãã¯ãåŠçããŸãã ãsv_setiv_mgããåç §ããŠãã ããã
void sv_setiv(SV *const sv, const IV num)
sv_setiv_mg
ãsv_setivããšäŒŒãŠããŸããããsetãããžãã¯ãåŠçããŸãã
void sv_setiv_mg(SV *const sv, const IV i)
sv_setnv
æå®ããã SV ã« double ãã³ããŒããå¿ èŠã«å¿ããŠæåã«ã¢ããã°ã¬ãŒãããŸããåãæ±ããŸãã
ãã»ãããããžãã¯ã ãsv_setnv_mgããåç §ããŠãã ããã
void sv_setnv(SV *const sv, const NV num)
sv_setnv_mg
ãsv_setnvããšäŒŒãŠããŸããããsetãããžãã¯ãåŠçããŸãã
void sv_setnv_mg(SV *const sv, const NV num)
sv_setpv
æååãSVã«ã³ããŒããŸããæååã¯ãNULãæåã§çµäºããå¿ èŠããããŸãã
ãã»ãããããžãã¯ã¯æ±ããŸããã ãsv_setpv_mgããåç §ããŠãã ããã
void sv_setpv(SV *const sv, const char *const ptr)
sv_setpvf
ãsv_catpvfããšåæ§ã«æ©èœããŸãããããã¹ããè¿œå ããã®ã§ã¯ãªããSV ã«ã³ããŒããŸãã
ãã»ãããããžãã¯ã¯æ±ããŸããã ãsv_setpvf_mgããåç §ããŠãã ããã
void sv_setpvf(SV *const sv, const char *const pat,
...ïŒ
sv_setpvf_mg
ãsv_setpvfããšäŒŒãŠããŸããããsetãããžãã¯ãåŠçããŸãã
void sv_setpvf_mg(SV *const sv,
const char *const pat, ...)
sv_setpviv
æŽæ°ãæå®ããã SV ã«ã³ããŒãããã®æååå€ãæŽæ°ããŸããã§ã¯ãªã
ãã»ãããããžãã¯ãåŠçããŸãã ãsv_setpviv_mgããåç §ããŠãã ããã
void sv_setpviv(SV *const sv, const IV num)
sv_setpviv_mg
ãsv_setpvivããšäŒŒãŠããŸããããsetãããžãã¯ãåŠçããŸãã
void sv_setpviv_mg(SV *const sv, const IV iv)
sv_setpvn
æåå (åã蟌ãŸãããNULãæåãå«ãå¯èœæ§ããã) ã SV ã«ã³ããŒããŸããã®
ãlenããã©ã¡ãŒã¿ã¯ã³ããŒããããã€ãæ°ã瀺ããŸãã ãptrãåŒæ°ã®å Žå
NULL ã®å ŽåãSV ã¯æªå®çŸ©ã«ãªããŸãã ãã»ãããããžãã¯ã¯æ±ããŸãããèŠã
ãsv_setpvn_mgãã
void sv_setpvn(SV *const sv, const char *const ptr,
const STRLEN len)
sv_setpvn_mg
ãsv_setpvnããšäŒŒãŠããŸããããsetãããžãã¯ãåŠçããŸãã
void sv_setpvn_mg(SV *const sv,
const char *const ptrã
const STRLEN len)
sv_setpvs
ãsv_setpvnããšäŒŒãŠããŸãããæååãšé·ãã®ãã¢ã®ä»£ããã«ãªãã©ã«æååãåãåããŸãã
void sv_setpvs(SV* sv, const char* s)
sv_setpvs_mg
ãsv_setpvn_mgããšäŒŒãŠããŸãããæååãšé·ãã®ãã¢ã®ä»£ããã«ãªãã©ã«æååãåãåããŸãã
void sv_setpvs_mg(SV* sv, const char* s)
sv_setpv_mg
ãsv_setpvããšäŒŒãŠããŸããããsetãããžãã¯ãåŠçããŸãã
void sv_setpv_mg(SV *const sv, const char *const ptr)
sv_setref_iv
æŽæ°ãæ°ãã SV ã«ã³ããŒãããªãã·ã§ã³ã§ SV ãç¥çŠããŸãã ãrvãåŒæ°
RVã«ã¢ããã°ã¬ãŒããããŸãããã® RV ã¯ãæ°ãã SV ãæãããã«å€æŽãããŸããã®
ãclassnameãåŒæ°ã¯ãç¥çŠã®ããã±ãŒãžã瀺ããŸãã ãã¯ã©ã¹åãã次ã®ããã«èšå®ããŸã
ç¥çŠãåé¿ããã«ã¯ãNULLããæ°ãã SV ã®åç §ã«ãŠã³ã㯠1 ã«ãªããŸãã
RVã¯è¿åŽãããŸãã
SV* sv_setref_iv(SV *const rv,
const char *const ã¯ã©ã¹åã
å®æ° IV iv)
sv_setref_nv
ããã«ãæ°ãã SV ã«ã³ããŒãããªãã·ã§ã³ã§ SV ãç¥çŠããŸãã ãrvãåŒæ°ã¯ã
RVã«ã¢ããã°ã¬ãŒããããŸãããã® RV ã¯ãæ°ãã SV ãæãããã«å€æŽãããŸããã®
ãclassnameãåŒæ°ã¯ãç¥çŠã®ããã±ãŒãžã瀺ããŸãã ãã¯ã©ã¹åãã次ã®ããã«èšå®ããŸã
ç¥çŠãåé¿ããã«ã¯ãNULLããæ°ãã SV ã®åç §ã«ãŠã³ã㯠1 ã«ãªããŸãã
RVã¯è¿åŽãããŸãã
SV* sv_setref_nv(SV *const rv,
const char *const ã¯ã©ã¹åã
const NV nv)
sv_setref_pv
ãã€ã³ã¿ãæ°ãã SV ã«ã³ããŒãããªãã·ã§ã³ã§ SV ãç¥çŠããŸãã ãrvãåŒæ°
RVã«ã¢ããã°ã¬ãŒããããŸãããã® RV ã¯ãæ°ãã SV ãæãããã«å€æŽãããŸãããã
ãpvãåŒæ°ã NULL ã®å ŽåããPL_sv_undefãã SV ã«é 眮ãããŸããã®
ãclassnameãåŒæ°ã¯ãç¥çŠã®ããã±ãŒãžã瀺ããŸãã ãã¯ã©ã¹åãã次ã®ããã«èšå®ããŸã
ç¥çŠãåé¿ããã«ã¯ãNULLããæ°ãã SV ã®åç §ã«ãŠã³ã㯠1 ã«ãªããŸãã
RVã¯è¿åŽãããŸãã
HVãAVãSVãCV ãªã©ã®ä»ã® Perl ã¿ã€ãã§ã¯äœ¿çšããªãã§ãã ããã
ãã€ã³ã¿ã®ã³ããŒåŠçã«ããç ŽæããŸãã
ãsv_setref_pvnãã¯æååãã³ããŒããããã¯ãã€ã³ã¿ãã³ããŒããããšã«æ³šæããŠãã ããã
SV* sv_setref_pv(SV *const rv,
const char *const ã¯ã©ã¹åã
void *const pv)
sv_setref_pvn
æååãæ°ãã SV ã«ã³ããŒãããªãã·ã§ã³ã§ SV ãç¥çŠããŸããã®é·ãã¯ã
æååã¯ãnãã§æå®ããå¿ èŠããããŸãã ãrvãåŒæ°ã¯ RV ã«ã¢ããã°ã¬ãŒããããŸãã
ãã® RV ã¯ãæ°ãã SV ãæãããã«å€æŽãããŸãã ãã¯ã©ã¹åãåŒæ°
ã¯ç¥çŠã®ããã±ãŒãžã瀺ããŸããåé¿ããã«ã¯ããclassnameãããNULLãã«èšå®ããŸãã
ç¥çŠãæ°ãã SV ã®åç §ã«ãŠã³ã㯠1 ã«ãªããRV ã¯æ¬¡ã®ããã«ãªããŸãã
æ»ã£ãŠããã
ãsv_setref_pvãã¯ãã€ã³ã¿ãã³ããŒããããã¯æååãã³ããŒããããšã«æ³šæããŠãã ããã
SV* sv_setref_pvn(SV *const rv,
const char *const ã¯ã©ã¹åã
const char *const pvã
å®æ°STRLEN n)
sv_setref_pvs
ãsv_setref_pvnããšäŒŒãŠããŸãããæååãšé·ãã®ãã¢ã®ä»£ããã«ãªãã©ã«æååãåãåããŸãã
SV * sv_setref_pvs(const char* s)
sv_setref_uv
笊å·ãªãæŽæ°ãæ°ãã SV ã«ã³ããŒãããªãã·ã§ã³ã§ SV ãç¥çŠããŸãã ãRVã
åŒæ°ã¯ RV ã«ã¢ããã°ã¬ãŒããããŸãããã® RV ã¯æ°ãããã®ãæãããã«å€æŽãããŸãã
SVã ãclassnameãåŒæ°ã¯ãç¥çŠã®ããã±ãŒãžã瀺ããŸããã»ãã
ç¥çŠãåé¿ããã«ã¯ããclassnameãããNULLãã«ããŸããæ°ãã SV ã«ã¯åç §ãå«ãŸããŸã
ã«ãŠã³ãã 1 ã«ãªããšãRV ãè¿ãããŸãã
SV* sv_setref_uv(SV *const rv,
const char *const ã¯ã©ã¹åã
å®æ° UV uv)
sv_setsv
ã³ããŒå SVãssvãã®å 容ãã³ããŒå SVãdsvãã«ã³ããŒããŸããã®
ãœãŒã¹ SV ãèŽåœçã§ããå Žåã¯ç Žå£ãããå¯èœæ§ãããããããã®æ©èœã䜿çšããªãã§ãã ããã
ãœãŒã¹ SV ãåå©çšããå¿ èŠããããŸããå®å SV ã®ãsetãããžãã¯ãåŠçããŸããã
ãœãŒã¹ SV ã§ãgetãããžãã¯ãåŒã³åºããŸãã倧ãŸãã«èšãã°ãå€ã«ããã³ããŒãå®è¡ããŸãã
å®å ã®ä»¥åã®ã³ã³ãã³ããæ¶å»ããŸãã
ããããããSvSetSVããªã©ã®ããŸããŸãªã©ãããŒã®ããããã䜿çšãããšããã§ãããã
ãSvSetSV_nostealãããSvSetMagicSVãããSvSetMagicSV_nostealãã
void sv_setsv(SV *dstr, SV *sstr)
sv_setsv_flags
ã³ããŒå SVãssvãã®å 容ãã³ããŒå SVãdsvãã«ã³ããŒããŸããã®
ãœãŒã¹ SV ãèŽåœçã§ããå Žåã¯ç Žå£ãããå¯èœæ§ãããããããã®æ©èœã䜿çšããªãã§ãã ããã
ãœãŒã¹ SV ãåå©çšããå¿ èŠããããŸãã ãã»ãããããžãã¯ã¯æ±ããŸããããã£ããèšããšãããã¯
å€ã«ããã³ããŒãå®è¡ããã³ããŒå ã®ä»¥åã®ã³ã³ãã³ããæ¶å»ããŸãã
ãflagsããã©ã¡ãŒã¿ã«ãSV_GMAGICãããããèšå®ãããŠããå Žåããssvãã§ãmg_getããå®è¡ããŸãã
é©åãããã§ãªãå Žåã ãflagsããã©ã¡ãŒã¿ã«ãSV_NOSTEALãããããèšå®ãããŠããå Žåã
temp ã®ãããã¡ã¯çãŸããŸãããããã³ãsv_setsv_nomgãã¯
ãã®æ©èœã«é¢ããŠå®è£ ãããŠããŸãã
ããããããSvSetSVããªã©ã®ããŸããŸãªã©ãããŒã®ããããã䜿çšãããšããã§ãããã
ãSvSetSV_nostealãããSvSetMagicSVãããSvSetMagicSV_nostealãã
ããã¯ãã¹ã«ã©ãŒãã³ããŒããããã®äž»èŠãªé¢æ°ã§ãããä»ã®ã»ãšãã©ã®ã³ããŒé¢šã®é¢æ°ã§ãã
é¢æ°ãšãã¯ãã¯ãããäžã§äœ¿çšããŸãã
void sv_setsv_flags(SV *dstr, SV *sstr,
const I32 ãã©ã°)
sv_setsv_mg
ãsv_setsvããšäŒŒãŠããŸããããsetãããžãã¯ãåŠçããŸãã
void sv_setsv_mg(SV *const dstr, SV *const sstr)
sv_setuv
笊å·ãªãæŽæ°ãæå®ããã SV ã«ã³ããŒããå¿ èŠã«å¿ããŠæåã«ã¢ããã°ã¬ãŒãããŸãããã
ãsetãããžãã¯ãåŠçããŸããã ãsv_setuv_mgããåç §ããŠãã ããã
void sv_setuv(SV *const sv, const UV num)
sv_setuv_mg
ãsv_setuvããšäŒŒãŠããŸããããsetãããžãã¯ãåŠçããŸãã
void sv_setuv_mg(SV *const sv, const UV u)
sv_tainted
SV ã®æ±æããã¹ãããŸãã代ããã«ãSvTAINTEDãã䜿çšããŠãã ããã
bool sv_tainted(SV *const sv)
sv_true Perl ã®ã«ãŒã«ã«åŸã£ãŠ SV ã true å€ãæã€å Žåã« true ãè¿ããŸãã ãSvTRUEããã¯ãã䜿çšãã
代ããã«ããsv_true()ããåŒã³åºãããã€ã³ã©ã€ã³ ããŒãžã§ã³ã䜿çšããå ŽåããããŸãã
I32 sv_true(SV *const sv)
sv_unmagic
ã¿ã€ããã¿ã€ããã®ãã¹ãŠã®éæ³ã SV ããåé€ããŸãã
int sv_unmagic(SV *const sv, const int å)
sv_unmagicext
æå®ããããvtblããæã€ã¿ã€ããtypeãã®ãã¹ãŠã®ããžãã¯ã SV ããåé€ããŸãã
int sv_unmagicext(SV *const sv, const int å,
MGVTBL *vtbl)
sv_unref_flags
SV ã® RV ã¹ããŒã¿ã¹ã®èšå®ã解é€ãã以åã®ç¶æ ã®åç §ã«ãŠã³ãããã¯ãªã¡ã³ãããŸãã
RV ã«ãã£ãŠåç §ãããŸãã ããã¯ã»ãŒé転ãšèããããšãã§ããŸãã
ãnewSVrvãã ãcflagsãåŒæ°ã«ã¯ã匷å¶çã«ãSV_IMMEDIATE_UNREFããå«ããããšãã§ããŸãã
ãã¯ãªã¡ã³ããããåç §ã«ãŠã³ã (ãã以å€ã®å Žåããã¯ãªã¡ã³ãã®æ¡ä»¶ã¯æ¬¡ã®ãšããã§ã)
åç §ã«ãŠã³ãã 1 ãšç°ãªãããåç §ãèªã¿åãå°çšã§ã
SVïŒã ãSvROK_offããåç §ããŠãã ããã
void sv_unref_flags(SV *const refãconst U32 ãã©ã°)
sv_untaint
SV ã®æ±æã解é€ããŸãã代ããã«ãSvTAINTED_offãã䜿çšããŠãã ããã
void sv_untaint(SV *const sv)
sv_upgrade
SV ãããè€éãªåœ¢åŒã«ã¢ããã°ã¬ãŒãããŸããéåžžãSV ã«æ°ããããã£ã¿ã€ããè¿œå ããŸãã
次ã«ãå€ãæ¬äœããå¯èœãªéãå€ãã®æ å ±ãã³ããŒããŸãã鳎ã
SV ããã§ã«èŠæ±ããããããè€éãªåœ¢åŒã«ãªã£ãŠããå Žåãããªãã¯äžè¬çã«ãããããã§ã
åŒã³åºãåã«åããã§ãã¯ãããSvUPGRADEããã¯ã ã©ãããŒã䜿çšããŸãã
ãsv_upgradeããªã®ã§ãã¯ããŒã¯ããŸããã ãsvtypeããåç §ããŠãã ããã
void sv_upgrade(SV *const sv, svtype new_type)
sv_usepvn_flags
SV ã«ãptrãã䜿çšããŠæååå€ãæ€çŽ¢ããããã«æ瀺ããŸããéåžžã¯æååãæ ŒçŽãããŸã
ãã ããsv_usepvn ã䜿çšãããšãSV ãå€éšã®æååã䜿çšã§ããããã«ãªããŸãã ãptrã
Newx ã«ãã£ãŠå²ãåœãŠãããã¡ã¢ãªãæãå¿ èŠããããŸããããã¯äœãã®å§ãŸãã«éããªã
Newx ãããã¡ã¢ãª ãããã¯ã§ããããã®äžéãžã®ãã€ã³ã¿ã§ã¯ãããŸãã (OOK ãš
ã³ããŒãªã³ã©ã€ãïŒããmallocããªã©ã® Newx 以å€ã®ã¡ã¢ãª ã¢ãã±ãŒã¿ããã®ãã®ã§ã¯ãããŸãããã®
æååã®é·ããlenããæå®ããå¿ èŠããããŸããããã©ã«ãã§ã¯ããã®æ©èœã¯ãæŽæ°ããããŸãã
ãptrããæãã¡ã¢ãªãïŒã€ãŸããreallocãmoveïŒããã®ãã€ã³ã¿ã
sv_usepvn ã«æž¡ããåŸãããã°ã©ãã«ãã£ãŠè§£æŸãŸãã¯äœ¿çšãããŸãããã©ã¡ãã䜿çšãã¹ãã§ã¯ãããŸããã
ãã®ãã€ã³ã¿ã®ãåŸããã®ãã€ã³ã¿ (äŸ: ptr + 1) ã䜿çšãããŸãã
ãflagsããš SV_SMAGIC ã true ã®å ŽåãSvSETMAGIC ãåŒã³åºããŸãã ããã©ã°ãã®å Žå &
SV_HAS_TRAILING_NUL ã true ã®å Žåããptr[len]ãã¯ãNULãã§ãªããã°ãªãããrealloc ã¯
ã¹ããããããïŒã€ãŸãããããã¡ã¯å®éã«ã¯ãlenãããå°ãªããšã 1 ãã€ãé·ãããããŠ
ãSvPVXãã«ä¿åããããã®èŠä»¶ããã§ã«æºãããŠããŸãïŒã
void sv_usepvn_flags(SV *const sv, char* ptr,
const STRLEN ã¬ã³ã
const U32 ãã©ã°)
sv_utf8_decode
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
SV ã® PV ã UTF-8 ã®ãªã¯ããã ã·ãŒã±ã³ã¹ã§ããããã«ããã€ããå«ãŸããŠããå Žå
æåã®å ŽåããSvUTF8ããã©ã°ããªã³ã«ãªããæåã®ããã«èŠããŸãããã
PV ã«åè§æåã®ã¿ãå«ãŸããŠããå ŽåããSvUTF8ããã©ã°ã¯ãªãã®ãŸãŸã§ããã¹ãã£ã³
PV ãæå¹ã§ãããã©ããã確èªããPV ãç¡å¹ãª UTF-8 ã§ããå Žå㯠false ãè¿ããŸãã
bool sv_utf8_decode(SV *const sv)
sv_utf8_downgrade
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
SV ã® PV ãæåãããã€ãã«å€æããããšããŸãã PV ã«å«ãŸããŠããå Žå
ãã€ãã«åãŸããªãæåã®å Žåããã®å€æã¯å€±æããŸãããã®å Žåã
false ãè¿ããããfail_okãã true ã§ãªãå Žåã¯ã¯ããŒã¯ããŸãã
ããã¯æ±çšã® Unicode ãããã€ã ãšã³ã³ãŒããžã®ã€ã³ã¿ãŒãã§ã€ã¹ã§ã¯ãããŸãããEncode ã䜿çšããŠãã ããã
ãã®ããã®æ¡åŒµæ©èœã
bool sv_utf8_downgrade(SV *const sv,
const bool 倱æ_ok)
sv_utf8_encode
SV ã® PV ã UTF-8 ã«å€æããŸããããSvUTF8ããã©ã°ããªãã«ããŠã
ãŸããªã¯ãããã®ããã«èŠããŸãã
void sv_utf8_encode(SV *const sv)
sv_utf8_upgrade
SV ã® PV ã UTF-8 ãšã³ã³ãŒã圢åŒã«å€æããŸãã SV ãæåå圢åŒã«åŒ·å¶ããŸã
ãŸã ããã§ãªãå Žåã¯ãå¿ èŠã«å¿ããŠããsvãã«å¯ŸããŠãmg_getããå®è¡ããŸããåžžã«èšå®ããŸã
æååå šäœãåãã§ãã£ãŠãå°æ¥ã®æå¹æ§ãã§ãã¯ãåé¿ããããã® SvUTF8 ãã©ã°
UTF-8ã§ã¯ããã§ã¯ãããŸãããå€æãããæååã®ãã€ãæ°ãè¿ããŸãã
ãã㯠Unicode ã€ã³ã¿ãŒãã§ã€ã¹ãžã®æ±çšãã€ã ãšã³ã³ãŒãã£ã³ã°ã§ã¯ãããŸãããEncode ã䜿çšããŠãã ããã
ãã®ããã®æ¡åŒµæ©èœã
STRLEN sv_utf8_upgrade(SV *sv)
sv_utf8_upgrade_flags
SV ã® PV ã UTF-8 ãšã³ã³ãŒã圢åŒã«å€æããŸãã SV ãæåå圢åŒã«åŒ·å¶ããŸã
ãŸã ããã§ãªãå Žåã¯ãå°æ¥ã®æå¹æ§ãã§ãã¯ãé¿ããããã«ãåžžã« SvUTF8 ãã©ã°ãèšå®ããŸãã
UTF-8 ã§ã¯ãã¹ãŠã®ãã€ããäžå€ã§ãã£ãŠãã ãflagsãã«ãSV_GMAGICãããããèšå®ãããŠããå Žåã
é©åãªå Žåã¯ãsvãã§ãmg_getããå®è¡ããŸããããã以å€ã®å Žåã¯å®è¡ããŸããã
ãflagsãã« SV_FORCE_UTF8_UPGRADE ãèšå®ãããŠããå Žåããã®é¢æ°ã¯ PV ã
UTF-8 ã«å€æããããšå±éãããããããã§ãã¯ããäœåãªäœæ¥ãã¹ããããããŸãã
éåžžããã®ãã©ã°ã¯æååããã§ã«è§£æããã«ãŒãã³ã«ãã£ãŠäœ¿çšããã
ãã®ãããªãã£ã©ã¯ã¿ãŒãèŠã€ããã®ã§ãäœåãå£ããªãããã«ãã®æ å ±ãæž¡ããŸãã
ç¹°ãè¿ããªããã°ãªããŸããã
å€æãããæååã®ãã€ãæ°ãè¿ããŸãã
ãã㯠Unicode ã€ã³ã¿ãŒãã§ã€ã¹ãžã®æ±çšãã€ã ãšã³ã³ãŒãã£ã³ã°ã§ã¯ãããŸãããEncode ã䜿çšããŠãã ããã
ãã®ããã®æ¡åŒµæ©èœã
STRLEN sv_utf8_upgrade_flags(SV *const sv,
const I32 ãã©ã°)
sv_utf8_upgrade_flags_grow
sv_utf8_upgrade_flags ãšäŒŒãŠããŸãããè¿œå ãã©ã¡ãŒã¿ãextraãããããŸãã
ãsvãã®æååããã®åŸã«ç©ºããããããšãä¿èšŒãããŠããæªäœ¿çšã®ãã€ãæ°
æ»ããããã«ãããåŒã³åºãå ã¯ãåããäºå®ã®äœåãªã¹ããŒã¹ãäºçŽã§ããããã«ãªããŸãã
äœåãªæé·ãé¿ããŸãã
ãsv_utf8_upgradeãããsv_utf8_upgrade_nomgãããsv_utf8_upgrade_flagsãã¯
ãã®æ©èœã«é¢ããŠå®è£ ãããŠããŸãã
å€æãããæååã®ãã€ãæ°ãè¿ããŸã (ã¹ãã¢ã¯å«ãŸããŸãã)ã
STRLEN sv_utf8_upgrade_flags_grow(SV *const sv,
const I32 ãã©ã°ã
STRLEN ãšã¯ã¹ãã©ïŒ
sv_utf8_upgrade_nomg
sv_utf8_upgrade ãšäŒŒãŠããŸããããsvãã«å¯ŸããŠéæ³ãå®è¡ããŸããã
STRLEN sv_utf8_upgrade_nomg(SV *sv)
sv_vcatpvf
ãvsprintfãã®ããã«åŒæ°ãåŠçãããã©ãŒããããããåºåã SV ã«è¿œå ããŸãã
ãã»ãããããžãã¯ã¯æ±ããŸããã ãsv_vcatpvf_mgããåç §ããŠãã ããã
éåžžã¯ããã³ããšã³ããsv_catpvfãçµç±ã§äœ¿çšãããŸãã
void sv_vcatpvf(SV *const sv, const char *const pat,
va_list *å®æ°åŒæ°)
sv_vcatpvfn
void sv_vcatpvfn(SV *const sv, const char *const pat,
const STRLEN ãã¬ã³ã
va_list *å®æ°åŒæ°ã
SV **const svargsãconst I32 svmaxã
bool *const might_tainted)
sv_vcatpvfn_flags
ãvsprintfãã®ããã«åŒæ°ãåŠçãããã©ãŒããããããåºåã SV ã«è¿œå ããŸãã
C ã¹ã¿ã€ã«ã®å€æ°åŒæ°ãªã¹ããæ¬ èœããŠãã (NULL) å Žåã¯ãSV ã®é åã䜿çšããŸãã
æ±æãã§ãã¯ãæå¹ã«ããŠå®è¡ãããšãçµæããmaybe_taintedãã«ãã£ãŠç€ºãããŸãã
ã¯ä¿¡é Œã§ããŸãã (å€ãã®å Žåããã±ãŒã«ã®äœ¿çšãåå ã§ã)ã
ãsv_vcatpvfnããšããŠåŒã³åºããããããã©ã°ã«ãSV_GMAGICããå«ãŸããå ŽåãåŒã³åºã㯠get magic ã«ãªããŸãã
éåžžãããã³ããšã³ããsv_vcatpvfãããã³ãsv_vcatpvf_mgãã®ãããããä»ããŠäœ¿çšãããŸãã
void sv_vcatpvfn_flags(SV *const sv,
const char *const patã
const STRLEN ãã¬ã³ã
va_list *å®æ°åŒæ°ã
SV **const svargsã
const I32 SVMAXã
bool *const might_taintedã
const U32 ãã©ã°)
sv_vcatpvf_mg
ãsv_vcatpvfããšäŒŒãŠããŸããããsetãããžãã¯ãåŠçããŸãã
éåžžã¯ããã³ããšã³ããsv_catpvf_mgãçµç±ã§äœ¿çšãããŸãã
void sv_vcatpvf_mg(SV *const sv,
const char *const patã
va_list *å®æ°åŒæ°)
sv_vsetpvf
ãsv_vcatpvfããšåæ§ã«æ©èœããŸãããããã¹ããè¿œå ããã®ã§ã¯ãªããSV ã«ã³ããŒããŸãã
ãã»ãããããžãã¯ã¯æ±ããŸããã ãsv_vsetpvf_mgããåç §ããŠãã ããã
éåžžã¯ããã³ããšã³ããsv_setpvfãçµç±ã§äœ¿çšãããŸãã
void sv_vsetpvf(SV *const sv, const char *const pat,
va_list *å®æ°åŒæ°)
sv_vsetpvfn
ãsv_vcatpvfnããšåæ§ã«æ©èœããŸãããããã¹ããè¿œå ããã®ã§ã¯ãªã SV ã«ã³ããŒããŸãã
éåžžãããã³ããšã³ããsv_vsetpvfãããã³ãsv_vsetpvf_mgãã®ãããããä»ããŠäœ¿çšãããŸãã
void sv_vsetpvfn(SV *const sv, const char *const pat,
const STRLEN ãã¬ã³ã
va_list *å®æ°åŒæ°ã
SV **const svargsãconst I32 svmaxã
bool *const might_tainted)
sv_vsetpvf_mg
ãsv_vsetpvfããšäŒŒãŠããŸããããsetãããžãã¯ãåŠçããŸãã
éåžžã¯ããã³ããšã³ããsv_setpvf_mgãçµç±ã§äœ¿çšãããŸãã
void sv_vsetpvf_mg(SV *const sv,
const char *const patã
va_list *å®æ°åŒæ°)
Unicode ãµããŒã
perlguts ã®ãUnicode Supportãã«ã¯ããã® API ã®æŠèŠãèšèŒãããŠããŸãã
ãæåã®åé¡ãããã³ã倧æåãšå°æåã®å€æŽããåç §ããŠãã ãããå€åœ©ãªæ©èœ
ãã®ã»ã¯ã·ã§ã³ä»¥å€ã§ãç¹ã« Unicode ã§åäœããŸããæååãutf8ããæ€çŽ¢ããŸãã
ãã®ããã¥ã¡ã³ãã
bytes_cmp_utf8
ãbãããblenãã®æåã·ãŒã±ã³ã¹ (ãªã¯ããããšããŠä¿å) ãã
ãuãããulenãã®æåã·ãŒã±ã³ã¹ (UTF-8 ãšããŠä¿å)ã該åœããå Žå㯠0 ãè¿ããŸãã
çãããæåã®æååã 1 çªç®ã®æååããå°ããå Žå㯠-2 ãŸã㯠-1ãå Žå㯠+2 ãŸã㯠+XNUMX
æåã®æåå㯠2 çªç®ã®æååãã倧ããã§ãã
çãæååãæååã®å é ãšäžèŽããå Žåã¯ã-1 ãŸã㯠+1 ãè¿ãããŸãã
é·ãæååãæåéã«éãããã£ãå Žåã¯ã-2 ãŸã㯠+2 ãè¿ãããŸãã
æååã®äžã§ã
int bytes_cmp_utf8(const U8 *b, STRLEN ãã¬ã³,
const U8 *uãSTRLEN ulen)
bytes_from_utf8
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
é·ããlenãã®æååãsãã UTF-8 ãããã€ãã£ãã®ãã€ããšã³ã³ãŒãã£ã³ã°ã«å€æããŸãã
ãutf8_to_bytesããšã¯ç°ãªããŸããããbytes_to_utf8ããšåæ§ã«ãæ°ããäœæããããã¡ã€ã«ãžã®ãã€ã³ã¿ãè¿ããŸãã
äœæãããæååãäœæããæ°ããé·ããå«ãããã«ãlenããæŽæ°ããŸããåæ¬ãè¿åŽããŸã
string å€æãè¡ãããªãå Žåããlenãã¯å€æŽãããŸããã ãis_utf8ãã®å Žåã¯äœãããªã
ãsããå€æãããããå®å šã«æ¬¡ã®ãã®ã§æ§æãããå Žåããis_utf0ãã 8 ã«èšå®ããŸãã
utf8 ã§äžå€ã®æå (ã€ãŸããé EBCDIC ãã·ã³äžã® US-ASCII)ã
U8* bytes_from_utf8(const U8 *s, STRLEN *len,
ããŒã«å€ *is_utf8)
bytes_to_utf8
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
é·ããlenããã€ãã®æååãsãããã€ãã£ããšã³ã³ãŒãã£ã³ã°ãã UTF-8 ã«å€æããŸãã
æ°ããäœæãããæååãžã®ãã€ã³ã¿ãè¿ããæ°ããæååãåæ ããããã«ãlenããèšå®ããŸãã
ãã€ãåäœã®é·ãã
æååã®æ«å°Ÿã«ã¯ãNULãæåãæžã蟌ãŸããŸãã
ãã€ãã£ã以å€ã®ãšã³ã³ãŒãã£ã³ã° (Latin8 ãŸãã¯
EBCDIC)ããsv_recode_to_utf8ã() ãåç §ããŠãã ããã
U8* bytes_to_utf8(const U8 *s, STRLEN *len)
DO_UTF8 "sv" å ã® PV ãåŠçãããã©ããã瀺ã bool ãè¿ããŸãã
UTF-8ã§ãšã³ã³ãŒããããŠããŸãã
ããã䜿ãã¹ãã§ã After ãSvPV()ããŸãã¯ãã®ããªã¢ã³ãã® 1 ã€ãžã®åŒã³åºãïŒå¿ èŠãªå ŽåïŒ
æååã®ãªãŒããŒããŒããåŒã³åºããšãå éšã® UTF-8 ãšã³ã³ãŒã ãã©ã°ãæŽæ°ãããŸãã
bool DO_UTF8(SV* sv)
ãã©ãŒã«ãEQ_utf8
æååãs1ããšãs2ãã®å é éšåïŒãããããŸãã¯äž¡æ¹ïŒãäžèŽããå Žåãtrue ãè¿ããŸãã
ããã㯠UTF-8 ã§ããå¯èœæ§ããããŸã) ã¯ã倧æåãšå°æåãåºå¥ããã«åãã§ãããã以å€ã®å Žå㯠falseãã©ããã£ãŠ
æååã®ã©ããŸã§ãæ¯èŒãããã¯ãä»ã®å ¥åãã©ã¡ãŒã¿ã«ãã£ãŠæ±ºãŸããŸãã
ãu1ãã true ã®å Žåãæååãs1ã㯠UTF-8 ã§ãšã³ã³ãŒãããã Unicode ã§ãããšã¿ãªãããŸãã
ãã以å€ã®å Žåã¯ããã€ãã£ã 8 ããã ãšã³ã³ãŒãã£ã³ã°ã§ãããšã¿ãªãããŸãã ãu2ãã«å¯Ÿå¿
ãs2ãã«é¢ããŠã
ãã€ãé·ãl1ãããŒã以å€ã®å Žåããs1ãã®ã©ããŸã§ãã©ãŒã«ãããã§ãã¯ãããã瀺ããŸãã
å¹³çãã€ãŸãããs1ã+ãl1ããå°éç®æšãšãªããŸããã¹ãã£ã³
ãŽãŒã«ã«å°éããã¹ãã£ã³ããªãéããäžèŽãšã¯èŠãªãããŸããã
ãã®ç®æšãè¶ ããŠç¶ããããšã¯ã§ããŸããã ãs2ãã«å¯Ÿãããl2ããåæ§ã§ãã
ãpe1ãã NULL ã§ãªãããããæããã€ã³ã¿ã NULL ã§ãªãå Žåããã®ãã€ã³ã¿ã¯
ãs1ãã®æ倧ç¹ãã 1 ãã€ãåŸã®äœçœ®ãžã®çµäºãã€ã³ã¿ãšèŠãªãããŸãã
ãããè¶ ãããšããããªãç¶æ³ã§ãã¹ãã£ã³ã¯ç¶è¡ãããªããªããŸãã (ãã®ã«ãŒãã³ã¯
UTF-8 ã§ãšã³ã³ãŒããããå ¥åæååãäžæ£ãªåœ¢åŒã§ã¯ãªãããšãåæãšããŠããŸããäžæ£ãªå ¥åãå¯èœ
ãpe1ããè¶ ããŠèªã¿åãããããã«ããŸãïŒãããã¯ããl1ããšãpe1ãã®äž¡æ¹ã
ãæå®ãããŠããããpe1ãããs1ã+ãl1ãããå°ããå ŽåãäžèŽã¯æ±ºããŠæåããŸããã
ãªããªããããã¯æ±ºããŠãã®ç®æšã«å°éããããšãã§ããªãïŒãããŠå®éã«å察ãããŠããïŒããã§ãã
ãs2ãã«å¯Ÿãããpe2ããåæ§ã§ãã
ãs1ããšãs2ãã®å°ãªããšã 1 ã€ã¯ãŽãŒã«ãæã£ãŠããå¿ èŠããããŸã (ãl2ããšãlXNUMXãã®å°ãªããšã XNUMX ã€ã¯ãŽãŒã«ãæã£ãŠããå¿ èŠããããŸã)
ãŒã以å€ã§ããå¿ èŠããããŸã)ãäž¡æ¹ãäžèŽããå ŽåãäžèŽãæåãããããã«ã¯äž¡æ¹ã«å°éããå¿ èŠããããŸãã
ãŸãããã£ã©ã¯ã¿ãŒã®æãç®ãè€æ°ã®ãã£ã©ã¯ã¿ãŒã®å Žåã¯ããã®å šãŠãæãç®ã§ããå¿ èŠããããŸãã
äžèŽããŸãã (ãæãããã¿ãã«ã€ããŠã¯ã以äžã® tr21 ãªãã¡ã¬ã³ã¹ãåç §ããŠãã ãã)ã
äžèŽãæåããå Žåããpe1ãã NULL ã§ãªãå Žåã¯ã
ã®å§ãŸã 次㮠äžèŽãããã®ãè¶ ãããs1ãã®æåãããã«å¿ããŠ
ãpe2ããšãs2ãã®å Žåã
倧æåãšå°æåãåºå¥ããªãããã«ã代ããã« Unicode ã®ã倧æåãšå°æåã®åºå¥ãã䜿çšãããŸãã
äž¡æ¹ã®æåã®å€§æå/å°æåã«ã€ããŠã¯ããåç §ããŠãã ããã
<http://www.unicode.org/unicode/reports/tr21/> (ã±ãŒã¹ã®ãããã³ã°)ã
I32foldEQ_utf8(const char *s1, char **pe1, UV l1,
bool u1ãconst char *s2ãchar **pe2ã
UV l2ãããŒã« u2)
isUTF8_CHAR
æ£åœãª UTF-8 (ãŸã㯠UTF-XNUMX) ã圢æãããsãã§å§ãŸããã€ãæ°ãè¿ããŸãã
EBCDIC) ã§ãšã³ã³ãŒããããæåããsãå ã®ãe - sããã€ãã®ã¿ãæ€çŽ¢ããŸãã
ãsããããe - 0ããŸã§ã®ã·ãŒã±ã³ã¹ãæŽåœ¢åŒã® UTF-1 ã§ãªãå Žå㯠8 ãè¿ããŸãã
INVARIANT æå (ã€ãŸããé EBCDIC ãã·ã³äžã® ASCII) ã¯æå¹ã§ããããšã«æ³šæããŠãã ããã
UTF-8 æåã
STRLEN isUTF8_CHAR(const U8 *s, const U8 *e)
is_ascii_string
ããã¯ããis_invariant_stringããšèª€è§£ãæããããªååã®å矩èªã§ãã ASCIIã£ãœã
ãã©ãããã©ãŒã ã§ã¯ããã®ååã¯èª€è§£ãæããã®ã§ã¯ãããŸãããASCII ç¯å²ã®æåã¯æ£ç¢ºã«
UTF-8 ã®äžå€æ¡ä»¶ãããããEBCDIC ãã·ã³ã«ã¯ ASCII ã ãã§ã¯ãªããããå€ãã®äžå€æ¡ä»¶ããããŸãã
æåãªã®ã§ããis_invariant_stringããæšå¥šãããŸãã
bool is_ascii_string(const U8 *s, STRLEN len)
is_invariant_string
æååãsãã®æåã®ãlenããã€ããåãã§ããå Žåã« true ãè¿ããŸãã
æååã® UTF-8 ãšã³ã³ãŒãã£ã³ã° (ãŸã㯠EBCDIC ãã·ã³ã® UTF-EBCDIC ãšã³ã³ãŒãã£ã³ã°)ã
ã€ãŸããUTF-8 ã§äžå€ã§ããå Žåã§ãã ASCII ã£ãœããã·ã³ã§ã¯ããã¹ãŠã® ASCII
ãã®å®çŸ©ã«é©åããã®ã¯ ASCII æåã ãã§ãã EBCDIC ãã·ã³ã§ã¯ã
ASCII ç¯å²ã®æåã¯äžå€ã§ãããC1 ã³ã³ãããŒã«ãš
ã\c?ã (ãã㯠EBCDIC ã® ASCII ç¯å²ã«ãããŸãã)ã
ãlenãã 0 ã®å Žåãstrlen(s) ã䜿çšããŠèšç®ãããŸã (ã€ãŸããããã䜿çšãããšã
ãªãã·ã§ã³ã§ã¯ããsãã«ãNULãæåãåã蟌ãããšã¯ã§ããã
çµç«¯ãNULããã€ãïŒã
ãis_utf8_stringã()ããis_utf8_string_loclenã()ãããã³ãis_utfXNUMX_string_loclenããåç §ããŠãã ããã
ãis_utf8_string_locã()ã
bool is_invariant_string(const U8 *s, STRLEN len)
is_utf8_string
æååãsãã®æåã®ãlenããã€ããæå¹ãª UTF-8 æååã圢æããå Žå㯠true ãè¿ããŸãã
ãã以å€ã®å Žå㯠falseã ãlenãã 0 ã®å Žåãstrlen(s) ã䜿çšããŠèšç®ãããŸã (ããã¯
ãã®ãªãã·ã§ã³ã䜿çšããå Žåããsãã«ã¯ãNULãæåãåã蟌ãããšãã§ããªãããšãæå³ããŸãã
çµç«¯ãNULããã€ããå¿ èŠã§ã)ããã¹ãŠã®æåã ASCII ã§ããããšã«æ³šæããŠãã ãã
ãæå¹ãª UTF-8 æååããæ§æããŸãã
ãis_invariant_stringã()ããis_utf8_string_loclenã()ãããã³ãis_invariant_stringããåç §ããŠãã ããã
ãis_utf8_string_locã()ã
bool is_utf8_string(const U8 *s, STRLEN len)
is_utf8_string_loc
ãis_utf8_stringããšäŒŒãŠããŸããã倱æã®å Žæãä¿åããŸãïŒæ¬¡ã®å ŽåïŒ
"utf8ness failed") ãŸãã¯å Žæ "s"+"len" ("utf8ness success" ã®å Žå)
ãepãã§ã
ãis_utf8_string_loclenã() ããã³ãis_utf8_stringã() ãåç §ããŠãã ããã
bool is_utf8_string_loc(const U8 *s, STRLEN len,
const U8 **ep)
is_utf8_string_loclen
"is_utf8_string"() ãšäŒŒãŠããŸããã倱æã®å Žæãä¿åããŸã (
"utf8ness failed") ãŸãã¯å Žæ "s"+"len" ("utf8ness success" ã®å Žå)
ãepãã«ã¯ UTF-8 ã§ãšã³ã³ãŒããããæåã®æ°ããelãã«ã¯ UTF-XNUMX ã§ãšã³ã³ãŒããããæåã®æ°ãå ¥ããŸãã
ãis_utf8_string_locã() ããã³ãis_utf8_stringã() ãåç §ããŠãã ããã
bool is_utf8_string_loclen(const U8 *s, STRLEN len,
const U8 **epãSTRLEN *el)
pv_uni_display
ã¹ã«ã©ãŒãdsvãã«ãæååãspvããé·ããlenãã®è¡šç€ºå¯èœãªããŒãžã§ã³ãæ§ç¯ããŸãã
衚瀺å¯èœãªããŒãžã§ã³ã®é·ãã¯æ倧ã§ããpvlimããã€ãã§ã (ãã以äžã®å Žåãæ®ãã¯
åãè©°ããããã...ããè¿œå ãããŸã)ã
ãflagsãåŒæ°ã«ã¯ã衚瀺ããããã« UNI_DISPLAY_ISPRINT ãèšå®ã§ããŸãã isPRINT()ã§ãã
æåèªäœããã®ãŸãŸè¡šç€ºããUNI_DISPLAY_BACKSLASH 㧠\\[nrfta\\] ã衚瀺ããŸãã
ããã¯ã¹ã©ãã·ã¥ä»ãããŒãžã§ã³ (ã\nããªã©) (UNI_DISPLAY_BACKSLASH ãåªå ãããŸã)
\\ ã®å Žå㯠UNI_DISPLAY_ISPRINT)ã UNI_DISPLAY_QQ (ããã³ãã®ãšã€ãªã¢ã¹ UNI_DISPLAY_REGEX)
UNI_DISPLAY_BACKSLASH ãš UNI_DISPLAY_ISPRINT ã®äž¡æ¹ããªã³ã«ããŸãã
ãdsvãã®PVãžã®ãã€ã³ã¿ãè¿ãããŸãã
ãsv_uni_displayããåç §ããŠãã ããã
char* pv_uni_display(SV *dsv, const U8 *spv,
STRLEN lenãSTRLEN pvlimã
UVãã©ã°)
sv_cat_decode
ãšã³ã³ãŒã㯠Encode ãªããžã§ã¯ãã§ãããšæ³å®ãããSSV ã® PV ã¯æ¬¡ã®ããã«æ³å®ãããŸãã
ãã®ãšã³ã³ãŒããšãã³ãŒãã®ãªã¯ãããã¯ãå ¥åãéå§ãããäœçœ® (PV
+ *ãªãã»ãã) ãæããŸããã DSV ã¯ããã³ãŒãããã UTF-8 æååãé£çµããŸãã
ããã³ãŒãåºåã«æåå tstr ã衚瀺ããããããŸãã¯
å ¥å㯠ssv ã® PV ã§çµäºããŸãããªãã»ãããã€ã³ããšãªãå€
ssv äžã®æåŸã®å ¥åäœçœ®ã«å€æŽãããŸãã
ã¿ãŒãããŒã¿ãèŠã€ãã£ãå Žå㯠TRUE ãè¿ãããã以å€ã®å Žå㯠FALSE ãè¿ããŸãã
bool sv_cat_decode(SV* dsv, SV *ãšã³ã³ãŒãã£ã³ã°, SV *ssv,
int *offset, char* tstr, int tlen)
sv_recode_to_utf8
ãšã³ã³ãŒãã£ã³ã°ã¯ Encode ãªããžã§ã¯ãã§ãããšæ³å®ããããšã³ããªæã« SV ã® PV ã¯æ¬¡ã®ããã«ãªããŸãã
ãã®ãšã³ã³ãŒãã£ã³ã°ã§ã¯ãªã¯ãããã§ãããšã¿ãªãããSV 㯠Unicode ã«å€æãããŸãã
(ããã³UTF-8)ã
SV ããã§ã« UTF-8 ã§ããå Žå (ãŸã㯠POK ã§ã¯ãªãå Žå)ããŸãã¯ãšã³ã³ãŒãã£ã³ã°ã
åç §ãSV ã«ã¯äœãè¡ãããŸããããšã³ã³ãŒãããEncode::XSãã§ãªãå Žå
ãªããžã§ã¯ãããšã³ã³ãŒããããšãæªãããšãèµ·ãããŸãã ïŒèŠã lib/encoding.pm ãšã³ã³ãŒãããŸãã)
SV ã® PV ãè¿ãããŸãã
char* sv_recode_to_utf8(SV* sv, SV *ãšã³ã³ãŒãã£ã³ã°)
sv_uni_display
ã¹ã«ã©ãŒãdsvãã«å¯ŸããŠãã¹ã«ã©ãŒãsvãã®è¡šç€ºå¯èœãªããŒãžã§ã³ãæ§ç¯ããŸãã
衚瀺å¯èœãªããŒãžã§ã³ã®é·ãã¯æ倧ã§ããpvlimããã€ãã§ã (ãã以äžã®å Žåãæ®ãã¯
åãè©°ããããã...ããè¿œå ãããŸã)ã
ãflagsãåŒæ°ã¯ãpv_uni_displayã() ãšåæ§ã§ãã
ãdsvãã®PVãžã®ãã€ã³ã¿ãè¿ãããŸãã
char* sv_uni_display(SV *dsv, SV *ssv, STRLEN pvlim,
UVãã©ã°)
to_utf8_case
ãpãã«ã¯ãæåããšã³ã³ãŒããã UTF-8 æååãžã®ãã€ã³ã¿ãå«ãŸããŸãã
å€æãããããã®ã«ãŒãã³ã¯ããpãã®æåãæŽåœ¢åŒã§ããããšãåæãšããŠããŸãã
"ustrp" ã¯ãå€æçµæãæ ŒçŽããæåãããã¡ãžã®ãã€ã³ã¿ã§ãã
ãlenpãã¯çµæã®é·ããžã®ãã€ã³ã¿ã§ãã
ãswashpãã¯ã䜿çšããã¹ã¯ãã·ã¥ãžã®ãã€ã³ã¿ã§ãã
ç¹å¥ãªãããã³ã°ãšéåžžã®ãããã³ã°ã®äž¡æ¹ã次ã®å Žæã«ä¿åãããŸãã lib/unicore/To/Foo.pl,
SWASHNEW ã«ãã£ãŠããŒãããã䜿çšã㊠lib/utf8_heavy.plã ãç¹å¥ãªãïŒéåžžã¯ããã§ã¯ãããŸãããã
è€æ°æåã®ãããã³ã°) ãæåã«è©Šè¡ãããŸãã
ãspecialãã¯æååã§ãéåžžã¯ãNULLããŸãã¯ããã§ãã ãNULLãã¯ãç¹å¥ãªåŠçãè¡ããªãããšãæå³ããŸãã
ãããã³ã°; ããã¯ç¹å¥ãªãããã³ã°ã䜿çšããããšãæå³ããŸãããã®2ã€ä»¥å€ã®å€ã¯ã
次ã®ãããªç¹å¥ãªãããã³ã°ãå«ãããã·ã¥ã®ååãšããŠæ±ãããŸãã
ãutf8::ToSpecLowerãã
ãnormalãã¯ãToLowerãã®ãããªæååã§ãã¹ã¯ãã·ã¥ %utf8::ToLower ãæå³ããŸãã
UV to_utf8_case(const U8 *p, U8* ustrp,
STRLEN *lenpãSV **ã¹ã¯ãã·ã¥ã
const char *éåžžã
const char *ç¹æ®)
to_utf8_fold
代ããã«ãtoFOLD_utf8ãã䜿çšããŠãã ããã
UV to_utf8_fold(const U8 *p, U8* ustrp,
STRLEN *lenp)
to_utf8_ lower
代ããã«ãtoLOWER_utf8ãã䜿çšããŠãã ããã
UV to_utf8_ lower(const U8 *p, U8* ustrp,
STRLEN *lenp)
to_utf8_title
代ããã«ãtoTITLE_utf8ãã䜿çšããŠãã ããã
UV to_utf8_title(const U8 *p, U8* ustrp,
STRLEN *lenp)
to_utf8_upper
代ããã«ãtoUPPER_utf8ãã䜿çšããŠãã ããã
UV to_utf8_upper(const U8 *p, U8* ustrp,
STRLEN *lenp)
utf8n_to_uvchr
ãã®æ©èœã¯ãéåžžã«ç¹æ®ãªç¶æ³ã§ã®ã¿äœ¿çšããŠãã ãããã»ãšãã©ã®ã³ãŒã
ãããçŽæ¥åŒã³åºãã®ã§ã¯ãªãããutf8_to_uvchr_bufã() ã䜿çšããå¿ èŠããããŸãã
æäžäœã¬ãã«ã® UTF-8 ãã³ãŒã ã«ãŒãã³ãã®ãã€ãã£ã ã³ãŒã ãã€ã³ãå€ãè¿ããŸãã
æååãsãã®æåã®æåãUTF-8 (ãŸã㯠UTF-EBCDIC) ã§ãããšæ³å®ãããŸãã
ãšã³ã³ãŒãã£ã³ã°ã§ããããcurlenããã€ã以äžã§ããããšã *retlen (ãretlenãã NULL ã§ãªãå Žå)
ãã®æåã®é·ãããã€ãåäœã§èšå®ããŸãã
ãflagsãã®å€ã¯ããsãããŠã§ã«ãæããŠããªãå Žåã®åäœã決å®ããŸãã
圢æããã UTF-8 æåã flags ã 0 ã®å Žåãå¥åœ¢ãèŠã€ãã£ãå Žå㯠XNUMX ã«ãªããŸãã
è¿ããã*retlen ã ("s" + *retlen) ã次ã«å¯èœãªäœçœ®ã«ãªãããã«èšå®ãããŸãã
ãsãã§ã¯ãäžæ£ã§ã¯ãªãæåãå§ããããšãã§ããŸãããŸããUTF-8 ã®èŠåã衚瀺ãããå Žåã¯ã
åå¥çã«ç¡å¹ã«ãªã£ãŠããªãå Žåã¯ãèŠåãçºçããŸãã
ããŸããŸãª ALLOW ãã©ã°ãããã©ã°ãã«èšå®ããŠãåã ã®ã¢ã¯ã»ã¹ãèš±å¯ãã (èŠåããªã) ããšãã§ããŸãã
ã·ãŒã±ã³ã¹ãé·ãããïŒã€ãŸãã
åãã³ãŒããã€ã³ããè¡šçŸã§ããçãã·ãŒã±ã³ã¹ã§ããé·ãããã·ãŒã±ã³ã¹ã¯
æœåšçãªã»ãã¥ãªãã£åé¡ã®ãããUTF-8 æšæºã§ã¯æ瀺çã«çŠæ¢ãããŠããŸã)ã
ãã 1 ã€ã®äžæ£ãªäŸã¯ãæåã®æåã®ãã€ããæ£åœãªãã®ã§ã¯ãªãããšã§ãã
æåã®ãã€ããèŠã utf8.h ãã®ãããªãã©ã°ã®ãªã¹ãã«ã€ããŠã¯ãèš±å¯ãããé·ã 0 ã®æååã®å Žåã
ãã®é¢æ°ã¯ 0 ãè¿ããŸããèš±å¯ãããé·ãããã·ãŒã±ã³ã¹ã®å Žåãèšç®ãããã³ãŒã ãã€ã³ã
ãè¿ãããŸããä»ã®èš±å¯ãããŠãããã¹ãŠã®äžæ£ãªåœ¢åŒã«ã€ããŠã¯ãUnicode REPLACEMENT
ãããã«ã¯æ±ºå®å¯èœãªåŠ¥åœãªå€ããªããããCHARACTER ãè¿ãããŸãã
UTF8_CHECK_ONLY ãã©ã°ã¯ã(ä»ã®ãŠãŒã¶ãŒã«ãã£ãŠ) èš±å¯ãããŠããªãå Žåã®åäœããªãŒããŒã©ã€ãããŸãã
flags) ã®å¥åœ¢ãèŠã€ãããŸããããã®ãã©ã°ãèšå®ãããŠããå Žåãã«ãŒãã³ã¯æ¬¡ã®ããã«ä»®å®ããŸãã
åŒã³åºãå ã¯èŠåãåºããŸããããã®é¢æ°ã¯é»ã£ãŠ "retlen" ã次ã®ããã«èšå®ããã ãã§ãã
ã-1ã(ãSTRLENãã«ãã£ã¹ã) ã¯ãŒããè¿ããŸãã
ãã® API ã§ã¯ããNULãã®ãã³ãŒããæåãããã©ãããæ確ã«ããå¿ èŠãããããšã«æ³šæããŠãã ããã
次ã®ããã«ãæåãå ¥åããããšã©ãŒãè¿ãããŸã (UTF8_CHECK_ONLY ãã©ã°ãèšå®ãããŠããªãå Žå)ã
ã©ã¡ãã®å Žåãã0 ãè¿ãããŸããææ§ããé¿ããããã«ããŒããè¿ããããšãã«ãæåã®
"s" ã®ãã€ãã 0 ã§ããããã§ããå Žåãå ¥åã¯ãNULãã§ãããããã§ãªãå Žåã¯ãå ¥åã«
ãšã©ãŒã
ç¹å®ã®ã³ãŒããã€ã³ãã«ã¯åé¡ããããšèããããŸããããã㯠Unicode ãµãã²ãŒãã§ãã
Unicode ã®éæåãããã³ Unicode ã®æå€§å€ 0x10FFFF ãè¶ ããã³ãŒã ãã€ã³ããã«ãã
ããã©ã«ãã§ã¯ããããã¯éåžžã®ã³ãŒããã€ã³ããšã¿ãªãããŸãããç¹å®ã®ç¶æ³ã§ã¯ã
圌ãã«å¯Ÿããç¹å¥ãªå¯Ÿå¿ã ãflagsãã« UTF8_DISALLOW_ILLEGAL_INTERCHANGE ãå«ãŸããå Žåã
3 ã€ã®ã¯ã©ã¹ã¯ãã¹ãŠå¥åœ¢ãšããŠæ±ããããã®ããã«æ±ãããŸããæ
UTF8_DISALLOW_SURROGATEãUTF8_DISALLOW_NONCHARãããã³ UTF8_DISALLOW_SUPER (æå³
æ³ç㪠Unicode ã®æ倧å€ãè¶ ããïŒãããã®ã«ããŽãªãçŠæ¢ããããã«èšå®ã§ããŸã
åå¥ã«
ãã©ã° UTF8_WARN_ILLEGAL_INTERCHANGEãUTF8_WARN_SURROGATEãUTF8_WARN_NONCHARã
ããã³ UTF8_WARN_SUPER ã«ãããããããã®èŠåã¡ãã»ãŒãžãçæãããŸãã
ã«ããŽãªãå«ãŸããŠããŸããããã以å€ã®å Žåãã³ãŒã ãã€ã³ãã¯æå¹ã§ãããšèŠãªãããŸã (ããã§ãªãå Žå)ã
å¥åœ¢ïŒãã«ããŽãªãŒãå¥åœ¢ãšããŠæ±ããåŒãäžããã«ã¯
èŠåã®å Žåã¯ãWARN ãã©ã°ãš DISALLOW ãã©ã°ã®äž¡æ¹ãæå®ããŸãã (ãã ããèŠåã¯æ¬¡ã®ãšããã§ãã
åå¥çã«ç¡å¹ã«ãªã£ãŠããå ŽåããŸã㯠UTF8_CHECK_ONLY ãæå®ãããŠããå Žåã¯çºçããŸããã)
éåžžã«å€§ããªã³ãŒã ãã€ã³ã (0x7FFF_FFFF 以äž) ã¯ãããåé¡ããããšèããããŸãã
ãã®ä»ã¯ Unicode ã®æ³å®æ倧å€ãè¶ ããŠããŸããçç±ã¯ããã€ããããŸãã
ASCII ãã©ãããã©ãŒã ã§è¡šçŸããã«ã¯å°ãªããšã 32 ããããå¿ èŠã§ãããããã§ã¯ãããŸããã
EBCDIC ãã©ãããã©ãŒã ãšå ã® UTF-8 ä»æ§ã§ã¯ãŸã£ããè¡šçŸå¯èœã§ã
ãã®æ°å€ãè¶ ããããšã¯ãããŸãã (çŸåšã® 0x10FFFF å¶éã¯åŸã§èª²ãããŸãã)ã (
å°ãããã®ãã€ãŸã 32 ãããã«åãŸããã®ã¯ãASCII ã® UV ã§è¡šçŸã§ããŸãã
ããã¯ãå®è¡ã§ããæäœã®æ°ãæå³ããŸãã
ASCII ãã©ãããã©ãŒã ã§ã® UTF-8 ãšã³ã³ãŒãã¯ããªãå¶éãããŠããŸãã
ãããã®å€§ããªã³ãŒã ãã€ã³ãã¯ã0xFE ãŸã㯠0xFF ãå«ããã€ãã§å§ãŸããŸããã®
UTF8_DISALLOW_FE_FF ãã©ã°ãæå®ãããšããããã¯äžæ£ãªãã®ãšããŠæ±ãããŸããã
Unicode ããå°ããã³ãŒã ãã€ã³ããèš±å¯ããŸãã (ãã¡ãããUTF8_DISALLOW_SUPER ã¯
ããããå«ããUnicode ããäžã®ãã¹ãŠã®ã³ãŒã ãã€ã³ããäžæ£ãªãã®ãšããŠæ±ããŸãã)
åæ§ã«ãUTF8_WARN_FE_FF ã¯ä»ã® WARN ãã©ã°ãšåæ§ã«åäœããŸãããé©çšãããã®ã¯
ãããã®ã³ãŒããã€ã³ãã«ã
Unicode æåã«å¯Ÿå¿ããä»ã®ãã¹ãŠã®ã³ãŒã ãã€ã³ã (ç§ç䜿çšãå«ã)
ãããŠããŸã å²ãåœãŠãããŠããªããã®ã¯ã決ããŠäžæ£ãšã¯ã¿ãªããããèŠåããããŸããã
UV utf8n_to_uvchr(const U8 *s, STRLENcurlen,
STRLEN *retlenãU32 ãã©ã°)
utf8n_to_uvuni
代ããã«ãutf8_to_uvchr_bufãã䜿çšãããããŸãã«ãutf8n_to_uvchrãã䜿çšããŸãã
ãã®é¢æ°ã¯ãEBCDIC ãš ASCII ã®äž¡æ¹ãåŠçããã³ãŒãã«äŸ¿å©ã§ããã
Unicode ããããã£ãæã€ãã©ãããã©ãŒã ã§ãããPerl v5.20 以éã§ã¯ããã®åºå¥ããªããªããŸããã
ãã©ãããã©ãŒã éã®ããåãã¯ãã»ãšãã©ã®ã³ãŒãããã¯èŠããªãããã«ãªã£ãŠããããã
æ©èœãããªããæããã®ã«ãªãå¯èœæ§ã¯éåžžã«äœãã§ãããã®æ£ç¢ºãªæ å ±ãå¿ èŠãªå Žåã¯ã
æ©èœã®å Žåã¯ã代ããã«ãNATIVE_TO_UNI(utf8_to_uvchr_buf(...))ãã䜿çšãããã
ãNATIVE_TO_UNI(utf8n_to_uvchr(...))ãã
UV utf8n_to_uvuni(const U8 *s, STRLENcurlen,
STRLEN *retlenãU32 ãã©ã°)
UTF8ã¹ããã
UTF-8 ã§ãšã³ã³ãŒããããæåã®ãã€ãæ°ãè¿ããŸãããã®æåã®æå (ãããã
ã®ã¿ïŒãã€ãã¯ãsãã§ç€ºãããŸãã
STRLEN UTF8SKIP(char* s)
utf8_è·é¢
UTF-8 ãã€ã³ã¿ãŒãaããšãbãã®éã® UTF-8 æåæ°ãè¿ããŸãã
èŠå: ãã€ã³ã¿ãåã UTF-8 å ãæããŠããããšããããã£ãŠãããå Žåã«ã®ã¿äœ¿çšããŠãã ããã
ãããã¡ã
IV utf8_ distance(const U8 *a, const U8 *b)
utf8_ããã
ãoffãæåã§çœ®ãæãããã UTF-8 ãã€ã³ã¿ãsããåæ¹ãŸãã¯
åŸæ¹ã
èŠå: ãoffãã UTF-8 ããŒã¿å ã«ããããšã*ç¥ã£ãŠãã*å Žåãé€ãã次ã®ã³ãã³ãã䜿çšããªãã§ãã ããã
"s" ã«ãã£ãŠæããã * ãã㊠* ãšã³ããªã§ã¯ "s" ããã®æåã®ãã€ãã«äœçœ®åããããã
æåããŸãã¯æåã®æåŸã®ãã€ãã®çŽåŸã
U8* utf8_hop(const U8 *sãI32 ãªã)
utf8_length
UTF-8 æåã§ãšã³ã³ãŒããããæååãsãã®é·ããæåæ°ã§è¿ããŸããã«åè»ããŸã
ãeãïŒäž¡ç«¯ãå«ãïŒã ãe < sãã®å ŽåããŸãã¯ã¹ãã£ã³ããeããè¶ ããŠçµäºããå Žåã¯ã鳎ããŸãã
STRLEN utf8_length(const U8* s, const U8 *e)
utf8_to_bytes
泚: ãã®æ©èœã¯å®éšçãªãã®ã§ãããäºåãªãå€æŽãŸãã¯åé€ãããå ŽåããããŸãã
é·ããlenãã®æååãsãã UTF-8 ãããã€ãã£ãã®ãã€ããšã³ã³ãŒãã£ã³ã°ã«å€æããŸãã
ãbytes_to_utf8ããšã¯ç°ãªããããã¯å ã®æååãäžæžããããlenãã次ã®ããã«æŽæ°ããŸãã
æ°ããé·ããå«ãŸããŸãã倱æããå Žå㯠1 ãè¿ãããlenãã -XNUMX ã«èšå®ããŸãã
æååã®ã³ããŒãå¿ èŠãªå Žåã¯ããbytes_from_utf8ããåç §ããŠãã ããã
U8* utf8_to_bytes(U8 *s, STRLEN *len)
utf8_to_uvchr_buf
æååãsãã®æåã®æåã®ãã€ãã£ã ã³ãŒã ãã€ã³ããè¿ããŸãã
UTF-8 ãšã³ã³ãŒãã§ãããšæ³å®ãããŸãã "send" 㯠"s" ã®æ«å°Ÿãè¶ ãã 1 ãæããŸãã
*retlen ã¯ããã®æåã®é·ã (ãã€ãåäœ) ã«èšå®ãããŸãã
ãsããæŽåœ¢åŒã® UTF-8 æåãæããŠããªãå ŽåãUTF8 èŠåã衚瀺ãããŸãã
æå¹ãªå ŽåããŒããè¿ããã*retlen ã (ãretlenãã NULL ã§ãªãå Žå) -1 ã«èšå®ãããŸãããã
ãããã®èŠåã¯ãªãã«ãªããæ確ã«å®çŸ©ãããŠããå Žåã¯èšç®å€ (ãŸã㯠Unicode
ããã§ãªãå Žå㯠REPLACEMENT CHARACTER)ããµã€ã¬ã³ãã«è¿ããã*retlen ãèšå®ãããŸã (å Žå
"retlen" 㯠NULL ã§ã¯ãªã)ããã®ãã ("s" + *retlen) ã "s" å ã®æ¬¡ã®å¯èœãªäœçœ®ã«ãªããŸãã
ããã¯ãäžæ£ã§ã¯ãªãæåãéå§ããå¯èœæ§ããããŸãã 詳现ã«ã€ããŠã¯ããutf8n_to_uvchrããåç §ããŠãã ããã
REPLACEMENT CHARACTER ãè¿ããããšãã
UV utf8_to_uvchr_buf(const U8 *s, const U8 *send,
STRLEN *ãªã¬ã³)
utf8_to_uvuni_buf
å»æ¢ãããŸãã! ãã®é¢æ°ã¯ Perl ã®å°æ¥ã®ãªãªãŒã¹ããåé€ãããäºå®ã§ãã
æ°ããã³ãŒãã«ã¯äœ¿çšããªãã§ãã ããã æ¢åã®ã³ãŒãããåé€ããŠãã ããã
ã³ãŒã㧠Unicode ãæ±ãå¿ èŠãããã®ã¯éåžžã«ãŸããªç¶æ³ã§ã (
ãã€ãã£ããšã¯å¯Ÿç §ç) ã³ãŒããã€ã³ãããããã®å°æ°ã®ã±ãŒã¹ã§ã¯ã次ã䜿çšããŸã
代ããã«ãNATIVE_TO_UNI(utf8_to_uvchr_buf(...))ãã䜿çšããŸãã
æååã®æåã®æåã® Unicode (éãã€ãã£ã) ã³ãŒã ãã€ã³ããè¿ããŸãã
ãsã㯠UTF-8 ãšã³ã³ãŒãã£ã³ã°ã§ãããšæ³å®ãããŸãã "send" ã¯æ«å°Ÿãè¶ ã㊠1 ãæããŸãã
ãããã ãretlenãã¯ããã®æåã®é·ã (ãã€ãåäœ) ã«èšå®ãããŸãã
ãsããæŽåœ¢åŒã® UTF-8 æåãæããŠããªãå ŽåãUTF8 èŠåã衚瀺ãããŸãã
æå¹ãªå ŽåããŒããè¿ããã*retlen ã (ãretlenãã NULL ã§ãªãå Žå) -1 ã«èšå®ãããŸãããã
ãããã®èŠåã¯ãªãã§ãããæ確ã«å®çŸ©ãããŠããå Žåã¯èšç®å€ (ãŸã㯠Unicode
REPLACEMENT CHARACTER (ããã§ãªãå Žå) ããµã€ã¬ã³ãã«è¿ããã*retlen ãèšå®ãããŸã (ããã§ãªãå Žå)ã
"retlen" 㯠NULL ã§ã¯ãªã)ããã®ãã ("s" + *retlen) ã "s" å ã®æ¬¡ã®å¯èœãªäœçœ®ã«ãªããŸãã
ããã¯ãäžæ£ã§ã¯ãªãæåãéå§ããå¯èœæ§ããããŸãã 詳现ã«ã€ããŠã¯ããutf8n_to_uvchrããåç §ããŠãã ããã
REPLACEMENT CHARACTER ãè¿ããããšãã
UV utf8_to_uvuni_buf(const U8 *s, const U8 *send,
STRLEN *ãªã¬ã³)
UVCHR_SKIP
ãšã³ã³ãŒãæã«ã³ãŒããã€ã³ããcpããè¡šãããã«å¿ èŠãªãã€ãæ°ãè¿ããŸãã
UTF-8ãšããŠã ãcpãã¯ã255 æªæºã®å Žåã¯ãã€ãã£ã (ASCII ãŸã㯠EBCDIC) ã³ãŒã ãã€ã³ãã§ãããã
ãã以å€ã®å Žå㯠Unicode ã³ãŒã ãã€ã³ãã
STRLEN UVCHR_SKIP(UV cp)
uvchr_to_utf8
ãã€ãã£ã ã³ãŒã ãã€ã³ããuvãã® UTF-8 è¡šçŸãæ«å°Ÿã«è¿œå ããŸãã
æååãdã; ãdãã«ã¯å°ãªããšããUVCHR_SKIP(uv)+1ã(æ倧ãUTF8_MAXBYTES+1ã)ãå¿ èŠã§ã
ç¡æã®ãã€ããå©çšå¯èœã§ããæ»ãå€ã¯çµäºåŸã®ãã€ããžã®ãã€ã³ã¿ã§ãã
æ°ãã£ã©ã¯ã¿ãŒã®ãèšãæãããšã
d = uvchr_to_utf8(d, uv);
ã¯ã€ããã€ãã£ãæåãæèããæšå¥šã®èšãæ¹ã§ã
*(d++) = 玫å€ç·;
ãã®é¢æ°ã¯ãä»»æã® UV ãå ¥åãšããŠåãå ¥ããŸããé Unicode ã³ãŒããçŠæ¢ãŸãã¯èŠåããã«ã¯
åé¡ãããå¯èœæ§ã®ããç¹ã«ã€ããŠã¯ããuvchr_to_utf8_flagsããåç §ããŠãã ããã
U8* uvchr_to_utf8(U8 *d, UV uv)
uvchr_to_utf8_flags
ãã€ãã£ã ã³ãŒã ãã€ã³ããuvãã® UTF-8 è¡šçŸãæ«å°Ÿã«è¿œå ããŸãã
æååãdã; ãdãã«ã¯å°ãªããšããUVCHR_SKIP(uv)+1ã(æ倧ãUTF8_MAXBYTES+1ã)ãå¿ èŠã§ã
ç¡æã®ãã€ããå©çšå¯èœã§ããæ»ãå€ã¯çµäºåŸã®ãã€ããžã®ãã€ã³ã¿ã§ãã
æ°ãã£ã©ã¯ã¿ãŒã®ãèšãæãããšã
d = uvchr_to_utf8_flags(d, uv, flags);
ãŸãã¯ãã»ãšãã©ã®å Žåã
d = uvchr_to_utf8_flags(d, uv, 0);
ãã㯠Unicode ãæèããèšãæ¹ã§ã
*(d++) = 玫å€ç·;
ãã®é¢æ°ã¯ãUTF-8 ã§ã¯ãªãã³ãŒããã€ã³ãã§ã UTF-XNUMX ã«å€æããŸã (èŠåã¯ããŸãã)ã
ããã©ã°ãã« 1 ã€ä»¥äžã® Unicode ãå«ãŸããŠããªãéããæ³ç㪠Unicode ã§ããããåé¡ããã
次ã®ãã©ã°:
ãuvãã Unicode ãµãã²ãŒã ã³ãŒã ãã€ã³ãã§ãããUNICODE_WARN_SURROGATE ãèšå®ãããŠããå Žåã
UTF8 èŠåãæå¹ã«ãªã£ãŠããå Žåãé¢æ°ã¯èŠåãçæããŸãã代ããã«
UNICODE_DISALLOW_SURROGATE ãèšå®ãããŠããå Žåãé¢æ°ã¯å€±æããNULL ãè¿ããŸãããã
äž¡æ¹ã®ãã©ã°ãèšå®ãããŠããå Žåãé¢æ°ã¯èŠåãåºããNULL ãè¿ããŸãã
UNICODE_WARN_NONCHAR ãã©ã°ãš UNICODE_DISALLOW_NONCHAR ãã©ã°ã¯ã
ãã®é¢æ°ã¯ Unicode ã®éæåãåŠçããŸããåæ§ã«ãUNICODE_WARN_SUPER
UNICODE_DISALLOW_SUPER ãã©ã°ã¯ãäžèšã®ã³ãŒã ãã€ã³ãã®åŠçã«åœ±é¿ããŸãã
Unicode ã®æ倧å€ã¯ 0x10FFFF ã§ãã 0x7FFF_FFFF ãè¶ ããã³ãŒã ãã€ã³ã (å¶æ°
移æ€æ§ãäœã) ã¯ãä»ã® Unicode ã³ãŒããè¶ ããå Žåã§ããèŠåããã³/ãŸãã¯çŠæ¢ãããå¯èœæ§ããããŸãã
ãã€ã³ãã¯ãUNICODE_WARN_FE_FF ãã©ã°ãš UNICODE_DISALLOW_FE_FF ãã©ã°ã«ãã£ãŠåãå ¥ããããŸãã
æåŸã«ããã©ã° UNICODE_WARN_ILLEGAL_INTERCHANGE ã¯ã次㮠4 ã€ãã¹ãŠãéžæããŸãã
äžèšã® WARN ãã©ã°ã UNICODE_DISALLOW_ILLEGAL_INTERCHANGE 㯠4 ã€ãã¹ãŠãéžæããŸã
ãã©ã°ãçŠæ¢ããŸãã
U8* uvchr_to_utf8_flags(U8 *dãUV uvãUV ãã©ã°)
uvoffuni_to_utf8_flags
ãã®æ©èœã¯ãéåžžã«ç¹æ®ãªç¶æ³ã§ã®ã¿äœ¿çšããŠãã ããããã®ä»£ããã
ã»ãšãã© ã ã³ãŒã ãã¹ã ã€ãããŸã ãuvchr_to_utf8ã or ãuvchr_to_utf8_flagsã.
ãã®é¢æ°ã¯ããããšäŒŒãŠããŸãããå ¥åã¯å³å¯ãª Unicode ã§ã (
ãã€ãã£ãïŒã³ãŒããã€ã³ããéåžžã«ãŸããªç¶æ³ã§ã®ã¿ãã³ãŒãã§
ãã€ãã£ãã³ãŒããã€ã³ãã
詳现ã¯ãuvchr_to_utf8_flagsãã®èª¬æãåç §ããŠãã ããã
U8* uvoffuni_to_utf8_flags(U8 *dãUV uvãUV ãã©ã°)
uvuni_to_utf8_flags
代ããã«ãã»ãŒç¢ºå®ã«ãuvchr_to_utf8ããŸãã¯ãuvchr_to_utf8_flagsãã䜿çšããå¿ èŠããããŸãã
ãã®é¢æ°ã¯ããuvoffuni_to_utf8_flagsãã®éæšå¥šã®å矩èªã§ãããããèªäœã¯ã
éæšå¥šã§ã¯ãããŸããããå€ç«ããç¶æ³ã§ã®ã¿äœ¿çšããå¿ èŠããããŸããããã
é¢æ°ã¯ãEBCDIC ãš ASCII ã®äž¡æ¹ãåŠçããã³ãŒãã«äŸ¿å©ã§ãã
Unicode ããããã£ãæã€ãã©ãããã©ãŒã ã§ãããPerl v5.20 以éã§ã¯ããã®åºå¥ããªããªããŸããã
ãã©ãããã©ãŒã éã®ããåãã¯ãã»ãšãã©ã®ã³ãŒãããã¯èŠããªãããã«ãªã£ãŠããããã
æ©èœãããªããæããã®ã«ãªãå¯èœæ§ã¯éåžžã«äœãã§ãã
U8* uvuni_to_utf8_flags(U8 *dãUV uvãUV ãã©ã°)
Variables äœæãã by ãxsubppã ãš ãxsubppã å éš æ©èœ
æ°ããXSããã
XSUB ã Perl ãµãã«ãŒãã³ãšããŠæ¥ç¶ããããã«ãxsubppãã«ãã£ãŠäœ¿çšãããŸãã Perl ãããã¿ã€ãããµãã«ãŒãã³ã«è¿œå ããŸãã
XS_APIVERSION_BOOTCHECK
XS ã¢ãžã¥ãŒã«ãã³ã³ãã€ã«ããã Perl API ããŒãžã§ã³ã確èªãããã¯ã
ããŒãå ã® Perl ã€ã³ã¿ãŒããªã¿ãŒã® API ããŒãžã§ã³ãšäžèŽããŸãã
XS_APIVERSION_BOOTCHECK;
XS_VERSION
XS ã¢ãžã¥ãŒã«ã®ããŒãžã§ã³èå¥åãéåžžãããã¯èªåçã«åŠçãããŸãã
ãExtUtils::MakeMakerãã ãXS_VERSION_BOOTCHECKããåç §ããŠãã ããã
XS_VERSION_BOOTCHECK
PM ã¢ãžã¥ãŒã«ã® $VERSION å€æ°ã XS ã¢ãžã¥ãŒã«ã®å€æ°ãšäžèŽããããšã確èªãããã¯ã
ãXS_VERSIONãå€æ°ãããã¯éåžžããxsubppãã«ãã£ãŠèªåçã«åŠçãããŸããèŠã
perlxs ã®ãVERSIONCHECK: ããŒã¯ãŒããã
XS_VERSION_BOOTCHECK;
ããŒãžã§ã³ç®¡ç
æ°ããããŒãžã§ã³
SV ã§æž¡ããããã®ã«åºã¥ããŠæ°ããããŒãžã§ã³ ãªããžã§ã¯ããè¿ããŸãã
SV *sv = æ°ããããŒãžã§ã³(SV *ver);
ver SV ã§æž¡ããããã®ã¯å€æŽããŸãããã¢ããã°ã¬ãŒãããå Žåã¯ããupg_versionããåç §ããŠãã ããã
SVã
SV* æ°ããããŒãžã§ã³(SV *ver)
ãã¬ã¹ãã£ã³_ããŒãžã§ã³
æå®ãããæååãããŒãžã§ã³ ãªããžã§ã¯ããšããŠè§£æã§ãããã©ãããæ€èšŒããŸããã解æã§ããªããã©ãããæ€èšŒããŸãã
å®éã«è§£æãå®è¡ããŸããå³æ Œãªæ€èšŒã«ãŒã«ãŸãã¯ç·©ãæ€èšŒã«ãŒã«ã䜿çšã§ããŸããã§ãã
ãªãã·ã§ã³ã§ã解æã³ãŒããä¿åããããã«ããã€ãã®ãã³ãå€æ°ãèšå®ããŸãã
ããŒã¯ã³åã
const char* prescan_version(const char *s, bool strict,
const char** errstrã
bool *sqvã
int *ssaw_10 é²æ°ã
int *swidthãbool *salpha)
ã¹ãã£ã³ããŒãžã§ã³
解æãããããŒãžã§ã³æååã®åŸã®æ¬¡ã®æåãžã®ãã€ã³ã¿ãè¿ããŸãã
æž¡ãããSVãRVã«ã¢ããã°ã¬ãŒãããå Žåã
é¢æ°ã¯ã次ã®ãããªæ¢åã® SV ã䜿çšããŠåŒã³åºãå¿ èŠããããŸãã
SV = æ°ããSVïŒ0ïŒ;
s = scan_version(s, SV *sv, bool qv);
æååã«ååŠçãå®è¡ããŠãæååãæ£ããããšã確èªããŸãã
ããŒãžã§ã³ã®ç¹åŸŽããªããžã§ã¯ãã«ã¢ã³ããŒã¹ã³ã¢ãå«ãŸããŠããå Žåã«ãã©ã°ãç«ãŠã
(ããã¯ããããã¢ã«ãã¡çã§ããããšã瀺ããŸã)ãããŒã«å€ qv ã¯ãããŒãžã§ã³ã
ããšãããã§ãªããŠããè€æ°ã®å°æ°ããããã®ããã«è§£éãããå¿ èŠããããŸãã
const char* scan_version(const char *s, SV *rv, bool qv)
ã¢ããã°ã¬ãŒã_ããŒãžã§ã³
æäŸããã SV ã®ããŒãžã§ã³ ãªããžã§ã¯ããžã®ã€ã³ãã¬ãŒã¹ ã¢ããã°ã¬ãŒãã
SV *sv = upg_version(SV *sv, bool qv);
ã¢ããã°ã¬ãŒãããã SV ãžã®ãã€ã³ã¿ãè¿ããŸãã匷å¶ãããå Žåã¯ããŒã«å€ qv ãèšå®ããŸã
ãã® SV ã¯ãæ¡åŒµãããŒãžã§ã³ãšããŠè§£éãããŸãã
SV* upg_version(SV *ver, bool qv)
vcmp ããŒãžã§ã³ãªããžã§ã¯ãèªè cmpãäž¡æ¹ã®ãªãã©ã³ããæ¢ã«æ¬¡ã®ããã«å€æãããŠããå¿ èŠããããŸãã
ããŒãžã§ã³ãªããžã§ã¯ãã
int vcmp(SV *lhv, SV *rhv)
vnormal ããŒãžã§ã³ ãªããžã§ã¯ããåãå ¥ããæ£èŠåãããæååè¡šçŸãè¿ããŸããé»è©±
以äžã®ããã«ïŒ
sv = vnormal(rv);
泚: ãªããžã§ã¯ããçŽæ¥æž¡ãããšããRV å ã«å«ãŸãã SV ãæž¡ãããšãã§ããŸãã
è¿ããã SV ã® refcount 㯠1 ã§ãã
SV* vnormal(SV *vs)
vnumify ããŒãžã§ã³ ãªããžã§ã¯ããåãå ¥ããæ£èŠåãããæµ®åå°æ°ç¹è¡šçŸãè¿ããŸãã
次ã®ããã«åŒã³åºããŸãã
sv = vnumify(rv);
泚: ãªããžã§ã¯ããçŽæ¥æž¡ãããšããRV å ã«å«ãŸãã SV ãæž¡ãããšãã§ããŸãã
è¿ããã SV ã® refcount 㯠1 ã§ãã
SV* vnumify(SV *vs)
vstringify
Perl ã®ä»¥åã®ããŒãžã§ã³ãšã®äºææ§ãæ倧éã«ç¶æããããã«ãããã¯
é¢æ°ã¯æµ®åå°æ°ç¹è¡šèšãŸãã¯è€æ°ã®ããããè¿ããŸãã
å ã®ããŒãžã§ã³ã« 1 ã€ä»¥äžã®ããããå«ãŸããŠãããã©ããã«å¿ããŠè¡šèšããŸãã
ã
è¿ããã SV ã® refcount 㯠1 ã§ãã
SV* vstringify(SV *vs)
vverify SV ã«ããŒãžã§ã³ ãªããžã§ã¯ãã®æå¹ãªå éšæ§é ãå«ãŸããŠããããšãæ€èšŒããŸãããã
ããŒãžã§ã³ ãªããžã§ã¯ã (RV) ãŸãã¯ããã·ã¥èªäœ (HV) ã®ãããããæž¡ãããšãã§ããŸãããã
æ§é äœãæå¹ãªå ŽåãHV ãè¿ããŸããæ§é äœãç¡å¹ãªå Žåã¯ãæ»ãå€ãè¿ãããŸãã
ãã«ã
SV *hv = vverify(sv);
æäœéã®æ§é ã®ã¿ã確èªããŠããããšã«æ³šæããŠãã ããïŒæ··ä¹±ããªãããã«ïŒ
è¿œå ã®ããã·ã¥ ãšã³ããªãå«ãå¯èœæ§ããã掟çã¯ã©ã¹ã«ãã):
SV* vverify(SV *vs)
èŠå ãš æ»ã¬
croak ããã¯ãPerl ã®ãdieãé¢æ°ãžã® XS ã€ã³ã¿ãŒãã§ã€ã¹ã§ãã
sprintf ã¹ã¿ã€ã«ã®ãã©ãŒããã ãã¿ãŒã³ãšåŒæ°ãªã¹ããååŸããŸãããããã¯çæããããã«äœ¿çšãããŸã
æååã¡ãã»ãŒãžã ã¡ãã»ãŒãžãæ¹è¡ã§çµãã£ãŠããªãå Žåã¯ã次ã®ããã«ãªããŸãã
説æãããŠããããã«ãã³ãŒãå ã®çŸåšã®äœçœ®ã瀺ããã®ãè¿œå ããŠæ¡åŒµãããŠããŸãã
ãmess_svãã®å Žåã
ãšã©ãŒ ã¡ãã»ãŒãžã¯äŸå€ãšããŠäœ¿çšãããããã©ã«ãã§å¶åŸ¡ãè¿ãããŸãã
æãè¿ãå²ã¿ãevalãã§ããã$SIG{__DIE__} ã«ãã£ãŠå€æŽãããå¯èœæ§ããããŸãã
ãã³ãã©ããããã«ããããcroakãé¢æ°ã¯æ£åžžã«æ»ãããšã¯ãããŸããã
æŽå²çãªçç±ã«ããããpatãã null ã®å ŽåããERRSVã($@) ã®å 容ã¯æ¬¡ã®ããã«ãªããŸãã
ãããšã©ãŒ ã¡ãã»ãŒãžãäœæãã代ããã«ããšã©ãŒ ã¡ãã»ãŒãžãŸãã¯ãªããžã§ã¯ããšããŠäœ¿çšãããŸãã
åŒæ°ãæåå以å€ã®ãªããžã§ã¯ããã¹ããŒããå ŽåããŸãã¯ãšã©ãŒ ã¡ãã»ãŒãžãäœæããå Žåã¯ã
SV ãèªåã§äœ¿çšããå Žåã¯ããcroak_svãé¢æ°ã䜿çšããããšããå§ãããŸãã
ãERRSVãã®ç Žå£ãå«ãŸããŸãã
void croak(const char *pat, ...)
croak_no_modify
ãPerl_croak(aTHX_ "%s", PL_no_modify)ããšãŸã£ããåãã§ãããterser ãçæããŸãã
ãPerl_croakãã䜿çšããããããªããžã§ã¯ãã³ãŒããå€æŽããŸããäŸå€ã³ãŒããã¹ã§äœ¿çšãããã³ãŒããå°ãªããªã
CPU ãã£ãã·ã¥ã®è² è·ã軜æžããŸãã
void croak_no_modify()
croak_sv
ããã¯ãPerl ã®ãdieãé¢æ°ãžã® XS ã€ã³ã¿ãŒãã§ã€ã¹ã§ãã
ãbaseexãã¯ãšã©ãŒ ã¡ãã»ãŒãžãŸãã¯ãªããžã§ã¯ãã§ããåèã«ãªãã°äœ¿ãããŠããã ããŸã
ãã®ãŸãŸããã以å€ã®å Žåã¯æååãšããŠäœ¿çšãããæ¹è¡ã§çµãããªãå Žåã¯
ãã®åŸãã³ãŒãå ã®çŸåšã®äœçœ®ã瀺ããã®ã䜿çšããŠæ¡åŒµãããŸãã
ãmess_svãã§èª¬æãããšããã§ãã
ãšã©ãŒ ã¡ãã»ãŒãžãŸãã¯ãªããžã§ã¯ãã¯äŸå€ãšããŠäœ¿çšãããããã©ã«ãã§è¿ãããŸãã
ã³ã³ãããŒã«ã¯æãè¿ãå²ã¿ãevalãã«èšå®ãããŸããã
$SIG{__DIE__} ãã³ãã©ãŒããããã®å Žåãããcroak_svãé¢æ°ã¯æ»ããŸããã
æ£åžžã«ã
åçŽãªæååã¡ãã»ãŒãžã§çµäºããã«ã¯ããcroakãé¢æ°ã®æ¹ã䟿å©ãããããŸããã
void croak_sv(SV *baseex)
die æ»ãå€ã®åãé€ãããcroakããšåãããã«åäœããŸããã®ã¿äœ¿çšããå¿ èŠããããŸã
ããã§ããOP *ãæ»ãå€ã®åã¯å¿ é ã§ããé¢æ°ãå®éã«æ»ãããšã¯ãããŸããã
OP * die(const char *pat, ...)
die_sv æ»ãå€ã®åãé€ãããcroak_svããšåãããã«åäœããŸãã䜿çšããå¿ èŠããããŸã
"OP *" æ»ãå€ã®åãå¿ èŠãªå Žåã®ã¿ããã®é¢æ°ã¯å®éã«ã¯æ±ºããŠ
æ»ãã
OP * die_sv(SV *baseex)
vcroak ããã¯ãPerl ã®ãdieãé¢æ°ãžã® XS ã€ã³ã¿ãŒãã§ã€ã¹ã§ãã
ãpatããšãargsã㯠sprintf ã¹ã¿ã€ã«ã®åœ¢åŒãã¿ãŒã³ãšã«ãã»ã«åãããåŒæ°ã§ã
ãªã¹ãã ãããã¯æååã¡ãã»ãŒãžãçæããããã«äœ¿çšãããŸãã ã¡ãã»ãŒãžãçµãããªãå Žå
æ¹è¡ã䜿çšãããšãçŸåšã®å 容ã瀺ããã®ã§æ¡åŒµãããŸãã
ãmess_svãã§èª¬æãããŠããããã«ãã³ãŒãå ã®å Žæã
ãšã©ãŒ ã¡ãã»ãŒãžã¯äŸå€ãšããŠäœ¿çšãããããã©ã«ãã§å¶åŸ¡ãè¿ãããŸãã
æãè¿ãå²ã¿ãevalãã§ããã$SIG{__DIE__} ã«ãã£ãŠå€æŽãããå¯èœæ§ããããŸãã
ãã³ãã©ããããã«ããããcroakãé¢æ°ã¯æ£åžžã«æ»ãããšã¯ãããŸããã
æŽå²çãªçç±ã«ããããpatãã null ã®å ŽåããERRSVã($@) ã®å 容ã¯æ¬¡ã®ããã«ãªããŸãã
ãããšã©ãŒ ã¡ãã»ãŒãžãäœæãã代ããã«ããšã©ãŒ ã¡ãã»ãŒãžãŸãã¯ãªããžã§ã¯ããšããŠäœ¿çšãããŸãã
åŒæ°ãæåå以å€ã®ãªããžã§ã¯ããã¹ããŒããå ŽåããŸãã¯ãšã©ãŒ ã¡ãã»ãŒãžãäœæããå Žåã¯ã
SV ãèªåã§äœ¿çšããå Žåã¯ããcroak_svãé¢æ°ã䜿çšããããšããå§ãããŸãã
ãERRSVãã®ç Žå£ãå«ãŸããŸãã
void vcroak(const char *pat, va_ââlist *args)
vwarn ããã¯ãPerl ã®ãwarnãé¢æ°ãžã® XS ã€ã³ã¿ãŒãã§ã€ã¹ã§ãã
ãpatããšãargsã㯠sprintf ã¹ã¿ã€ã«ã®åœ¢åŒãã¿ãŒã³ãšã«ãã»ã«åãããåŒæ°ã§ã
ãªã¹ãã ãããã¯æååã¡ãã»ãŒãžãçæããããã«äœ¿çšãããŸãã ã¡ãã»ãŒãžãçµãããªãå Žå
æ¹è¡ã䜿çšãããšãçŸåšã®å 容ã瀺ããã®ã§æ¡åŒµãããŸãã
ãmess_svãã§èª¬æãããŠããããã«ãã³ãŒãå ã®å Žæã
ãšã©ãŒ ã¡ãã»ãŒãžãŸãã¯ãªããžã§ã¯ãã¯ããã©ã«ãã§æšæºãšã©ãŒã«æžã蟌ãŸããŸããã
$SIG{__WARN__} ãã³ãã©ãŒã«ãã£ãŠå€æŽãããå¯èœæ§ããããŸãã
ãvcroakããšã¯ç°ãªãããpatãã null ã«ããããšã¯ã§ããŸããã
void vwarn(const char *pat, va_ââlist *args)
warn ããã¯ãPerl ã®ãwarnãé¢æ°ãžã® XS ã€ã³ã¿ãŒãã§ã€ã¹ã§ãã
sprintf ã¹ã¿ã€ã«ã®ãã©ãŒããã ãã¿ãŒã³ãšåŒæ°ãªã¹ããååŸããŸãããããã¯çæããããã«äœ¿çšãããŸã
æååã¡ãã»ãŒãžã ã¡ãã»ãŒãžãæ¹è¡ã§çµãã£ãŠããªãå Žåã¯ã次ã®ããã«ãªããŸãã
説æãããŠããããã«ãã³ãŒãå ã®çŸåšã®äœçœ®ã瀺ããã®ãè¿œå ããŠæ¡åŒµãããŠããŸãã
ãmess_svãã®å Žåã
ãšã©ãŒ ã¡ãã»ãŒãžãŸãã¯ãªããžã§ã¯ãã¯ããã©ã«ãã§æšæºãšã©ãŒã«æžã蟌ãŸããŸããã
$SIG{__WARN__} ãã³ãã©ãŒã«ãã£ãŠå€æŽãããå¯èœæ§ããããŸãã
ãcroakããšã¯ç°ãªãããpatãã null ã«ããããšã¯ã§ããŸããã
void warn(const char *pat, ...)
warn_sv ããã¯ãPerl ã®ãwarnãé¢æ°ãžã® XS ã€ã³ã¿ãŒãã§ã€ã¹ã§ãã
ãbaseexãã¯ãšã©ãŒ ã¡ãã»ãŒãžãŸãã¯ãªããžã§ã¯ãã§ããåèã«ãªãã°äœ¿ãããŠããã ããŸã
ãã®ãŸãŸããã以å€ã®å Žåã¯æååãšããŠäœ¿çšãããæ¹è¡ã§çµãããªãå Žåã¯
ãã®åŸãã³ãŒãå ã®çŸåšã®äœçœ®ã瀺ããã®ã䜿çšããŠæ¡åŒµãããŸãã
ãmess_svãã§èª¬æãããšããã§ãã
ãšã©ãŒ ã¡ãã»ãŒãžãŸãã¯ãªããžã§ã¯ãã¯ããã©ã«ãã§æšæºãšã©ãŒã«æžã蟌ãŸããŸããã
$SIG{__WARN__} ãã³ãã©ãŒã«ãã£ãŠå€æŽãããå¯èœæ§ããããŸãã
åçŽãªæååã¡ãã»ãŒãžã§èŠåããã«ã¯ããwarnãé¢æ°ã®æ¹ã䟿å©ã§ãã
void warn_sv(SV *baseex)
ææžåãããŠããªã æ©èœ
次ã®é¢æ°ã¯ãããªã㯠API ã®äžéšãšããŠãã©ã°ãç«ãŠãããŠããŸãããçŸåšã¯
ææžåãããŠããªããã€ã³ã¿ãŒãã§ãŒã¹ã¯å€æŽãããå¯èœæ§ããããããèªå·±è²¬ä»»ã§äœ¿çšããŠãã ããã
ãã®ããã¥ã¡ã³ãã«èšèŒãããŠããªãæ©èœã¯äžè¬å ¬éãç®çãšããŠããªããããå ¬éããå¿ èŠããããŸãã
ãããªãç¶æ³ã§ã䜿çšããªãã§ãã ããã
以äžã®ææžåãããŠããªãé¢æ°ã®ããããã䜿çšããå Žåã¯ã
ãã®ããã®æžé¡ãæåºããããšãããããåãå ¥ããããå Žåãããã¯ã
ã€ã³ã¿ãŒãã§ã€ã¹ã¯å®å®ããŠããŸã (æ瀺çã«å¥ã®ããŒã¯ãä»ããããŠããªãéã)ã
GetVars
Gv_AMæŽæ°
PerlIO_clearrr
PerlIO_close
PerlIO_context_layers
PerlIO_eof
PerlIO_ãšã©ãŒ
PerlIO_ãã¡ã€ã«çªå·
PerlIO_fill
PerlIO_flush
PerlIO_get_base
PerlIO_get_bufsiz
PerlIO_get_cnt
PerlIO_get_ptr
PerlIO_read
PerlIO_seek
PerlIO_set_cnt
PerlIO_set_ptrcnt
PerlIO_setlinebuf
PerlIO_stderr
PerlIO_stdin
PerlIO_stdout
PerlIO_tell
PerlIO_æªèª
PerlIO_write
amagic_call
amagic_deref_call
any_dup
atfork_lock
atfork_unlock
av_arylen_p
av_iter_p
block_gimme
call_atexit
åŒã³åºããªã¹ã
åŒã³åºã
ãã£ã¹ã_i32
ãã£ã¹ã_iv
ãã£ã¹ã_ulong
ãã£ã¹ã_uv
ck_warner
ck_warner_d
èŠåãã
ckwarn_d
clone_params_del
clone_params_new
croak_memory_wrap
croak_nocontext
cighandler
cx_ãã³ã
cx_dup
cxinc
deb
deb_nocontext
ãããã
ããããããã³ã
ããã¹ã¿ãã¯
debstackptrs
ç Žç¶»
ãã£ã¹ããã_ã·ã°ãã«
die_nocontext
dirp_dup
do_aspawn
do_binmode
do_close
do_gv_dump
do_gvgv_dump
do_hv_dump
do_join
do_magic_dump
do_op_dump
do_open
do_open9
do_openn
do_pmop_dump
do_spawn
do_spawn_nowait
do_sprintf
do_sv_dump
æ±æè¡çº
ãã¬ã
颚äž
ãã¯ã³ã¿ã¬ã€
dump_eval
ãã³ããã©ãŒã
dump_indent
dump_mstats
ãã³ããµã
dump_vindent
ãã£ã«ã¿ãŒè¿œå
ãã£ã«ã¿ãŒãã«
ãã£ã«ã¿ãŒèªã¿åã
ãã©ãŒã«ãEQ_latin1
form_nocontext
fp_dup
fprintf_nocontext
free_global_struct
free_tmps
get_context
get_mstats
get_op_descs
get_op_names
get_paddr
get_vtbl
gp_dup
gp_free
gp_ref
gv_AVadd
gv_HVadd
gv_IOadd
gv_SVadd
gv_add_by_type
gv_autoload4
gv_autoload_pv
gv_autoload_pvn
gv_autoload_sv
gv_check
gv_ãã³ã
gv_efullname
gv_efullname3
gv_efullname4
gv_fetchfile
gv_fetchfile_flags
gv_fetchpv
gv_fetchpvn_flags
gv_fetchsv
gv_ãã«ããŒã
gv_ãã«ããŒã 3
gv_ãã«ããŒã 4
gv_handler
gv_name_set
圌_dup
hek_dup
hv_common
hv_common_key_len
hv_delayfree_ent
hv_eiter_p
hv_eiter_set
hv_free_ent
hv_ksplit
hv_name_set
hv_placeholders_get
hv_placeholders_set
hv_rand_set
hv_liter_p
hv_liter_set
ibcmp_utf8
init_global_struct
åæåã¹ã¿ãã¯
init_tm
åœä»€
is_lvalue_sub
Leave_scope
load_module_nocontext
ããžãã¯ãã³ã
mallocé¢æ°
ããŒã¯ã¹ã¿ãã¯_ã°ããŒ
æ··ä¹±ã®ã³ã³ããã¹ã
ç¡æ
mg_dup
mg_size
mini_mktime
ããå€ãã®ã¹ã€ãã
mro_get_from_name
mro_get_private_data
mro_set_mro
mro_set_private_data
my_atof
my_atof2
my_bcopy
my_bzero
my_chsize
my_cxt_index
my_cxt_init
my_dirfd
ç§ã®åºå£
my_failure_exit
my_fflush_all
ç§ã®ãã©ãŒã¯
my_lstat
my_memcmp
my_memset
my_pclose
my_popen
my_popen_list
my_setenv
ç§ã®ãœã±ãããã¢
my_stat
ç§ã®strftime
æ°ããANONATTRSUB
newã¢ãã³ããã·ã¥
æ°ããANONLIST
æ°ããANOSUB
æ°ããATTRSUB
æ°ããAVREF
æ°ããCVREF
æ°ãããã©ãŒã
æ°ããGVREF
æ°ããGVgen
newGVgen_flags
æ°ããHVREF
æ°ããHVhv
æ°ããIO
æ°ãããã€ãµã
æ°ããPROG
æ°ããRV
æ°ãããµã
æ°ããSVREF
newSVpvf_nocontext
æ°ããã¹ã¿ãã¯æ å ±
å¿è
op_refcnt_lock
op_refcnt_unlock
ããŒãµãŒ_dup
perl_alloc_using
perl_clone_using
pmop_dump
ãããã¹ã³ãŒã
ãã¬ã°ã³ã³ã
pregexec
ãã¬ã°ããªãŒ
ãã¬ã°ããªãŒ2
printf_nocontext
ptr_table_fetch
ptr_table_free
ptr_table_new
ptr_table_split
ptr_table_store
ããã·ã¥ã¹ã³ãŒã
åã³ã³ãã€ã«
re_dup_ã¬ãã
re_intuit_start
re_intuit_string
åå²ãåœãŠ
ãªãšã³ãã©ã³ãããªãŒ
reentrant_init
åå ¥å¯èœ_åè©Šè¡
reentrant_size
åç §
reg_named_buff_all
reg_named_buff_exists
reg_named_buff_fetch
reg_named_buff_firstkey
reg_named_buff_nextkey
reg_named_buff_scalar
regclass_swash
regdump
regdupe_internal
regexec_flags
regfree_internal
è²ãåèšå®ãã
次ãž
ç¹°ãè¿ããŸã
ãã³ã¹ã
ä¿¡å·
rsignal_state
runops_debug
runops_standard
rvpv_dup
å®å šãªsyscalloc
ã»ãŒãã·ã¹ããªãŒ
ã»ãŒãã·ã¹ããã¯
ã»ãŒãã·ã¹ãªã¢ããã¯
ä¿å_I16
ä¿å_I32
ä¿å_I8
save_adelete
ä¿å_aelem
save_aelem_flags
ä¿å_å²ãåœãŠ
ä¿å_aptr
ä¿å
ä¿åããŒã«
save_clearsv
ä¿å_åé€
ã»ãŒããã¹ãã©ã¯ã¿ãŒ
ã»ãŒã_ãã¹ãã©ã¯ã¿ãŒ_x
save_freeop
save_freepv
save_freesv
save_generic_pvref
save_generic_svref
ã»ãŒã_GP
ããã·ã¥ã®ä¿å
ä¿å_håé€
ã»ãŒã_ãã¬ã
save_helem_flags
ãã³ãã®ä¿å
ä¿å_hptr
save_int
ã¢ã€ãã ã®ä¿å
ä¿å_iv
ä¿åãªã¹ã
é·ãä¿å
save_mortalizesv
save_nogv
ä¿åæäœ
save_padsv_and_mortalize
ä¿å_pptr
save_pushi32ptr
save_pushtr
save_pushptrptr
ã³ã³ããã¹ãã®ä¿å
ä¿å_ã¹ã«ã©ãŒ
save_set_svflags
save_shared_pvref
ä¿å_sptr
ã»ãŒã_svref
ã»ãŒã_vptr
ã»ãŒãã¹ã¿ãã¯_ã°ããŒ
savestack_grow_cnt
ã¹ãã£ã³çªå·
scan_vstring
ã·ãŒã
ã»ããã³ã³ããã¹ã
set_numeric_local
set_numeric_radix
set_numeric_standard
ã·ã§ã¢ãã¯
si_dup
ss_dup
stack_grow
start_subparse
str_to_version
sv_2iv
sv_2pv
sv_2uv
sv_catpvf_mg_nocontext
sv_catpvf_nocontext
sv_dup
sv_dup_inc
sv_peek
sv_pvn_nomg
sv_setpvf_mg_nocontext
sv_setpvf_nocontext
ã¹ã¯ãã·ã¥ãã§ãã
swash_init
sys_init
sys_init3
sys_intern_clear
sys_intern_dup
sys_intern_init
ã·ã¹ãã çšèª
taint_env
taint_proper
ãªã³ã¯ãå€ã
å ±æ解é€
utf16_to_utf8
utf16_to_utf8_reversed
uvuni_to_utf8
ãŽãã
ãã©ãŒã
vload_module
vnewSVpvf
ãŽã¯ãŒããŒ
warn_nocontext
ã¯ãŒããŒ
warner_nocontext
ãŠã£ãã
whatsig_pv
whatsig_pvn
ã©ã®ã·ã°_sv
äœè
1997 幎 XNUMX æãŸã§ããã®ææžã¯ãžã§ãã»ãªã«ã¢ãã«ãã£ãŠç®¡çãããŠããŸããã[ã¡ãŒã«ä¿è·]>ã ããã¯
çŸåšãPerl èªäœã®äžéšãšããŠç¶æãããŠããŸãã
Dean RoehrichãMalcolm BeattieãAndreas Koenig ããã®å€ãã®æ¯æŽãšææ¡ã«ããã
ããŒã«ã»ãããœã³ãã€ãªã€ã»ã¶ã«ã¬ãŽã£ãããããŒã«ã»ããŒãã¹ãããŒã«ã»ããŠã¯ãŒãºããã·ã¥ãŒã»ã°ãªãŒã³ããã£ã ã»ãã³ã¹ã
ã¹ãã€ããŒã»ããŒããã³ããŠã«ãªããã»ãã¡ã€ãã¡ãŒãã¹ãã£ãŒãã³ã»ããã«ãã³ããã°ã«ãµããŒã»ãµã©ã·ãŒã
Dean Roehrich ã«ãã API ãªã¹ã[ã¡ãŒã«ä¿è·]>.
Benjamin Stuhl ã«ãããœãŒã¹å ã®ã³ã¡ã³ãããèªåçæãããããã«æŽæ°ãããŸããã
onworks.net ãµãŒãã¹ã䜿çšã㊠perlapi ãªã³ã©ã€ã³ã䜿çšãã